快递100

注册获取密钥 

https://api.kuaidi100.com/register/basic

 

快递公司编码大全  

https://poll.kuaidi100.com/manager/page/document/kdbm

需要存入数据库,后续接口需要获取快递公司的代码才能正确调用接口
 
 
springboot 配置
kuaidi100:
  key:  
  customer:  
  secret: 
  userId: 
  judge: 
  queryUrl: https://poll.kuaidi100.com/poll/query.do  #查询快递的地址 固定
  subscribeUrl: https://poll.kuaidi100.com/poll       #订阅快递的地址 固定
  judgeUrl: http://www.kuaidi100.com/autonumber/auto   #智能判断快递的地址  固定
  callbackUrl: http://121.36.107.100:30000/kuaiDi100/callback   #快递消息 状态变更后通知的地址
 
 

实时查询快递接口   

https://poll.kuaidi100.com/manager/page/document/synquery

@Data
public class QueryExpressParam {

    @NotNull
    @ApiModelProperty("快递公司编码")
    private String com;

    @NotNull
    @ApiModelProperty("快递单号")
    private String num;

    @ApiModelProperty("收件人或寄件人的手机号,可选(顺丰必填)")
    private String phone;

    @ApiModelProperty("出发地城市,省-市-区(可选)")
    private String from;

    @ApiModelProperty("目的地城市,省-市-区(可选)")
    private String to;

}


public String queryOrder(QueryExpressParam queryExpressParam) {
        String queryUrl = kuaiDi100Properties.getQueryUrl();
        HttpHeaders headers = new HttpHeaders();
        headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
        MultiValueMap<String, String> map= new LinkedMultiValueMap<>();
        String paramString = JSONObject.toJSONString(queryExpressParam);
        String sign = md5Uppercase(paramString + kuaiDi100Properties.getKey() + kuaiDi100Properties.getCustomer());
        map.add("customer", kuaiDi100Properties.getCustomer());
        map.add("sign", sign);
        map.add("param", paramString);
        HttpEntity<MultiValueMap<String, String>> request = new HttpEntity<>(map, headers);
        ResponseEntity<String> responseEntity = restTemplate.postForEntity(queryUrl, request, String.class);
        return responseEntity.getBody();
}
 

订阅推送接口 

https://poll.kuaidi100.com/manager/page/document/subscribe

 
 public KuaiDi100Response subscribe(SubscribeParam subscribeParam) {
        //快递100订阅地址
        String subscribeUrl = kuaiDi100Properties.getSubscribeUrl();
        HttpHeaders headers = new HttpHeaders();
        headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
        MultiValueMap<String, String> map= new LinkedMultiValueMap<>();
        SubscribeExpressModel model = initSubscribeExpressModel(subscribeParam);
        map.add("schema", "json");
        map.add("param", JSONObject.toJSONString(model));
        HttpEntity<MultiValueMap<String, String>> request = new HttpEntity<>(map, headers);
        ResponseEntity<String> responseEntity = restTemplate.postForEntity(subscribeUrl, request, String.class);
        return JSON.parseObject(responseEntity.getBody(), KuaiDi100Response.class);
 }


// 回调
public KuaiDi100Response callback(HttpServletRequest request) {
        String sign = request.getParameter("sign");
        String param = request.getParameter("param");
        String id = request.getParameter("id");
        String type = request.getParameter("type");
    
        KuaiDi100Response kuaiDi100Response = new KuaiDi100Response();

        try {
            CallBackParam callBackParam = JSONObject.parseObject(param, CallBackParam.class);
            CallBackParam.LastResultBean lastResult = callBackParam.getLastResult();
            List<CallBackParam.LastResultBean.DataBean> data = lastResult.getData();
            // 快递json数据
            String dataString = JSONObject.toJSONString(data);
            String num = lastResult.getNu();
            String companyCode = lastResult.getCom();
            ExpressRecord record = expressRecordService.getByCompanyCodeAndNum(companyCode, num);
            //新增记录 或修改记录
            if(null == record){
                ExpressCompanyDict expressCompanyDict = expressCompanyDictService.getByCompanyCode(companyCode);
                String companyName = expressCompanyDict.getCompanyName();
                ExpressRecord expressRecord = new ExpressRecord();
                expressRecord.setId(IdUtil.simpleUUID());
                expressRecord.setStatus(callBackParam.getStatus());
                expressRecord.setNum(lastResult.getNu());
                expressRecord.setCompanyName(companyName);
                expressRecord.setState(lastResult.getState());
                expressRecord.setIscheck(lastResult.getIscheck());
                expressRecord.setData(dataString);
                if(StringUtils.hasText(id) && StringUtils.hasText(type)){
                    expressRecord.setBusinessId(id);
                    expressRecord.setBusinessType(type);
                }
                expressRecordService.insert(expressRecord);
            }else {
                ExpressRecord expressRecord = new ExpressRecord();
                BeanUtil.copyProperties(record, expressRecord);
                expressRecord.setData(dataString);
                expressRecord.setStatus(callBackParam.getStatus());
                expressRecord.setState(lastResult.getState());
                expressRecord.setIscheck(lastResult.getIscheck());
                expressRecordService.updateSelective(expressRecord);
            }

            //修改业务状态
            boolean updateFlag = StringUtils.hasText(id) && StringUtils.hasText(type) && (3 == lastResult.getState() || 1 == lastResult.getIscheck());
            if(updateFlag){
                updateStatusByBusinessParam(id, type);
            }

            kuaiDi100Response.setResult(true);
            kuaiDi100Response.setReturnCode("200");
            kuaiDi100Response.setMessage("接收成功");
        } catch (Exception e) {
            e.printStackTrace();
            log.error("kuaiDi100 callback has error: {}", e.getMessage());
            kuaiDi100Response.setResult(false);
            kuaiDi100Response.setReturnCode("500");
            kuaiDi100Response.setMessage(e.getMessage());
        }
        return  kuaiDi100Response;
    }
智能判断接口  

https://poll.kuaidi100.com/manager/page/document/autonumber

 
public String judgeExpressNum(String num) {
        String getUrl = kuaiDi100Properties.getJudgeUrl() + "?" +
                "num=" + num +
                "&key=" + kuaiDi100Properties.getJudge();
        ResponseEntity<String> responseEntity = restTemplate.getForEntity(getUrl, String.class);
        return responseEntity.getBody();
}

public List<JudgeResult> getJudgeResult(String num) {
        String jsonStr = judgeExpressNum(num);
        if(jsonStr.contains("returnCode")){
            JSONObject jsonObject = JSONObject.parseObject(jsonStr);
            ExceptionCast.cast(new ErrorCode(500, jsonObject.getString("message")));
        }
        List<JudgeResult> results = JSONObject.parseArray(jsonStr, JudgeResult.class);
        for (JudgeResult result : results) {
            ExpressCompanyDict expressCompany = expressCompanyDictService.getByCompanyCode(result.getComCode());
            if(null != expressCompany){
                result.setCompanyName(expressCompany.getCompanyName());
            }
        }
        return results;
}
 
 
 
 
 
 
 
 
 
 



 
原文地址:https://www.cnblogs.com/xues/p/13346357.html