• 丰网速运单号查询快递鸟API接口-丰网速运


    前言

    顺丰斥资1000万成立深圳丰网速运有限公司。其中,顺丰速运出资800万,持股80%,中金出资200万,持股20%。

    据悉,该公司成立时间为2020年4月7日,法人代表为吴国忠,杨尊淼、李祥乐任董事,马立军任监事。

    经营范围包括:国际货运代理;经济技术咨询;技术信息咨询;以特许经营方式从事商业活动;经营进出口业务;机械设备租赁;汽车租赁;房屋租赁业务;商务服务、商务代理;过境货物运输代理;3C产品检测、维修服务。许可经营项目是:国内、国际快递;国际供应链;普通货运;货物专用运输,大型物件运输;仓储服务。

    接下来给大家讲解一下如何对接丰网速运的快递查询接口。

    调用快递鸟的丰网速运查询API接口,能查询到丰网速运单号从收件、运输,到转运中心,派送到签收等各个环节的物流发货状态。快递鸟api接口不区分开发语言,支持Java,C#,PHP,Python,ObjectC等开发语言的程序调用。下面具体讲解实现过程.

    目录

    1.完成前期准备工作

    2.API接口

    3.请求参数(Headers)

    4.请求参数(Body)

    5.返回参数(Return)

    6.请求完整报文(示例)

    7.成功返回报文(示例)

    8.失败返回报文(示例)

    9.无轨迹返回报文(示例)

    10.分步讲解(C#版本)

    11.顺丰快递查询接口应用效果

    12.关于签名

    13.返回码定义

    1.完成前期准备工作

    1.1,去快递鸟官网免费注册一个账号

    1.2,免费获得一个apiKey(接口权限验证需要)

    1.3,完成实名认证流程

    1.4,订购一个免费套餐

    2.API接口


    2.1,测试调用地址:http://sandboxapi.kdniao.com:8080/kdniaosandbox/gateway/exterfaceInvoke.json

    2.2,正式调用地址:http://api.kdniao.com/api/dist

    2.3,请求方式:POST

    2.4,编码格式(utf-8):application/x-www-form-urlencoded;charset=utf-8

    2.5,返回类型:JSON

    2.6,调试页面:http://kdniao.com/UserCenter/v2/SandBox/TrackQuery.aspx

    2.7,调试工具:去调试(使用快递鸟账号登录)

    3.请求参数(Headers)

    参数名称 类型 说明 必须要求
    RequestData String 请求内容需进行URL(utf-8)编码,请求内容JSON格式,须和DataType一致 必填
    EBusinessID String 用户ID,查看用户ID和ApiKey 必填
    RequestType String 请求指令类型:1002  必填

    DataSign String 签名数据,(Body+ApiKey)进行MD5加密,再进行Base64编码,最后进行URL(utf-8)编码 必填
    DataType String 求、返回数据类型:2-json ,默认Json 选填

    4.请求参数(Body)

    参数名称 类型 说明 必须要求
    OrderCode String 订单编号 选填
    ShipperCode String 快递公司编码,丰网速运:SF 必填
    LogisticCode String 物流运单号 必填

     

    5.返回参数(Return)

    参数名称 类型 说明 必须要求
    EBusinessID String 用户ID  必填
    ShipperCode String 快递公司编码  必填
    LogisticCode String 物流运单号 选填
    Success String 成功与否 必填
    Reason String 失败原因 选填
    State String 物流状态:2-在途中,3-签收,4-问题件 必填
    Traces  String 时间  
    AcceptTime String   必填
    AcceptStation String 描述  选填
    Remark String 备注 必填

    6.请求完整报文(示例)

    RequestData=%0d%0a++++++++++++%7b%27OrderCode%27%3a%27%27%2c%27ShipperCode%27%3a%27SF%27%2c%27LogisticCode%27%3a%27295734066970%27%2c%27CustomerName
    %27%3a%276073%27%7d%0d%0a++++++++&EBusinessID=1264783&RequestType=1002&DataSign=ZTJlZWU0NjI1YTljNTlmYzY5Y2M4YjMzYjcxYWU3MDA%3d&DataType=2

     

    7.成功返回报文(示例)

    复制代码

    丰网速运单号295734066970的返回报文信息

    {

    "LogisticCode": "295734066970",

    "ShipperCode": "SF",

    "Traces": [{

    "AcceptStation": "顺丰速运 已收取快件",

    "AcceptTime": "2020-02-13 18:39:21"

    }, {

    "AcceptStation": "快件在【衡水桃城区集收客户营业部】已装车,准备发往 【石家庄高开集散中心】",

    "AcceptTime": "2020-02-13 18:39:31"

    }, {

    "AcceptStation": "快件已发车",

    "AcceptTime": "2020-02-13 19:15:24"

    }, {

    "AcceptStation": "快件到达 【石家庄高开集散中心】",

    "AcceptTime": "2020-02-14 04:27:00"

    }, {

    "AcceptStation": "快件在【石家庄高开集散中心】已装车,准备发往 【长沙星沙集散中心】",

    "AcceptTime": "2020-02-14 08:36:14"

    }, {

    "AcceptStation": "快件已发车",

    "AcceptTime": "2020-02-14 18:34:31"

    }, {

    "AcceptStation": "快件到达 【长沙星沙集散中心】",

    "AcceptTime": "2020-02-16 09:58:05"

    }, {

    "AcceptStation": "快件在【长沙星沙集散中心】已装车,准备发往 【怀化盈口集散点】",

    "AcceptTime": "2020-02-16 11:03:53"

    }, {

    "AcceptStation": "快件已发车",

    "AcceptTime": "2020-02-16 11:50:35"

    }, {

    "AcceptStation": "快件到达 【怀化盈口集散点】",

    "AcceptTime": "2020-02-16 20:20:42"

    }, {

    "AcceptStation": "快件在【怀化盈口集散点】已装车,准备发往 【沅陵县御鑫城营业点】",

    "AcceptTime": "2020-02-17 05:33:23"

    }, {

    "AcceptStation": "快件已发车",

    "AcceptTime": "2020-02-17 05:33:37"

    }, {

    "AcceptStation": "快件到达 【沅陵县御鑫城营业点】",

    "AcceptTime": "2020-02-17 07:55:20"

    }, {

    "AcceptStation": "快件在【沅陵县御鑫城营业点】已装车,准备发往 【怀化市沅陵县二酉苗族乡合作点】",

    "AcceptTime": "2020-02-17 09:31:53"

    }, {

    "AcceptStation": "快件到达 【怀化市沅陵县二酉苗族乡合作点】",

    "AcceptTime": "2020-02-17 09:32:16"

    }, {

    "AcceptStation": "正在派送途中,请您准备签收(派件人:邓小云,电话:13298660182)",

    "AcceptTime": "2020-02-17 09:32:31"

    }, {

    "AcceptStation": "快件交给邓小云,正在派送途中(联系电话:13298660182,顺丰已开启“安全呼叫”保护您的电话隐私,请放心接听!)",

    "AcceptTime": "2020-02-17 09:33:26"

    }, {

    "AcceptStation": "已签收,感谢使用顺丰,期待再次为您服务(主单总件数:1件)",

    "AcceptTime": "2020-02-17 22:41:24"

    }, {

    "AcceptStation": "在官网"运单资料&签收图",可查看签收人信息",

    "AcceptTime": "2020-02-17 22:41:26"

    }],

    "State": "3",

    "EBusinessID": "1264783",

    "Success": true

    }

     
    复制代码

    8.失败返回报文(示例)

    复制代码

    {

    "LogisticCode": "295734066970",

    "ShipperCode": "SF",

    "Traces": [],

    "State": "0",

    "EBusinessID": "1264783",

    "Reason": "业务错误[没有可用套餐]",

    "Success": false

    }

    复制代码

    说明:未实名认证,未订购套餐,套餐可用查询量已经用完 都会返回此报文信息
    去实名认证 / 了解套餐详情

    9.无轨迹返回报文(示例)

    复制代码

    {

    "LogisticCode": "295734066970",

    "ShipperCode": "SF",

    "Traces": [],

    "State": "0",

    "EBusinessID": "1264783",

    "Reason": "暂无轨迹信息",

    "Success": true

    }

    复制代码

     

    10.分步讲解(C#版本)

    10.1,请求数据包结构

    在这里插入图片描述

    10.2,C#调用代码示例

    //电商ID
    string eEBusinessID = "test1617571";
     //电商加密私钥,快递鸟提供,注意保管,不要泄漏
    string appKey= "554343b2-7252-439b-b4eb-1af42c8f2175";
     //请求url
    string reqURL = "http://sandboxapi.kdniao.com:8080/kdniaosandbox/gateway/exterfaceInvoke.json";
    //请求指令 
    string reqType="1002";
    //2-json 
    string dataType = "2"; 
    //字符编码采用UTF-8 
    string charset = "UTF-8"; 
    //JSON字符串string 
    string jsonStr = 
    "{"OrderCode":"","ShipperCode":"JTSD","LogisticCode":"JT0000052600488"}" ;
    //把(jsonStr+APIKey)进行MD5加密
    string md5Str=MD5(jsonStr + apiKey, charset);
    //把md5Str 进行Base64编码
    string base64Str=base64(md5Str,charset);
    //进行URL编码 (utf-8)
    string datasign = HttpUtility.UrlEncode(base64Str, charset); 
    //请求报文参数 
    string postStr = "RequestType=reqType&EBusinessID= eEBusinessID&RequestData=jsonStr 
    &DataSign= datasign&DataType=dataType"; 
    //通讯协议使用Http协议Post请求方式 返回轨迹数据
    string post = SendPost(reqURL, postStr);
    //获取到的post数据就是快递鸟返回的完整报文,接下来自己写一个解析json的方法就能获取到里面的字段信息。

    10.3,C#调用方法

    ///<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));
    }
     /// <summary>
        /// Post方式提交数据,返回网页的源代码
        /// </summary>
        /// <param name="url">发送请求的 URL</param>
        /// <param name="postData">请求报文参数</param>
        /// <returns>远程资源的响应结果</returns>
        private string SendPost(string url, string postData)
        {
            string result = "";
            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.ToString();
            }
            return result;
        }

    11.丰网速运查询接口应用

    12.关于签名

    快递鸟和第三方电子商务公司系统进行对接,有一定的安全机制。采用 IP 认证加签名
    的方式对接,具体方案如下:

    防止数据被篡改 
    在 POST 请求中会传递 5 个必须(R)参数 
    RequestData==数据内容(URL 编码:UTF-8) 
    EBusinessID==用户 ID 
    RequestType=请求指令类型 
    DataSign== 数据内容签名:把(请求内容(未编码)+ApiKey)进行 MD5 加密,然后 Base64 
    编码,最后进行 URL(utf-8)编码 
    DataType==2(返回数据类型为 json) 
    注:
    DataSign 生成后,对方接收到数据后,以同样的算法进行签名(推送接口 RequestType 为 
    101/102 不需要进行 URL 编码),生成摘要,对比两者的摘要是否相同,如果不同,说明传递过程中发生数据篡改。 
    调用接口的身份认证 
    注册成为快递鸟用户后,会生成对应的用户 ID 和 APIKey,用户 ID 相当于用户名, 
    APIKey 相当于密码。

    13.返回码定义

    编码说明
    100 成功
    101 缺少必要参数
    102 校验问题
    103 格式问题

         去申请调用API接口

  • 相关阅读:
    C#实战Microsoft Messaging Queue(MSMQ)
    Spring注解用法
    Last_IO_Errno: 1032
    浅谈TCP/IP网络编程中socket的行为
    Golang网络库中socket阻塞调度源码剖析
    delphi新语法之泛型实现的对象池模板
    Delphi 编码转换 Unicode gbk big5(使用LCMapString设置区域后,再用API转换)
    提高Delphi的编译速度(bpl和bcp)
    解决jqplot与jquery-ui导入必要包时的冲突
    Linux系统下用C语言获取MAC地址
  • 原文地址:https://www.cnblogs.com/51api/p/14661874.html
Copyright © 2020-2023  润新知