1. 程式人生 > 實用技巧 >快遞100

快遞100

註冊獲取金鑰

快遞公司編碼大全 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;
}