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 #快递消息 状态变更后通知的地址
@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(); }
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; }
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