Baishi express bill number query interface API

Time:2020-9-19

How to use the interface provided by express bird to query the logistics track of Baishi express.

Before explanation, let’s take a look at the actual display effect after the interface is completed

The following is a screenshot of the product application and the track information obtained by calling the express bird interface:
Baishi express bill number query interface API
In fact, the message information returned by express bird will be more detailed, and the information displayed to customers can be packaged according to product needs.

Now let’s talk about the implementation!

First of all, we have the resources we need,

Test merchant ID:

test1617571

Test API key:

554343b2-7252-439b-b4eb-1af42c8f2175 (this key is only used in test environment)

API test address:

http://sandboxapi.kdniao.com:8080/kdniaosandbox/gateway/exterfaceInvoke.json

I take C ා development as an example to explain
Next, let’s talk about request parameters

Description of request system level parameters:
Baishi express bill number query interface API

remarks:R-required, o-optional, and the parameter in c-message is optional under certain conditions

The system level parameters mentioned here are equivalent to public parameters. These parameters must be passed to each interface when calling.

Interface parameters:
Baishi express bill number query interface API
Interface parameters, also known as business parameters, request business interfaces are different, parameter fields, content is also different, is with the business change, here we implement the instant query interface, request instruction type: 1002, express bird official website requires that express company code and logistics order number must be passed, Baishi Express’s code is htky

To view the codes of other express companies, click this link:

http://www.kdniao.com/documents

As shown in the track screenshot above, the code of Baishi express is htky, and the logistics order number is 552002203935167

The service parameter message combination is as follows:

{‘OrderCode’:”,’ShipperCode’:’HTKY’,’LogisticCode’:’552002203935167′}

Complete message of request (after URL encoding)

RequestData=%0d%0a++++++++++++%7b%27OrderCode%27%3a%27%27%2c%27ShipperCode%27%3a%27HTKY%27%2c%27LogisticCode%27%3a%27552002203935167%27%7d%0d%0a++++++++&EBusinessID=1264783&RequestType=1002&DataSign=ZTFhZTE2MzFhZWNlYjFkZjViZTQ0YjQxNmM2ZGE2ZTI%3d&DataType=2

Uncoded request message:

RequestData=

            {‘OrderCode’:”,’ShipperCode’:’HTKY’,’LogisticCode’:’552002203935167′}

        &EBusinessID=1264783&RequestType=1002&DataSign=ZTFhZTE2MzFhZWNlYjFkZjViZTQ0YjQxNmM2ZGE2ZTI=&DataType=2

Message information returned:
`{

"LogisticCode": "552002203935167",
"ShipperCode": "HTKY",
"Traces": [
    {
        "Acceptstation": "Jinhua City [Dongyang Jiangnan No.5 branch - high quality customer], [Jinchen / 15356958520] has already taken over",
        "AcceptTime": "2020-02-14 17:53:01"
    },
    {
        "Acceptstation": "to Jinhua City [Jinhua Yiwu Shangxi large goods collection point]",
        "AcceptTime": "2020-02-17 18:52:03"
    },
    {
        "Acceptstation": "to Jinhua City [Yiwu transfer center]",
        "AcceptTime": "2020-02-18 18:52:31"
    },
    {
        "Acceptstation": "Jinhua City [Yiwu transfer center], sending to [Changsha transfer center]",
        "AcceptTime": "2020-02-18 18:55:55"
    },
    {
        "Acceptstation": "to Changsha [Changsha transfer center]",
        "AcceptTime": "2020-02-19 19:37:29"
    },
    {
        "Acceptstation": Changsha City [Changsha transfer center] is sending to [Yuanling County] ",
        "AcceptTime": "2020-02-21 01:25:17"
    }
],
"State": "2",
"EBusinessID": "1264783",
"Success": true

}`

C ා key code:
`/// <summary>

///Real time query of logistics track

    /// </summary>

    /// <param name=”url”>http://sandboxapi.kdniao.com:8080/kdniaosandbox/gateway/exterfaceInvoke.json</param>

    /// <param name=”eBusinessID”>test1617571</param>

    /// <param name=”appKey”>554343b2-7252-439b-b4eb-1af42c8f2175</param>

    /// <param name=”requestData”>{‘OrderCode’:”,’ShipperCode’:’ZTO’,’LogisticCode’:’78120038107849′}</param>

    /// <returns></returns>

    public string getOrderTracesByJson(string url,string eBusinessID, string appKey, string requestData)

    {

        Dictionary<string, string> param = new Dictionary<string, string>();

        param.Add(“RequestData”, HttpUtility.UrlEncode(requestData, Encoding.UTF8));

        param.Add(“EBusinessID”, eBusinessID);

        param.Add(“RequestType”, “1002”);

        string dataSign = encrypt(requestData, appKey, “UTF-8”);

        param.Add(“DataSign”, HttpUtility.UrlEncode(dataSign, Encoding.UTF8));

        param.Add(“DataType”, “2”);

        string result = sendPost(url, param);

        return result;

    }

    /// <summary>

///Submit data in post mode and return the source code of web page

    /// </summary>

///< param name = “URL” > the URL to send the request < / param >

///< param name = “param” > requested parameter set < / param >

///< returns > response results of remote resources < / 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);

            }

        }

       // return postData.ToString();

        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>

///Signature of e-commerce sign

    ///</summary>

///< param name = “content” > content < / param >

    ///<param name=”keyValue”>Appkey</param>

///< param name = “charset” > URL encoding < / param >

///< returns > datasign signature < / 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>

///String MD5 encryption

    ///</summary>

///< param name = “STR” > string to encrypt < / param >

///< param name = “charset” > encoding mode < / param >

///< returns > ciphertext < / 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 encoding

    /// </summary>

///< param name = “STR” > content < / param >

///< param name = “charset” > encoding mode < / param >

    /// <returns></returns>

    private string base64(String str, String charset)

    {

        return Convert.ToBase64String(System.Text.Encoding.GetEncoding(charset).GetBytes(str));

    }`

Recommended Today

Deep understanding of HTTP protocol

*Foreword: I’d like to share with you an article about my experience since I developed it, Let’s share a personal understanding of HTTP* -Maojiale😊 What are the methods of HTTP? HTTP 1.0 defines three request methods: get, post and head HTTP1.1 adds five request methods: options, put, delete, trace and connect What are the specific […]