文档章节

快递鸟物流单号查询api接口集成,有需要的可以直接用

 程序的小猿
发布于 09/12 17:37
字数 1099
阅读 9
收藏 0

​​随着网购的发展,快递业也随之壮大。快递查询接口对接的需求量也越来越大,下面是对免费快递接口做的整理,并附上调用流程,分享给大家。

项目开发中,有些需求难免会用到关于快递的一些Api接口;本篇主要介绍的是快递鸟的查询Api接口。

可实现需求:

  1. App中直接集成实现快递物流信息查询Api接口
  2. 在微信公众号、微商城、电商网站平台中,根据用户输入的订单号,我们的后台识别订单号并根据快递鸟查询快递Api接口,实现自动查询的功能等。

官方网址: http://www.kdniao.com

即时查询api: http://www.kdniao.com/api-track

需要登录 ,申请一下 用户ID 和 API key

• 应用场景

① 买家物流查询:轨迹跟踪、包裹进度、预计送达时间、派送人联系方式等。

② 卖家物流跟踪:是否超区、转件、多次派送、拒收

③ 平台监控管理:假交易监控、匹配卖家发货与顾客确认收货时间。

可实现多种语言demo,以javademo为例:

import java.io.BufferedReader;
import java.io.IOException; 
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.UnsupportedEncodingException;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
import java.util.HashMap;
import java.util.Map;
import com.sun.org.apache.xerces.internal.impl.dv.util.Base64;
import java.security.MessageDigest; 

public class KdGoldAPIDemo {
    
    //电商ID
    private String EBusinessID="1237100";    
    //电商加密私钥,快递鸟提供,注意保管,不要泄漏(需重新申请ID)
    private String AppKey="518a73d8-1f7f-441a-b644-33e77b49d846";    
    //请求url
    private String ReqURL="http://api.kdniao.cc/Ebusiness/EbusinessOrderHandle.aspx";    
 
    /**
     * Json方式  物流信息订阅
     * @throws Exception 
     */
    public String orderTracesSubByJson() throws Exception{
        String requestData="{'Code': 'SF','Item': ["+
                           "{'No': '909261024507','Bk': 'test'},"+
                           "{'No': '589554393102','Bk': 'test'},"+
                           "{'No': '589522101958','Bk': 'test'},"+
                           "{'No': '909198822942', 'Bk': 'test'}"+
                           "]}";
        
        Map<String, String> params = new HashMap<String, String>();
        params.put("RequestData", urlEncoder(requestData, "UTF-8"));
        params.put("EBusinessID", EBusinessID);
        params.put("RequestType", "1005");
        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;
    }
    
    /**
     * XML方式  物流信息订阅
     * @throws Exception 
     */
    public String orderTracesSubByXml() throws Exception{
        String requestData="<?xml version=\"1.0\" encoding=\"utf-8\" ?>"+
                            "<Content>"+
                            "<Code>SF</Code>"+
                            "<Items>"+
                            "<Item>"+
                            "<No>909261024507</No>"+
                            "<Bk>test</Bk>"+
                            "</Item>"+
                            "<Item>"+
                            "<No>909261024507</No>"+
                            "<Bk>test</Bk>"+
                            "</Item>"+
                            "</Items>"+
                            "</Content>";
        
        Map<String, String> params = new HashMap<String, String>();
        params.put("RequestData", urlEncoder(requestData, "UTF-8"));
        params.put("EBusinessID", EBusinessID);
        params.put("RequestType", "1005");
        String dataSign=encrypt(requestData, AppKey, "UTF-8");
        params.put("DataSign", urlEncoder(dataSign, "UTF-8"));
        params.put("DataType", "1");
        
        String result=sendPost(ReqURL, params);    
        
        //根据公司业务处理返回的信息......
        
        return result;
    }
        
    /**
     * MD5加密
     * @param str 内容       
     * @param charset 编码方式
     * @throws Exception 
     */
    @SuppressWarnings("unused")
    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 = Base64.encode(str.getBytes(charset));
        return encoded;    
    }    
    
    @SuppressWarnings("unused")
    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签名
     */
    @SuppressWarnings("unused")
    private String encrypt (String content, String keyValue, String charset) throws UnsupportedEncodingException, 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 远程资源的响应结果
     */
    @SuppressWarnings("unused")
    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();
    }
}

 

 

© 著作权归作者所有

粉丝 0
博文 7
码字总数 6979
作品 0
深圳
私信 提问
支付宝小程序物流快递单号查询接口如何快速对接?

小程序,英文名Mini Program,是一种不需要下载安装即可使用的应用,它实现了应用“触手可及”的梦想,用户扫一扫或搜一下即可打开应用。也体现了“用完即走”的理念,用户不用关心是否安装太...

专心的小猿
07/17
0
0
PHP 快递查询源码指导 (快递鸟API)

☞ 背景 最近进行网站后台开发,需要实现物流的即时查询,发现之前集成的 ——【PHP 快递查询源码资源】 已经==不能正常使用了==; 为了方便以后的业务需求,经过比较,最后选择使用 第三方物...

豆芽七分熟
04/25
0
0
menduo/kdniao_python

kdniao_python 快递鸟 kdniao python sdk, with tornado async http client support. github: https://github.com/menduo/kdniaopython oschina: https://git.oschina.net/menduo/kdniaopyth......

menduo
2017/03/08
0
0
  极速数据api全国快递查询接口0.01元10000次分享

本接口将提供申通、中通、圆通、汇通、顺丰、韵达、天天、国通、全峰、EMS、德邦等物流公司在内的80多个物流公司的物流单号查询。只需输入快递公司名称以及订单号码,便可以快速和准确的返回...

asdcxz
2015/11/24
122
0
Java 后台框架源码 springmvc spring mybatis SSM 有代码生成器

官网 http://www.fhadmin.org/ A 调用摄像头拍照,自定义裁剪编辑头像,头像图片色度调节 B 集成代码生成器 [正反双向](单表、主表、明细表、树形表,快速开发利器)+快速表单构建器 freemake...

itfather
2017/06/03
0
0

没有更多内容

加载失败,请刷新页面

加载更多

小知识:讲述Linux命令别名与资源文件的区别

别名 别名是命令的快捷方式。为那些需要经常执行,但需要很长时间输入的长命令创建快捷方式很有用。语法是: alias ppp='ping www.baidu.com' 它们并不总是用来缩短长命令。重要的是,你将它...

老孟的Linux私房菜
37分钟前
2
0
《JAVA核心知识》学习笔记(6. Spring 原理)-5

它是一个全面的、企业应用开发一站式的解决方案,贯穿表现层、业务层、持久层。但是 Spring 仍然可以和其他的框架无缝整合。 6.1.1. Spring 特点 6.1.1.1. 轻量级 6.1.1.2. 控制反转 6.1.1....

Shingfi
38分钟前
4
0
Excel导入数据库数据+Excel导入网页数据【实时追踪】

1.Excel导入数据库数据:数据选项卡------>导入数据 2.Excel导入网页数据【实时追踪】:

东方墨天
46分钟前
4
1
正则表达式如何匹配一个单词存在一次或零次并且不占捕获组位置

正则表达式如何匹配一个单词存在一次或零次并且不占捕获组位置 今天要用正则表达式实现匹配一个词出现一次或者不出现的情况,但是又不仅仅是这么简单的需求。先详细说下我这种情况吧,也许有...

Airship
52分钟前
6
0
第八讲:asp.net C# web 读取文件

本讲主要讲解如何在asp.net页面上传文件。 首先,前台页面: 其次,后台页面: 结果: 1、前台效果: 2、后台结果:

刘日辉
今天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部