Blogger Information
Blog 1
fans 0
comment 0
visits 788
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
接入超过100家快递物流查询API接口调用指南
菲儿
Original
788 people have browsed it

概要:关于调用快递鸟API,我有几句话想说,有几行代码想写

业务需求:就是做做商城,卖卖东西。然后需要做个物流跟踪的功能,然后可能需要一个或者多个物流快递对接,像主流的顺丰快递、中通快递、圆通快递、韵达快递、申通快递、百世快递、天天快递、优速快递、安能物流、德邦物流、极兔快递、丰网速运及海外的TNT、UPS等国际物流快递,那就需要一个第三方快递快递鸟物流查询接口进行对接使用了。

  需要获取的信息大概就是这个样子 

QQ截图20210517205421.png

现在看这个快递怎么这么慢

如何实现?

直接调用快递鸟API。

首先登陆快递鸟官网,浏览器搜索 快递鸟。(感谢百度对我的学习方面一直以来给予的帮助,谢谢)

然后注册一个官网的账号,认证自己的用户信息,记住自己的用户ID和API key,代码里调用接口时会使用到。我这里主要做个物流跟踪的功能,所以我需要调用的物流跟踪API,所以我需要先订阅这个API的服务。大家如果想调用别的接口就相应的去订阅就可以了。

然后在官网找到这里 点击下载相应语言的demo

直接使用demo里面的代码即可,只需要改变一下EBusinessID和AppKey的值 

登录后复制

@

实例

