快递鸟api_快递鸟api收费标准 - CSDN
精华内容
参与话题
  • 各种快递查询Api接口(快递鸟)

    千次阅读 2018-09-25 18:04:56
    快递查询Api接口 接口文档及各开发语言Demo 查询Api接口定义 系统级输入参数 应用级输入参数 返回结果参数 请求JSON参数 响应JSON参数 查询Api接口使用 温馨提示 同类文章 ...

     

    前提

    项目开发中,有些需求难免会用到关于快递的一些Api接口;本篇主要介绍的是快递的查询Api及与其他各家的不同之处;

    常用的提供快递Api接口的有:

    1. 快递鸟
    2. 快递100
    3. 爱查快递
      等等

    如大家使用过,快递100和爱查快递等等网站提供的快递查询等接口时,你会发现,你所申请的账号或key每天调用Api接口的次数都是被限制的,有的是2000次/天,有的是5000次/次;唯一让你感到麻烦的是,要求用户添加外链,而快递鸟不需要用户添加外链。对于无门户网站的用户,无非就是很苛刻的要求;并且,超出部分需付费才能使用。

    快递鸟,请求Api接口是不限制次数的哟,并且永久免费

    固然,对于你小小的需求的话,快递100和爱查快递都可满足你的需求;但是,当万一某天请求次数太多,你的查询服务就得停止,影响你的产品体验;所以,推荐你直接使用快递鸟,一步到位。

    应用场景


    查询订单的物流信息

    此处输入图片的描述

    可实现需求

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

    申请Key


    http://www.kdniao.com/ServiceApply.aspx

    按照你的信息,依次把信息填写完整,点击提交申请即可。

    登录成功后,就可以看到ID和key等信息,有这些信息就可以请求查询等其他的接口Api

    此处输入图片的描述

    快递查询Api接口


    接口文档及各开发语言Demo

    http://www.kdniao.com/download

    查询Api接口定义

    系统级输入参数

    参数名称 类型 必须要求 说明
    RequestData String R 请求内容,JSON或XML格式,须和DataType一致
    EBusinessID String R 用户ID
    RequestType String R 请求指令类型:1002
    DataSign String R 数据内容签名
    DataType String O 请求、返回数据类型:1-xml,2-json;默认为xml格式

    应用级输入参数

    参数名称 类型 必须要求 说明
    OrderCode varchar(50) O 订单编号
    ShipperCode varchar(10) R 快递公司编码
    LogisticCode varchar(50) R 物流单号

    返回结果参数

    参数名称 类型 必须要求 说明
    EBusinessID Int R 电商用户ID
    OrderCode Varchar(50) O 订单编号
    ShipperCode varchar(10) R 快递公司编码
    LogisticCode Varchar(50) R 物流运单号
    Success Bool R 成功与否
    Reason Varchar(50) O 失败原因
    State Int R 物流状态1:已取件2:在途中3:签收
    Traces Varchar(Max) R 物流轨迹详情

    物流轨迹详情

    参数名称 类型 必须要求 说明
    AcceptTime DateTime R 时间
    AcceptStation Varchar(50) R 描述
    Remark Varchar(150) O 备注

    请求JSON参数

    {
        "OrderCode" : "",
        "ShipperCode" : "SF",
        "LogisticCode" : "118650888018"
    }
    

    响应JSON参数

    
    
    {
        "EBusinessID" : "1109259",
        "OrderCode" : "",
        "ShipperCode" : "SF",
        "LogisticCode" : "118461988807",
        "Success" : true,
        "State" : 3,
        "Reason" : null,
        "traces" : [{
                "AcceptTime" : "2014/06/25 08:05:37",
                "AcceptStation" : "正在派件..(派件人:邓裕富,电话:18718866310)[深圳 市]",
                "Remark" : null
            }, {
                "AcceptTime" : "2014/06/25 04:01:28",
                "AcceptStation" : "快件在 深圳集散中心 ,准备送往下一站 深圳 [深圳市]",
                "Remark" : null
            }, {
                "AcceptTime" : "2014/06/25 01:41:06",
                "AcceptStation" : "快件在 深圳集散中心 [深圳市]",
                "Remark" : null
            }, {
                "AcceptTime" : "2014/06/24 20:18:58",
                "AcceptStation" : "已收件[深圳市]",
                "Remark" : null
            }, {
                "AcceptTime" : "2014/06/24 20:55:28",
                "AcceptStation" : "快件在 深圳 ,准备送往下一站 深圳集散中心 [深圳市]",
                "Remark" : null
            }, {
                "AcceptTime" : "2014/06/25 10:23:03",
                "AcceptStation" : "派件已签收[深圳市]",
                "Remark" : null
            }, {
                "AcceptTime" : "2014/06/25 10:23:03",
                "AcceptStation" : "签收人是:已签收[深圳市]",
                "Remark" : null
            }
        ]
    }
    

    查询Api接口使用

    以Java开发语言为例,进行展开

    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.security.MessageDigest;
    import java.util.HashMap;
    import java.util.Map; 
    /**
     *
     * 快递鸟物流轨迹即时查询接口
     *
     * @技术QQ群: 456320272
     * @see: http://www.kdniao.com/YundanChaxunAPI.aspx
     * @copyright: 深圳市快金数据技术服务有限公司
     *
     * DEMO中的电商ID与私钥仅限测试使用,正式环境请单独注册账号
     * 单日超过500单查询量,建议接入我方物流轨迹订阅推送接口
     * 
     * ID和Key请到官网申请:http://www.kdniao.com/ServiceApply.aspx
     */
    public class KdniaoTrackQueryAPI {
    
            //DEMO
            public static void main(String[] args) {
                KdniaoTrackQueryAPI api = new KdniaoTrackQueryAPI();
                try {
                    String result = api.getOrderTracesByJson("ANE", "210001633605");
                    System.out.print(result);
    
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
    
            //电商ID
            private String EBusinessID="请到快递鸟官网申请http://www.kdniao.com/ServiceApply.aspx";
            //电商加密私钥,快递鸟提供,注意保管,不要泄漏
            private String AppKey="请到快递鸟官网申请http://www.kdniao.com/ServiceApply.aspx";
            //请求url
            private String ReqURL="http://api.kdniao.cc/Ebusiness/EbusinessOrderHandle.aspx";
    
            /**
             * Json方式 查询订单物流轨迹
             * @throws Exception 
             */
            public String getOrderTracesByJson(String expCode, String expNo) throws Exception{
                String requestData= "{'OrderCode':'','ShipperCode':'" + expCode + "','LogisticCode':'" + expNo + "'}";
    
                Map<String, String> params = new HashMap<String, String>();
                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;
            }
    
            /**
             * XML方式 查询订单物流轨迹
             * @throws Exception 
             */
            public String getOrderTracesByXml() throws Exception{
                String requestData= "<?xml version=\"1.0\" encoding=\"utf-8\" ?>"+
                                    "<Content>"+
                                    "<OrderCode></OrderCode>"+
                                    "<ShipperCode>SF</ShipperCode>"+
                                    "<LogisticCode>589707398027</LogisticCode>"+
                                    "</Content>";
    
                Map<String, String> params = new HashMap<String, String>();
                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", "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 = base64Encode(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();
            }
    
    
            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(); 
            }
        }
    

    其他Api接口,请转到快递鸟具体查看相关文档。

    温馨提示

    如你的产品需对接或集成快递接口,快递鸟是不错的选择;会给您提供专业的技术支持人员;查询次数不限,并永久免费。

    ps:Coolspan kdniao

    同类文章

    各种电子面单-Api接口(顺丰、快递鸟、菜鸟)

    --------------------- 本文来自 Cool-span 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/qxs965266509/article/details/51762707?utm_source=copy

    展开全文
  • 调用快递鸟 Api 查快递

    千次阅读 2018-06-27 15:25:06
    1.申请一个快递鸟的帐号获取授权申请 http://www.kdniao.com/reg快递鸟的帐号使永久免费的,且申请了立即就能用的,也不需要审核。2.按照单号识别接口和即时查询接口封装好数据3.获取返回的 json 数据输出import ...

    1.申请一个快递鸟的帐号获取授权申请 http://www.kdniao.com/reg

    快递鸟的帐号使永久免费的,且申请了立即就能用的,也不需要审核。

    2.按照单号识别接口即时查询接口封装好数据

    3.获取返回的 json 数据输出

    import json
    import urllib
    import urllib.request
    import hashlib
    import base64
    import urllib.parse
    
    # 此处为快递鸟官网申请的帐号和密码
    APP_id = "1266271"
    APP_key = "7526a46e-3a2a-4f5b-8659-d72f361e3386"
    
    
    def encrypt(origin_data, appkey):
        """数据内容签名:把(请求内容(未编码)+AppKey)进行MD5加密,然后Base64编码"""
        m = hashlib.md5()
        m.update((origin_data+appkey).encode("utf8"))
        encodestr = m.hexdigest()
        base64_text = base64.b64encode(encodestr.encode(encoding='utf-8'))
        return base64_text
    
    
    def sendpost(url, datas):
        """发送post请求"""
        postdata = urllib.parse.urlencode(datas).encode('utf-8')
        header = {
            "Accept": "application/x-www-form-urlencoded;charset=utf-8",
            "Accept-Encoding": "utf-8"
        }
        req = urllib.request.Request(url, postdata, header)
        get_data = (urllib.request.urlopen(req).read().decode('utf-8'))
        return get_data
    
    
    def get_company(logistic_code, appid, appkey, url):
        """获取对应快递单号的快递公司代码和名称"""
        data1 = {'LogisticCode': logistic_code}
        d1 = json.dumps(data1, sort_keys=True)
        requestdata = encrypt(d1, appkey)
        post_data = {
            'RequestData': d1,
            'EBusinessID': appid,
            'RequestType': '2002',
            'DataType': '2',
            'DataSign': requestdata.decode()}
        json_data = sendpost(url, post_data)
        sort_data = json.loads(json_data)
        return sort_data
    
    
    def get_traces(logistic_code, shipper_code, appid, appkey, url):
        """查询接口支持按照运单号查询(单个查询)"""
        data1 = {'LogisticCode': logistic_code, 'ShipperCode': shipper_code}
        d1 = json.dumps(data1, sort_keys=True)
        requestdata = encrypt(d1, appkey)
        post_data = {'RequestData': d1, 'EBusinessID': appid, 'RequestType': '1002', 'DataType': '2',
                     'DataSign': requestdata.decode()}
        json_data = sendpost(url, post_data)
        sort_data = json.loads(json_data)
        return sort_data
    
    
    def recognise(expresscode):
        """输出数据"""
        url = 'http://testapi.kdniao.cc:8081/Ebusiness/EbusinessOrderHandle.aspx'
        data = get_company(expresscode, APP_id, APP_key, url)
        if not any(data['Shippers']):
            print("未查到该快递信息,请检查快递单号是否有误!")
        else:
            print("已查到该", str(data['Shippers'][0]['ShipperName'])+"("+
                  str(data['Shippers'][0]['ShipperCode'])+")", expresscode)
            trace_data = get_traces(expresscode, data['Shippers'][0]['ShipperCode'], APP_id, APP_key, url)
            if trace_data['Success'] == "false" or not any(trace_data['Traces']):
                print("未查询到该快递物流轨迹!")
            else:
                str_state = "问题件"
                if trace_data['State'] == '2':
                    str_state = "在途中"
                if trace_data['State'] == '3':
                    str_state = "已签收"
                print("目前状态: "+str_state)
                trace_data = trace_data['Traces']
                item_no = 1
                for item in trace_data:
                    print(str(item_no)+":", item['AcceptTime'], item['AcceptStation'])
                    item_no += 1
                print("\n")
        return
    
    while True:
        code = input("请输入快递单号(Esc退出):")
        code = code.strip()
        if code == "esc":
            break
        recognise(code)

    展开全文
  • using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Net;... * 快递鸟订阅推送2.0接口 * * @技术QQ: 4009633321 * @技术QQ群: 200121393 * @se.
    using System;
    using System.Collections.Generic;
    using System.IO;
    using System.Linq;
    using System.Net;
    using System.Text;
    using System.Web;
    
    namespace KdGoldAPI
    {
        /**
        *
        * 快递鸟订阅推送2.0接口
        *
        * @技术QQ: 4009633321
    	* @技术QQ群: 200121393
        * @see: http://www.kdniao.com/api-subscribe
        * @copyright: 深圳市快金数据技术服务有限公司
        * 
        * ID和Key请到官网申请:http://www.kdniao.com/ServiceApply.aspx
        */
        public class KdApiSubscribeDemo
        {
            //电商ID
            private string EBusinessID = "请到快递鸟官网申请http://www.kdniao.com/ServiceApply.aspx";
            //电商加密私钥,快递鸟提供,注意保管,不要泄漏
            private string AppKey = "请到快递鸟官网申请http://www.kdniao.com/ServiceApply.aspx";
            //测试请求url
            private string ReqURL = "http://testapi.kdniao.com:8081/api/dist";
            //正式请求url
            //private string ReqURL = "http://api.kdniao.com/api/dist";
    
            /// <summary>
            /// Json方式  物流信息订阅
            /// </summary>
            /// <returns></returns>
            public string orderTracesSubByJson()
            {
                string requestData = "{'OrderCode': 'SF201608081055208281'," +
                                    "'ShipperCode':'SF'," +
                                    "'LogisticCode':'3100707578976'," +
                                    "'PayType':1," +
                                    "'ExpType':1," +
                                    "'CustomerName':'',"+
                                    "'CustomerPwd':''," +
                                    "'MonthCode':''," +
                                    "'IsNotice':0," +
                                    "'Cost':1.0," +
                                    "'OtherCost':1.0," +
                                    "'Sender':" +
                                    "{" +
                                    "'Company':'LV','Name':'Taylor','Mobile':'15018442396','ProvinceName':'上海','CityName':'上海','ExpAreaName':'青浦区','Address':'明珠路73号'}," +
                                    "'Receiver':" +
                                    "{" +
                                    "'Company':'GCCUI','Name':'Yann','Mobile':'15018442396','ProvinceName':'北京','CityName':'北京','ExpAreaName':'朝阳区','Address':'三里屯街道雅秀大厦'}," +
                                    "'Commodity':" +
                                    "[{" +
                                    "'GoodsName':'鞋子','Goodsquantity':1,'GoodsWeight':1.0}]," +
                                    "'Weight':1.0," +
                                    "'Quantity':1," +
                                    "'Volume':0.0," +
                                    "'Remark':'小心轻放'}";
    
                Dictionary<string, string> param = new Dictionary<string, string>();
                param.Add("RequestData", HttpUtility.UrlEncode(requestData, Encoding.UTF8));
                param.Add("EBusinessID", EBusinessID);
                param.Add("RequestType", "1008");
                string dataSign = encrypt(requestData, AppKey, "UTF-8");
                param.Add("DataSign", HttpUtility.UrlEncode(dataSign, Encoding.UTF8));
                param.Add("DataType", "2");
    
                string result = sendPost(ReqURL, param);
    
                //根据公司业务处理返回的信息......
    
                return result;
            }
    
            /// <summary>
            /// Post方式提交数据,返回网页的源代码
            /// </summary>
            /// <param name="url">发送请求的 URL</param>
            /// <param name="param">请求的参数集合</param>
            /// <returns>远程资源的响应结果</returns>
            private string sendPost(string url, Dictionary<string, string> param)
            {
                string result = "";
                StringBuilder postData = new StringBuilder();
                if (param != null && param.Count > 0)
                {
                    foreach (var p in param)
                    {
                        if (postData.Length > 0)
                        {
                            postData.Append("&");
                        }
                        postData.Append(p.Key);
                        postData.Append("=");
                        postData.Append(p.Value);
                    }
                }
                byte[] byteData = Encoding.GetEncoding("UTF-8").GetBytes(postData.ToString());
                try
                {
    
                    HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
                    request.ContentType = "application/x-www-form-urlencoded";
                    request.Referer = url;
                    request.Accept = "*/*";
                    request.Timeout = 30 * 1000;
                    request.UserAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)";
                    request.Method = "POST";
                    request.ContentLength = byteData.Length;
                    Stream stream = request.GetRequestStream();
                    stream.Write(byteData, 0, byteData.Length);
                    stream.Flush();
                    stream.Close();
                    HttpWebResponse response = (HttpWebResponse)request.GetResponse();
                    Stream backStream = response.GetResponseStream();
                    StreamReader sr = new StreamReader(backStream, Encoding.GetEncoding("UTF-8"));
                    result = sr.ReadToEnd();
                    sr.Close();
                    backStream.Close();
                    response.Close();
                    request.Abort();
                }
                catch (Exception ex)
                {
                    result = ex.Message;
                }
                return result;
            }
    
            ///<summary>
            ///电商Sign签名
            ///</summary>
            ///<param name="content">内容</param>
            ///<param name="keyValue">Appkey</param>
            ///<param name="charset">URL编码 </param>
            ///<returns>DataSign签名</returns>
            private string encrypt(String content, String keyValue, String charset)
            {
                if (keyValue != null)
                {
                    return base64(MD5(content + keyValue, charset), charset);
                }
                return base64(MD5(content, charset), charset);
            }
    
            ///<summary>
            /// 字符串MD5加密
            ///</summary>
            ///<param name="str">要加密的字符串</param>
            ///<param name="charset">编码方式</param>
            ///<returns>密文</returns>
            private string MD5(string str, string charset)
            {
                byte[] buffer = System.Text.Encoding.GetEncoding(charset).GetBytes(str);
                try
                {
                    System.Security.Cryptography.MD5CryptoServiceProvider check;
                    check = new System.Security.Cryptography.MD5CryptoServiceProvider();
                    byte[] somme = check.ComputeHash(buffer);
                    string ret = "";
                    foreach (byte a in somme)
                    {
                        if (a < 16)
                            ret += "0" + a.ToString("X");
                        else
                            ret += a.ToString("X");
                    }
                    return ret.ToLower();
                }
                catch
                {
                    throw;
                }
            }
    
            /// <summary>
            /// base64编码
            /// </summary>
            /// <param name="str">内容</param>
            /// <param name="charset">编码方式</param>
            /// <returns></returns>
            private string base64(String str, String charset)
            {
                return Convert.ToBase64String(System.Text.Encoding.GetEncoding(charset).GetBytes(str));
            }
        }
    }

     

    展开全文
  • 官网上没有ASP版本的,自己写的,快递鸟API快递查询接口ASP版本,在快递鸟的官网上申请注册,实名认证后得到ID,AppKey后可以查询到快递信息。
  • 快递鸟api接口

    千次阅读 2017-07-27 12:12:54
    有参考其他代码 # -*-coding:utf-8-*- import requests import base64 import hashlib import urllib ...import get_api import click url="http://api.kdniao.cc/Ebusiness/EbusinessOrderHandle

    有参考其他代码

    # -*-coding:utf-8-*-
    import requests
    import base64
    import hashlib
    import urllib
    import urllib2
    import json
    import get_api
    import click
    url="http://api.kdniao.cc/Ebusiness/EbusinessOrderHandle.aspx"
    
    def get_express_info(sc, lc):
        data = {
            'OrderCode': '',
            'ShipperCode':sc,
            'LogisticCode':lc
        }
        str_data = json.dumps(data)
        sign = get_api._encrypt(str_data, "d72cb1c4-daba-4290-ad2f-a78b34e990f5")
        params = {
            'RequestData': str_data,
            'EBusinessID': '1298264',
            'RequestType': '1002',
            'DataSign': sign,
            'DataType': '2'
        }
    
        http_header = {
            "Accept": "*/*",
            "Connection": "Keep-Alive",
            "Accept-Charset": "utf-8",
            "Content-type": "application/x-www-form-urlencoded",
        }
    
        req = urllib2.Request(url, urllib.urlencode(params), http_header)
        resp = urllib2.urlopen(req)
        content = resp.read()
        #logger.debug(content)
        return json.loads(content)
    
    
    def _encrypt(content, key_value):
        data = (content + key_value).encode('utf-8')
        #print(base64.urlsafe_b64encode(hashlib.md5(data).hexdigest().encode('utf-8')))
        return base64.urlsafe_b64encode(hashlib.md5(data).hexdigest().encode('utf-8'))
    
    
    def cli():
        sc=click.prompt('please input the number of the company',value_proc=str,show_default='HHTT')
        lc=click.prompt('please input the number of the express',value_proc=str,show_default='667758318190')
        s=get_express_info(sc,lc)
        print s['Reason']
        print json.dumps(s,encoding='utf-8',ensure_ascii=False) #dict inline utf8 to chinese
    cli()
    
    
    
    


    展开全文
  • 技术文档请参考快递鸟官网api:免费查询快递接口_100%安全保障_物流即时查询API-快递鸟 快递公司编码链接:https://www.kdniao.com/file/2019快递鸟接口支持快递公司编码.xlsx (一)接入流程: 1、登录快递鸟官网...
  • PHP 快递查询源码指导 (快递鸟API)

    千次阅读 2020-02-09 17:21:02
    最近进行网站后台开发,需要实现物流的即时查询,发现之前集成的 快递100物流... 为了方便以后的业务需求,经过比较,最后选择使用 第三方物流 ——【快递鸟】同时,在此进行整理,希望能帮到有需求的道友们,谢谢 …
  • 然后在我的会员中心查看自己的用户ID 和 API key 然后在及时查询中可以找到对接文档和一些实例,我下面写的python对接的实例 import json import urllib import urllib.request import has...
  • 电商产业的迅猛发展也推动着物流行业需求的增加,其中电商平台根据快递单号查询物流状态的需求就是基本需求,用户下单后商家把货物有没有及时的按要求发出去,就需要通过物流轨迹的揽件状态来判断,作为衡量商家物流...
  • //快递公司和,快递单号 var logistics = ["YD","1111111111"] //数据内容 var RequestData = "{'OrderCode':'','ShipperCode':'" + logistics[0] + "','LogisticCode':'" + logistics[1] + "'}" //utf-8...
  • 与第三方合作开发,免不了技术接口对接,常见的问题基本上是数据签名错误导致的接口联调失败,如,电商平台调用快递鸟接口时,需要数据签名验证,为了提供对接效率,给大家提供一些方法供大家参考。刚入门的菜鸟 ...
  • 快递鸟api接口的问题及解决方案

    万次阅读 2016-08-05 16:11:31
    前提:对于快递的物流信息查询,...至于快递鸟api如何使用,我在这里不说了,只要去官网下载相应的说明,就能搞定。我今天要说的是,在使用快递鸟的时候出现的问题及解决方案。 场景:在测试的过程中,查询物
  • 快递鸟 kdniao python sdk, with tornado async & asyncio http client support. https://github.com/menduo/kdniao_python kdniao_python 快递鸟 kdniao python sdk, with tornado async ...
  • 快递鸟API旨在为电商、电商平台、物流工具、打单工具、仓储系统、移动APP等系统提供专业、稳定、优质的API 接口服务,满足不同用户的物流管理需求。 本文档就各个API接口进行详细说明,方便用户快速对接及使用快递鸟...
  • 快递鸟查询Api接口使用(PHP版)

    千次阅读 2018-05-02 10:13:21
    常用的提供快递Api接口的有:快递鸟快递100爱查快递 等等如大家使用过,快递100和爱查快递等等网站提供的快递查询等接口时,你会发现,你所申请的账号或key每天调用Api接口的次数都是被限制的,有的是2000次/天,有...
  • 还有一种方式就是这里要重点介绍的,第三方软件对接(例如快递鸟),对接起来非常方便。 物流轨迹查询-使用的物流单号和快递单号即可实现查询物流信息。 对接在电商网站或ERP系统上后,仅输入单号就可以查询物流,...
  • 使用Delphi XE 10.1Berlin 开发的一个桌面应用,使用快递鸟提供的API,对快递单号进行识别,查询!
  • 快递鸟api,查询物流,nodejs实现
  • 快递鸟API对接

    2019-06-17 15:45:42
    2019独角兽企业重金招聘Python工程师标准>>> ...
  • 概要:关于调用快递鸟API,我有几句话想说,有几行代码想写 业务需求:就是做做商城,卖卖东西。然后需要做个物流跟踪的功能  需要获取的信息大概就是这个样子 现在看这个快递怎么这么慢 如何实现? 直接...
1 2 3 4 5 ... 20
收藏数 664
精华内容 265
关键字:

快递鸟api