圍繞逆向物流退換貨問題的解決方案
快遞鳥集成了多家物流快遞公司渠道,發貨用戶在線一鍵下單,快遞小哥APP接單,並上門取件的全流程在線服務,價格透明,服務有保障,過程可追蹤。給電商平台提供完整的退貨寄件物流解決方案,退貨用戶只需在電商平台一鍵退貨呼叫快遞員上門取件即可,解決平台的逆向物流管理問題,比如退貨后的退款核定監控等。為集團企業和直接發貨用戶解決集中的對賬結算以及內部的快遞集中管理問題。快遞鳥上門取件已覆蓋全國300多個主要城市,38400多個區縣,快遞鳥多級地址庫,精准的訂單路由和分發能力,確保發件人和快遞小哥的接單匹配,支持取件時間預約,2小時上門取件讓服務
快遞鳥-物流數據領導品牌,專注於企業級物流API技術研發,旨在快速低成本幫助電商平台、零售商、金融機構、制造商、TMT等建設更安全、更智能的物流管理體系,定制化專業的物流解決方案。快遞鳥具有強大的渠道服務能力,目前集合了全球600家物流公司系統,統一標准接口,涵蓋快遞、物流、快運、同城配等絕大部分國內快遞,包括通達,順豐,京東,郵政等主流快遞物流公司,支持EMS、Fedex、TNT、UPS等國際快遞,提供軌跡數據,電子面單,在線下單等服務,快遞鳥接口的及時准確穩定性獲得了用戶的一致好評,騰訊、12306、跟誰學、建設銀行、美團、唯品會、拼多多、貝店、雲集、快手電商等知名企業都在使用快遞鳥提供的數據服務,快遞鳥每天上千萬次的數據服務能力及上百萬等訂單服務支持能力,為企業提供運營監控管理系統,保障日常運營,幫助企業打通物流環節,提升物流服務能力。
“2小時上門准時取”擊中退換貨痛點
電商技術解密之售后退換貨流程設計
逆向物流退換貨服務解決方案之技術對接API教程
為了照顧剛入門的技術人員,我會分享源代碼,把源碼復制到你的項目上,就能快速完成上門退貨接口對接.更適合剛入門的菜鳥,這里我們以申通快遞的上門退貨服務為例來講解,調用快遞鳥提供的上門取件API標准接口,成功調用后,申通快遞員會上門服務,同時支持申通快遞單號的軌跡查詢。快遞鳥api接口不區分開發語言,支持Java,C#,PHP,Python,ObjectC等開發語言的程序調用。下面具體講解實現過程.
3.1.完成前期准備工作
3.1.1,去快遞鳥官網免費注冊一個賬號
3.1.2,免費獲得一個apiKey(接口權限驗證需要),
3.1.3,完成實名認證流程
3.1.4,訂購一個免費套餐
3.2.API接口
3.2.1,測試調用地址:http://sandboxapi.kdniao.com:8080/kdniaosandbox/gateway/exterfaceInvoke.json
3.2.2,正式調用地址:https://api.kdniao.com/api/OOrderService
3.2.3,請求方式:POST
3.2.4,編碼格式(utf-8):application/x-www-form-urlencoded;charset=utf-8
3.2.5,返回類型:JSON
3.2.6,調試頁面:http://kdniao.com/UserCenter/v2/SandBox/TrackQuery.aspx
3.3.系統請求參數(Headers)
參數名稱 |
類型 |
說明 |
必須要求 |
RequestData |
String |
請求內容需進行URL(utf-8)編碼。請求內容JSON格式,須和DataType一致。 |
R |
EBusinessID |
String |
商戶ID,請在我的服務頁面查看。 |
R |
RequestType |
String |
請求指令類型: 1801(下單接口) 1802(取消接口)
|
R |
DataSign |
String |
數據內容簽名:把(請求內容(未編碼)+AppKey)進行MD5加密,然后Base64編碼,最后 進行URL(utf-8)編碼。詳細過程請查看Demo。 |
R |
DataType |
String |
請求、返回數據類型:只支持JSON格式 |
R |
備注:R-必填(Required),O-可選(Optional),C-報文中該參數在一定條件下可選
3.4.下單請求參數(Body)
參數 |
類型 |
說明 |
必須要求 |
|
WarehouseID |
String |
倉庫標識 |
O |
|
WarehouseAddress |
String |
倉庫地址 |
O |
|
CallBack |
String |
商戶標識 |
O |
|
MemberID |
String |
會員標識 |
O |
|
OrderCode |
String |
訂單編號 |
R |
|
PayType |
Int |
郵費支付方式:1-現付,2-到付,3-月結,4-第三方支付 |
R |
|
MonthCode |
String |
月結編碼 |
C |
|
ExpType |
Int |
快遞類型:1-標准快件 |
R |
|
IsReturnSignBill |
Int |
簽收回單:1-需要,0-不需要,默認為0 |
O |
|
Receiver |
Company |
String |
收件人公司 |
O |
Name |
String |
收件人 |
R |
|
Tel |
String |
電話與手機,必填一個 |
R |
|
Mobile |
String |
|||
PostCode |
String |
收件人郵編 |
O |
|
ProvinceName |
String |
收件省(如廣東省,不要缺少“省”) |
R |
|
CityName |
String |
收件市(如深圳市,不要缺少“市”) |
R |
|
ExpAreaName |
String |
收件區(如福田區,不要缺少“區”或“縣”) |
O |
|
Address |
String |
收件人詳細地址 |
R |
|
Sender |
Company |
String |
發件人公司 |
O |
Name |
String |
發件人 |
R |
|
Tel |
String |
電話與手機,必填一個 |
R |
|
Mobile |
String |
|||
PostCode |
String |
發件人郵編 |
O |
|
ProvinceName |
String |
發件省(如廣東省,不要缺少“省”) |
R |
|
CityName |
String |
發件市(如深圳市,不要缺少“市”) |
R |
|
ExpAreaName |
String |
發件區(如福田區,不要缺少“區”或“縣”) |
O |
|
Address |
String |
發件人詳細地址(實際取件) |
R |
|
SenderShowAddress |
String |
發件人詳細地址 |
O |
|
StartDate |
String |
上門取貨時間段:"yyyy-MM-dd HH:mm:ss"格式化,本文中所有時間格式相同 |
O |
|
EndDate |
String |
O |
||
Weight |
Double |
物品總重量kg |
O |
|
Quantity |
Int |
件數/包裹數 |
O |
|
Volume |
Double |
物品總體積m3 |
O |
|
Remark |
String |
備注 |
O |
|
AddServices |
||||
AddService |
Name |
String |
增值服務名稱 |
O |
Value |
String |
增值服務值 |
O |
|
CustomerID |
String |
客戶標識(選填) |
O |
|
Commoditys |
||||
Commodity |
GoodsName |
String |
商品名稱 |
R |
GoodsCode |
String |
商品編碼 |
O |
|
Goodsquantity |
Int |
商品數量 |
O |
|
GoodsPrice |
Decimal |
商品價格 |
O |
|
GoodsWeight |
Decimal |
商品重量 |
O |
|
GoodsDesc |
String |
商品描述 |
O |
|
GoodsVol |
Double |
商品體積m3 |
O |
|
PackingType |
Int |
包裝類型:包裝類型(快運字段)默認為 0; 0- 紙 1- 纖 2- 木 3- 托膜 4- 木托 99-其他 |
O |
|
DeliveryMethod |
Int |
送貨方式:0-自提,1-送貨上門(不含上樓)2-送貨上樓。(適用於快運類型訂單,物流公司可能會收取費用),默認為0 |
O |
3.5.下單返回參數(Return)
參數名稱 |
類型 |
說明 |
必須要求 |
|
EBusinessID |
String |
用戶ID |
R |
|
Order |
OrderCode |
String |
訂單編號 |
R |
KDNOrderCode |
String |
快遞鳥訂單編號 |
R |
|
ShipperCode |
String |
快遞公司編碼 |
R |
|
LogisticCode |
String |
快遞單號 |
O |
|
Success |
Bool |
成功與否 |
R |
|
ResultCode |
String |
結果編碼 |
R |
|
Reason |
String |
失敗原因 |
O |
|
UniquerRequestNumber |
String |
唯一標識 |
R |
3.6.下單請求參數(Json示例)
{
"OrderCode":"012657018199", "ShipperCode":"STO", "PayType":1, "MonthCode":"1234567890", "ExpType":1, "Sender":{ "Company":"LV", "Name":"Taylor", "Mobile":"15018442396", "ProvinceName":"上海", "CityName":"上海市", "ExpAreaName":"青浦區", "Address":"明珠路" }, "Receiver":{ "Company":"GCCUI", "Name":"Yann", "Mobile":"15018442396", "ProvinceName":"北京", "CityName":"北京市", "ExpAreaName":"朝陽區", "Address":"三里屯街道" }, "Commodity":[ { "GoodsName":"鞋子", "Goodsquantity":1, "GoodsWeight":1 } ], "Weight":1, "Quantity":1, "Volume":0, "Remark":"小心輕放" }
3.7.下單請求完整報文(URL編碼)
RequestData=%7b%0d%0a++++%22OrderCode%22%3a%22012657018199%22%2c%0d%0a++++%22ShipperCode%22%3a%22STO%22%2c%0d%0a++++%22PayType%22%3a1%2c%0d%0a++++%22MonthCode%22%3a%221234567890%22%2c%0d%0a++++%22ExpType%22%3a1%2c%0d%0a++++%22Sender%22%3a%7b%0d%0a++++++++%22Company%22%3a%22LV%22%2c%0d%0a++++++++%22Name%22%3a%22Taylor%22%2c%0d%0a++++++++%22Mobile%22%3a%2215018442396%22%2c%0d%0a++++++++%22ProvinceName%22%3a%22%e4%b8%8a%e6%b5%b7%22%2c%0d%0a++++++++%22CityName%22%3a%22%e4%b8%8a%e6%b5%b7%e5%b8%82%22%2c%0d%0a++++++++%22ExpAreaName%22%3a%22%e9%9d%92%e6%b5%a6%e5%8c%ba%22%2c%0d%0a++++++++%22Address%22%3a%22%e6%98%8e%e7%8f%a0%e8%b7%af%22%0d%0a++++%7d%2c%0d%0a++++%22Receiver%22%3a%7b%0d%0a++++++++%22Company%22%3a%22GCCUI%22%2c%0d%0a++++++++%22Name%22%3a%22Yann%22%2c%0d%0a++++++++%22Mobile%22%3a%2215018442396%22%2c%0d%0a++++++++%22ProvinceName%22%3a%22%e5%8c%97%e4%ba%ac%22%2c%0d%0a++++++++%22CityName%22%3a%22%e5%8c%97%e4%ba%ac%e5%b8%82%22%2c%0d%0a++++++++%22ExpAreaName%22%3a%22%e6%9c%9d%e9%98%b3%e5%8c%ba%22%2c%0d%0a++++++++%22Address%22%3a%22%e4%b8%89%e9%87%8c%e5%b1%af%e8%a1%97%e9%81%93%22%0d%0a++++%7d%2c%0d%0a++++%22Commodity%22%3a%5b%0d%0a++++++++%7b%0d%0a++++++++++++%22GoodsName%22%3a%22%e9%9e%8b%e5%ad%90%22%2c%0d%0a++++++++++++%22Goodsquantity%22%3a1%2c%0d%0a++++++++++++%22GoodsWeight%22%3a1%0d%0a++++++++%7d%0d%0a++++%5d%2c%0d%0a++++%22Weight%22%3a1%2c%0d%0a++++%22Quantity%22%3a1%2c%0d%0a++++%22Volume%22%3a0%2c%0d%0a++++%22Remark%22%3a%22%e5%b0%8f%e5%bf%83%e8%bd%bb%e6%94%be%22%0d%0a%7d%0d%0a&EBusinessID=1365742&RequestType=1801&DataSign=ZTcxNTBkNjNhNjkxYjkzMGViNDcxZTRjNzc3NzlkNjI%3d&DataType=2
3.8.下單成功返回報文(Json示例)
{
"EBusinessID":"1237100", "Success":true, "Order":{ "OrderCode":"012657018199", "KDNOrderCode":"KDN012657018199", "ShipperCode":" STO", "LogisticCode":"615123456789" }, "ResultCode":"100", "Reason":"" }
實際業務會存在,取消操作功能,客戶下的訂單,由於多方原因需要取消下單,為此快遞鳥也提供了取消上門取件的接口,我們來講解一下如何調用。
3.9.取消請求參數(Body)
名稱 |
類型(字符長度) |
是否必須 |
描述 |
ShipperCode |
String(20) |
R |
快遞公司編碼 詳細編碼參考《快遞鳥接口支持快遞公司編碼.xlsx》 |
OrderCode |
String(30) |
R |
訂單編號(自定義,不可重復) |
LogisticCode |
String(30) |
O |
快遞單號 |
Reason |
String(100) |
O |
取消原因 |
3.10.消返回參數(Return)
名稱 |
類型(字符長度) |
是否必須 |
描述 |
EBusinessID |
String(10) |
R |
用戶ID |
Success |
Bool(10) |
R |
成功與否(true/false) |
ResultCode |
String(5) |
R |
返回編號 |
Reason |
String(50) |
O |
失敗原因 |
3.11取消請求參數(Json示例)
{
"OrderCode": "012657018199", "ShipperCode": "SF", }
3.12取消成功返回報文(Json示例)
{
"EBusinessID": "1237100", "Success": true, "ResultCode": "100", }
3.13.分步講解(C#版本)
- 請求數據包結構
- 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="1801"; //2-json string dataType = "2"; //字符編碼采用UTF-8 string charset = "UTF-8"; //JSON字符串 string string jsonStr = "{ \"OrderCode\":\"012657018199\", \"ShipperCode\":\"STO\", \"PayType\":1, \"MonthCode\":\"1234567890\", \"ExpType\":1, \"Sender\":{ \"Company\":\"LV\", \"Name\":\"Taylor\", \"Mobile\":\"15018442396\", \"ProvinceName\":\"上海\", \"CityName\":\"上海市\", \"ExpAreaName\":\"青浦區\", \"Address\":\"明珠路\" }, \"Receiver\":{ \"Company\":\"GCCUI\", \"Name\":\"Yann\", \"Mobile\":\"15018442396\", \"ProvinceName\":\"北京\", \"CityName\":\"北京市\", \"ExpAreaName\":\"朝陽區\", \"Address\":\"三里屯街道\" }, \"Commodity\":[ { \"GoodsName\":\"鞋子\", \"Goodsquantity\":1, \"GoodsWeight\":1 } ], \"Weight\":1, \"Quantity\":1, \"Volume\":0, \"Remark\":\"小心輕放\" }" ; //把(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的方法就能獲取到里面的字段信息。 ———————————————— 版權聲明:本文為CSDN博主「老楊占線」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。 原文鏈接:https://blog.csdn.net/yanghanwen/article/details/104880185
- 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; }
3.14.關於簽名
快遞鳥和第三方電子商務公司系統進行對接,有一定的安全機制。采用 IP 認證加簽名
的方式對接,具體方案如下:
防止數據被篡改在 POST 請求中會傳遞 5 個必須(R)參數RequestData==數據內容(URL 編碼:UTF-8)EBusinessID==用戶 IDRequestType=請求指令類型DataSign== 數據內容簽名:把(請求內容(未編碼)+ApiKey)進行 MD5 加密,然后 Base64編碼,最后進行 URL(utf-8)編碼DataType==2(返回數據類型為 json)注:DataSign 生成后,對方接收到數據后,以同樣的算法進行簽名(推送接口 RequestType 為 101/102 不需要進行 URL 編碼),生成摘要,對比兩者的摘要是否相同,如果不同,說明傳遞過程中發生數據篡改。調用接口的身份認證注冊成為快遞鳥用戶后,會生成對應的用戶 ID 和 APIKey,用戶 ID 相當於用戶名,APIKey 相當於密碼。
3.15.返回碼定義
編碼 |
說明 |
100 |
成功 |
101 |
缺少必要參數 |
102 |
校驗問題 |
103 |
格式問題 |