zoukankan      html  css  js  c++  java
  • 快递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;
    }
     
     
     
     
     
     
     
     
     
     



     
  • 相关阅读:
    codeforces 560 B. Gerald is into Art (模拟)
    导航控制器属性和基本使用
    多控制器和导航控制器简单介绍
    SQLite数据库框架--FMDB简单介绍
    数据库sqlite3的使用-ios中引用方法
    数据库sqlite3的使用-代码实例应用
    数据库sqlite3的使用-基本语法
    数据库sqlite3的使用-Navicat的安装
    如何制作.a静态库?合成多架构静态库?
    苹果Instruments/Shark性能调试工具概述
  • 原文地址:https://www.cnblogs.com/xues/p/13346357.html
Copyright © 2011-2022 走看看