售后退换货快递鸟提供最新解决思路
围绕逆向物流退换货问题的解决方案
快递鸟集成了多家物流快递公司渠道,发货用户在线一键下单,快递小哥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)
参数名称类型说明必须要求
RequestDataString请求内容需进行URL(utf-8)编码。请求内容JSON格式,须和DataType一致。R
EBusinessIDString商户ID,请在我的服务页面查看。R
RequestTypeString请求指令类型:
1801(下单接口)
1802(取消接口)
R
DataSignString数据内容签名:把(请求内容(未编码)+AppKey)进行MD5加密,然后Base64编码,最后 进行URL(utf-8)编码。详细过程请查看Demo。R
DataTypeString请求、返回数据类型:只支持JSON格式R
备注:R-必填(Required),O-可选(Optional),C-报文中该参数在一定条件下可选
3.4.下单请求参数(Body)
参数类型说明必须要求
WarehouseIDString仓库标识O
WarehouseAddressString仓库地址O
CallBackString商户标识O
MemberIDString会员标识O
OrderCodeString订单编号R
PayTypeInt邮费支付方式:1-现付,2-到付,3-月结,4-第三方支付R
MonthCodeString月结编码C
ExpTypeInt快递类型:1-标准快件R
IsReturnSignBillInt签收回单:1-需要,0-不需要,默认为0O
ReceiverCompanyString收件人公司O
NameString收件人R
TelString电话与手机,必填一个R
MobileString
PostCodeString收件人邮编O
ProvinceNameString收件省(如广东省,不要缺少“省”)R
CityNameString收件市(如深圳市,不要缺少“市”)R
ExpAreaNameString收件区(如福田区,不要缺少“区”或“县”)O
AddressString收件人详细地址R
SenderCompanyString发件人公司O
NameString发件人R
TelString电话与手机,必填一个R
MobileString
PostCodeString发件人邮编O
ProvinceNameString发件省(如广东省,不要缺少“省”)R
CityNameString发件市(如深圳市,不要缺少“市”)R
ExpAreaNameString发件区(如福田区,不要缺少“区”或“县”)O
AddressString发件人详细地址(实际取件)R
SenderShowAddressString发件人详细地址O
StartDateString门到门取货时间段:"yyyy-MM-dd HH:mm:ss"格式化,本文中所有时间格式相同O
EndDateStringO
WeightDouble物品总重量kgO
QuantityInt件数/包裹数O
VolumeDouble物品总体积m3O
RemarkString备注O
AddServices
AddServiceNameString增值服务名称O
ValueString增值服务值O
CustomerIDString客户标识(选填)O
Commoditys
CommodityGoodsNameString商品名称R
GoodsCodeString商品编码O
GoodsquantityInt商品数量O
GoodsPriceDecimal商品价格O
GoodsWeightDecimal商品重量O
GoodsDescString商品描述O
GoodsVolDouble商品体积m3O
PackingTypeInt包装类型:包装类型(快运字段)默认为 0; 0- 纸 1- 纤 2- 木 3- 托膜 4- 木托 99-其他O
DeliveryMethodInt送货方式:0-自提,1-送货门到门(不含上楼)2-送货上楼。(适用于快运类型订单,物流公司可能会收取费用),默认为0O
3.5.下单返回参数(Return)
参数名称类型说明必须要求
EBusinessIDString用户IDR
OrderOrderCodeString订单编号R
KDNOrderCodeString快递鸟订单编号R
ShipperCodeString快递公司编码R
LogisticCodeString快递单号O
SuccessBool成功与否R
ResultCodeString结果编码R
ReasonString失败原因O
UniquerRequestNumberString唯一标识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)
名称类型(字符长度)是否必须描述
ShipperCodeString(20)R快递公司编码
详细编码参考《快递鸟接口支持快递公司编码.xlsx》
OrderCodeString(30)R订单编号(自定义,不可重复)
LogisticCodeString(30)O快递单号
ReasonString(100)O取消原因
3.10.消返回参数(Return)
名称类型(字符长度)是否必须描述
EBusinessIDString(10)R用户ID
SuccessBool(10)R成功与否(true/false)
ResultCodeString(5)R返回编号
ReasonString(50)O失败原因
3.11取消请求参数(Json示例)
{ "OrderCode": "012657018199", "ShipperCode": "SF",
}
3.12取消成功返回报文(Json示例)
{ "EBusinessID": "1237100", "Success": true, "ResultCode": "100",
}
3.13.分步讲解(C#版本)
请求数据包结构
C#调用代码示例
//电商IDstring 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#调用方法
///
/// 字符串MD5加密 /// ///要加密的字符串 ///编码方式 ///密文 private string MD5(string str, stringcharset) { byte[] buffer =System.Text.Encoding.GetEncoding(charset).GetBytes(str); try{ System.Security.Cryptography.MD5CryptoServiceProvider check; check = newSystem.Security.Cryptography.MD5CryptoServiceProvider(); byte[] somme =check.ComputeHash(buffer); string ret = ""; foreach (byte a insomme) { if (a < 16) ret += "0" + a.ToString("X"); elseret += a.ToString("X"); } returnret.ToLower(); } catch{ throw; } } ///
/// base64编码 /// /// 内容 /// 编码方式 /// private stringbase64(String str, String charset) { returnConvert.ToBase64String(System.Text.Encoding.GetEncoding(charset).GetBytes(str));} ///
/// Post方式提交数据,返回网页的源代码 /// /// 发送请求的 URL /// 请求报文参数 /// 远程资源的响应结果 private string SendPost(string url, stringpostData) { 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==用户 ID
RequestType=请求指令类型
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格式问题
- 点赞
- 收藏
- 关注作者
评论(0)