.net birds express single stream identification number automatically query interfaces api example demo

1, application scenarios
(1) PC side, the mobile client application or Web applications integrated logistics waybill information query function, just enter a single number to complete the inquiry, without user input courier company.
(2) Electric's website at the time of delivery to the bird query or subscribe to the waybill, can first determine the logistics company by a single identification number, and then subscribe to express the birds.
2, if authorization is required
to apply services Free
3, Interface Description / Description
API ID: Click Application
API Key: Bird Express
Example
(1) a sample request
JSON format
(1) The interface is only made waybill number identification, identification may belong of one or a number of courier companies.
(2) the interface does not return logistics track, users can subscribe to combine real-time query interface and query interface to complete the track queries, subscribe to action.
(3) returns an interface identification or number of courier companies, courier returned data sorted according to the bird big data analysis, ranking higher hit rate.
(4) If the identification fails, return matching results express the bird is empty.
(5) the interface to support message receiving mode HTTP POST, the request method of encoding format (utf-8): "application / x-www-form-urlencoded; charset = utf-8".
(6) Request Level System Parameters:

.net birds express single stream identification number automatically query interfaces api example demo

NOTE: R- required (Required), O- optional (Optional), C- packets are optional under certain conditions (Conditional).
(7) interface address:

Example Request:

show sourceview source
print?
1    {
2       "LogisticCode": "3967950525457"
3    }
(2)返回示例
JSON格式
show source
01    { 
02        "EBusinessID": "1257021", 
03        "Success": true, 
04        "LogisticCode": "3967950525457",
05        "Shippers": [ 
06                { 
07                  "ShipperCode": "YD",
08                  "ShipperName": "韵达快递"
09                } 
10              ]
11    }

Returning to the example:

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net;
using System.Text;
using System.Web;

namespace KdGoldAPI
{
    public class KdApiOrderDistinguish
    {
        //电商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.cc:8081/Ebusiness/EbusinessOrderHandle.aspx";
        //正式环境
        //private string ReqURL = "http://api.kdniao.cc/Ebusiness/EbusinessOrderHandle.aspx";

        /// <summary>
        /// Json方式  单号识别
        /// </summary>
        /// <returns></returns>
        public string orderTracesSubByJson()
        {
            string requestData = "{'LogisticCode': '3967950525457'}";

            Dictionary<string, string> param = new Dictionary<string, string>();
            param.Add("RequestData", HttpUtility.UrlEncode(requestData, Encoding.UTF8));
            param.Add("EBusinessID", EBusinessID);
            param.Add("RequestType", "2002");
            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));
        }
    }
}

Guess you like

Origin blog.51cto.com/14466758/2436859