RestController @RequestMapping("/admin/logistics") @Validated @Api(description = "物流追踪接口") public class AdminKdniaoTrackQueryAPI { //用户ID private String EBusinessID="用户ID"; //电商加密私钥,快递鸟提供,注意保管,不要泄漏 private String AppKey="API key"; //请求url private String ReqURL="http://api.kdniao.com/api/dist"; @RequiresPermissions("admin:logistics:getOrderTracesByJson") //@RequiresPermissionsDesc(menu = {"物流管理", "物流追踪"}, button = "查询") @ApiOperation(value = "根据物流单号和快递公司编码查询物流信息", notes = "根据物流单号和快递公司编码查询物流信息", httpMethod = "GET") @ApiImplicitParams({ @ApiImplicitParam(name = "shipChannel", value = "快递公司编码",dataType = "String"), @ApiImplicitParam(name = "shipSn", value = "物流单号", dataType = "String" ) }) @ResponseBody @GetMapping("/getOrderTracesByJson") public String getOrderTracesByJson(String shipChannel, String shipSn) throws Exception{ String requestData= "{'OrderCode':'','ShipperCode':'" + shipChannel + "','LogisticCode':'" + shipSn + "'}";
   Map<String, String> params = new HashMap<>();    params.put("RequestData", urlEncoder(requestData, "UTF-8"));    params.put("EBusinessID", EBusinessID);    params.put("RequestType", "1002");
   String dataSign=encrypt(requestData, AppKey, "UTF-8");    params.put("DataSign", urlEncoder(dataSign, "UTF-8"));    params.put("DataType", "2");

   String result=sendPost(ReqURL, params);    //根据公司业务处理返回的信息......
   return result;}/**
* MD5加密
* @param str 内容
* @param charset 编码方式
* @throws Exception
*/private String MD5(String str, String charset) throws Exception {
   MessageDigest md = MessageDigest.getInstance("MD5");
   md.update(str.getBytes(charset));    byte[] result = md.digest();
   StringBuffer sb = new StringBuffer(32);    for (int i = 0; i < result.length; i++) {        int val = result[i] & 0xff;        if (val <= 0xf) {
           sb.append("0");
       }
       sb.append(Integer.toHexString(val));
   }    return sb.toString().toLowerCase();}/**
* base64编码
* @param str 内容
* @param charset 编码方式
* @throws UnsupportedEncodingException
*/private String base64(String str, String charset) throws UnsupportedEncodingException {
   String encoded = base64Encode(str.getBytes(charset));    return encoded;}private String urlEncoder(String str, String charset) throws UnsupportedEncodingException{
   String result = URLEncoder.encode(str, charset);    return result;}/**
* 电商Sign签名生成
* @param content 内容
* @param keyValue Appkey
* @param charset 编码方式
* @throws UnsupportedEncodingException ,Exception
* @return DataSign签名
*/private String encrypt (String content, String keyValue, String charset) throws  Exception{    if (keyValue != null)
   {        return base64(MD5(content + keyValue, charset), charset);
   }    return base64(MD5(content, charset), charset);}/**
* 向指定 URL 发送POST方法的请求
* @param url 发送请求的 URL
* @param params 请求的参数集合
* @return 远程资源的响应结果
*/private String sendPost(String url, Map<String, String> params) {
   OutputStreamWriter out = null;
   BufferedReader in = null;
   StringBuilder result = new StringBuilder();    try {
       URL realUrl = new URL(url);
       HttpURLConnection conn =(HttpURLConnection) realUrl.openConnection();        // 发送POST请求必须设置如下两行
       conn.setDoOutput(true);
       conn.setDoInput(true);        // POST方法
       conn.setRequestMethod("POST");        // 设置通用的请求属性
       conn.setRequestProperty("accept", "*/*");
       conn.setRequestProperty("connection", "Keep-Alive");
       conn.setRequestProperty("user-agent",                "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
       conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
       conn.connect();        // 获取URLConnection对象对应的输出流
       out = new OutputStreamWriter(conn.getOutputStream(), "UTF-8");        // 发送请求参数
       if (params != null) {
           StringBuilder param = new StringBuilder();            for (Map.Entry<String, String> entry : params.entrySet()) {                if(param.length()>0){
                   param.append("&");
               }
               param.append(entry.getKey());
               param.append("=");
               param.append(entry.getValue());                //System.out.println(entry.getKey()+":"+entry.getValue());
           }            //System.out.println("param:"+param.toString());
           out.write(param.toString());
       }        // flush输出流的缓冲
       out.flush();        // 定义BufferedReader输入流来读取URL的响应
       in = new BufferedReader(                new InputStreamReader(conn.getInputStream(), "UTF-8"));
       String line;        while ((line = in.readLine()) != null) {
           result.append(line);
       }
   } catch (Exception e) {
       e.printStackTrace();
   }    //使用finally块来关闭输出流、输入流
   finally{        try{            if(out!=null){                out.close();
           }            if(in!=null){                in.close();
           }
       }        catch(IOException ex){
           ex.printStackTrace();
       }
   }    return result.toString();}private static char[] base64EncodeChars = new char[] {        'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H',        'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P',        'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X',        'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f',        'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n',        'o', 'p', 'q', 'r', 's', 't', 'u', 'v',        'w', 'x', 'y', 'z', '0', '1', '2', '3',        '4', '5', '6', '7', '8', '9', '+', '/' };public static String base64Encode(byte[] data) {
   StringBuffer sb = new StringBuffer();    int len = data.length;    int i = 0;    int b1, b2, b3;    while (i < len) {
       b1 = data[i++] & 0xff;        if (i == len)
       {
           sb.append(base64EncodeChars[b1 >>> 2]);
           sb.append(base64EncodeChars[(b1 & 0x3) << 4]);
           sb.append("==");            break;
       }
       b2 = data[i++] & 0xff;        if (i == len)
       {
           sb.append(base64EncodeChars[b1 >>> 2]);
           sb.append(base64EncodeChars[((b1 & 0x03) << 4) | ((b2 & 0xf0) >>> 4)]);
           sb.append(base64EncodeChars[(b2 & 0x0f) << 2]);
           sb.append("=");            break;
       }
       b3 = data[i++] & 0xff;
       sb.append(base64EncodeChars[b1 >>> 2]);
       sb.append(base64EncodeChars[((b1 & 0x03) << 4) | ((b2 & 0xf0) >>> 4)]);
       sb.append(base64EncodeChars[((b2 & 0x0f) << 2) | ((b3 & 0xc0) >>> 6)]);
       sb.append(base64EncodeChars[b3 & 0x3f]);
   }    return sb.toString();}

运行实例 »

点击 "运行实例" 按钮查看在线实例


Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments
Author's latest blog post