sto快遞(sto快遞查物流單號查詢)
前沿拓展:
sto快遞
【-底部咨詢-4】跟蹤記錄0
2010-01-31 22:02 由【廣東中山沙朗】發(fā)往【廣東廣州公司】
2010-02-01 01:56 快件已到達【廣東廣州公司】 掃描員是【李成海】上一站是【】
2010-02-01 03:23 由【廣東廣州公司】發(fā)往【湖北武漢公司】
2010-02-01 20:06 由【湖北武漢航空部】發(fā)往【湖北荊州公司】
2010-02-03 09:44 由【湖北荊州公司】發(fā)往【湖北荊州監(jiān)利公司】
今天我們來聊如何利用快遞鳥提供的接口來查詢【申通快遞】的物流軌跡。
首先我們準備好需要用到的資源,
測試商戶ID:
test1617571
測試API key:
554343b2-7252-439b-b4eb-1af42c8f2175(此Key僅限測試環(huán)境使用)
API測試地址:
http://sandboxapi.kdniao.com:8080/kdniaosandbox/gateway/exterfaceInvoke.json
我以C#開發(fā)為例來講解,
如果還沒有注冊快遞鳥,或者還不知道如何獲取API Key,可以訪問這個騰訊視頻教程:
https://v.qq.com/x/page/z3068yfw0fl.html(注冊登陸獲取快遞鳥API Key)接下來,我們講解一下請求參數(shù)
接口參數(shù),也叫業(yè)務參數(shù),請求的業(yè)務接口不同,參數(shù)的字段,內(nèi)容也不同,是跟著業(yè)務變化的,這里我們實現(xiàn)的是即時查詢接口,請求指令類型:1002,快遞鳥官網(wǎng)要求必須傳遞快遞公司編碼和物流單號 ,圓通快遞的編碼是YTO
如要查看其他快遞公司的編碼,點擊此鏈接:
http://www.kdniao.com/documents
正如我前面的軌跡截圖,申通快遞的編碼是STO,物流單號是777007389359024
業(yè)務參數(shù)報文組合如下:
{'OrderCode':'','ShipperCode':'STO','LogisticCode':'777007389359024'}
請求的完整報文(URL編碼以后):
RequestData=%0d%0a++++++++++++%7b%27OrderCode%27%3a%27%27%2c%27ShipperCode%27%3a%27STO%27%2c%27LogisticCode%27%3a%27777007389359024%27%7d%0d%0a++++++++&EBusinessID=1617571&RequestType=1002&DataSign=N2I4ZGEzYjkwMzhkZWY0YmM5ZGYxOGNkYjU5MmI2ZTU%3d&DataType=2
未編碼的請求報文:
RequestData=
{'OrderCode':'','ShipperCode':'STO','LogisticCode':'777007389359024'}
&EBusinessID=1617571&RequestType=1002&DataSign=N2I4ZGEzYjkwMzhkZWY0YmM5ZGYxOGNkYjU5MmI2ZTU=&DataType=2
返回的報文信息:
{
"LogisticCode": "777007389359024",
"ShipperCode": "STO",
"Traces": [
{
"AcceptStation": "您的寶貝即將由申通快遞(江蘇省市場部三十七部)全程護航,攬件員(宏峰路)。由于**防控和交通管制的影響,您的快件時效可能會受到影響,希望能得到您的理解,詳情可咨詢當?shù)鼐W(wǎng)點",
"AcceptTime": "2020-01-08 19:45:01"
},
{
"AcceptStation": "快件已由【江蘇射陽公司】掃描發(fā)往【江蘇鹽城中轉部】,掃描員【孫霞】。由于**防控和交通管制的影響,您的快件時效可能會受到影響,請您耐心等待,感謝理解",
"AcceptTime": "2020-01-09 15:28:36"
},
{
"AcceptStation": "快件已由【江蘇射陽公司】掃描發(fā)往【江蘇鹽城中轉部】,掃描員【射陽】。由于**防控和交通管制的影響,您的快件時效可能會受到影響,請您耐心等待,感謝理解",
"AcceptTime": "2020-01-09 17:59:53"
},
{
"AcceptStation": "已到達-江蘇鹽城中轉部",
"AcceptTime": "2020-01-09 19:57:22"
},
{
"AcceptStation": "快件已由【江蘇鹽城中轉部】掃描發(fā)往【江蘇江陰航空部】,掃描員【陳建群】。由于**防控和交通管制的影響,您的快件時效可能會受到影響,請您耐心等待,感謝理解",
"AcceptTime": "2020-01-09 20:16:29"
},
{
"AcceptStation": "已到達-江蘇江陰航空部",
"AcceptTime": "2020-01-10 02:28:24"
},
{
"AcceptStation": "快件已由【江蘇江陰航空部】掃描發(fā)往【廣東深圳轉運中心】,掃描員【張華臣】。由于**防控和交通管制的影響,您的快件時效可能會受到影響,請您耐心等待,感謝理解",
"AcceptTime": "2020-01-10 02:30:14"
},
{
"AcceptStation": "已到達-廣東深圳轉運中心",
"AcceptTime": "2020-01-11 00:48:28"
},
{
"AcceptStation": "快件已由【廣東深圳轉運中心】掃描發(fā)往【廣東羅湖龍華橫林分部】,掃描員【深圳進港自動化中心】。由于**防控和交通管制的影響,您的快件時效可能會受到影響,請您耐心等待,感謝理解",
"AcceptTime": "2020-01-11 00:48:31"
},
{
"AcceptStation": "快件已由【廣東深圳轉運中心】掃描發(fā)往【廣東羅湖龍華橫林分部】,掃描員【深圳進港自動化中心】。由于**防控和交通管制的影響,您的快件時效可能會受到影響,請您耐心等待,感謝理解",
"AcceptTime": "2020-01-11 00:49:01"
},
{
"AcceptStation": "已到達-廣東羅湖龍華橫林分部",
"AcceptTime": "2020-01-11 08:06:34"
},
{
"AcceptStation": "已到達-廣東羅湖龍華橫林分部",
"AcceptTime": "2020-01-11 10:33:36"
},
{
"AcceptStation": "**無情,人有情,申通小哥一直在堅守。您的快件即將由(廣東羅湖龍華橫林分部)的派件員(王忠明)送達,為確保廣大客戶寄遞安全,減少人員直接接觸,我們建議您在取件時做好安全防護",
"AcceptTime": "2020-01-11 11:18:36"
},
{
"AcceptStation": "快遞已被【豐巢智能柜】深圳市龍華區(qū)鑫茂花園A區(qū)2棟1單元地下**負1層門口豐巢快遞柜代收,請及時取件。有問題請聯(lián)系13925214311",
"AcceptTime": "2020-01-11 12:55:57"
},
{
"AcceptStation": "已簽收,收件人憑客戶短信取件簽收",
"AcceptTime": "2020-01-11 22:18:09"
}
],
"State": "3",
"EBusinessID": "1617571",
"Success": true
}C#關鍵代碼:
/// <summary>
/// 即時查詢物流軌跡
/// </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 getOrderTrace**yJson(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>
/// Post方式提交數(shù)據(jù),返回網(wǎng)頁的源代碼
/// </summary>
/// <param name="url">發(fā)送請求的 URL</param>
/// <param name="param">請求的參數(shù)**</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);
}
}
// 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>
///電商Sign簽名
///</summary>
///<param name="content">內(nèi)容</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">內(nèi)容</param>
/// <param name="charset">編碼方式</param>
/// <returns></returns>
private string base64(String str, String charset)
{
return Convert.ToBase64String(System.Text.Encoding.GetEncoding(charset).GetBytes(str));
}
拓展知識:
原創(chuàng)文章,作者:九賢互聯(lián)網(wǎng)實用分享網(wǎng)小編,如若轉載,請注明出處:http://www.uuuxu.com/20221001475972.html