电商退货退款处理服务流程,快递鸟提供最有效的解决方案(内附教程)
电商退货退款处理服务流程 产品设计 技术对接 快递鸟提供高效便捷的解决方案
近几年来,我国电子商务交易规模越来越大,线上订单越来越多,退换货的情况也越来越常见。今天就来讲讲电商退换货的问题。
订单退货,作为订单出库的逆向流程,其实还是蛮复杂的。他可以是单纯退款,或者退货退款,还有换货。这个环节可以说是线上购物过程中的重要一环。一方面商家与消费者之间容易有纠纷,另一方面能体现商家服务水平。为了保障这个环节的服务,电商平台不断推出各种服务,其中就包括退换货上门取件服务。
目前淘宝,京东,拼多多都有这项服务,但这样的大型电商都是平台内部使用,并不对外提供服务。也就是说,其他电商平台需要使用淘宝,京东的退换货上门取件服务,基本不可能,而小中型电商要想自主研发也不现实,成本太高,周期长。
另外在线下回寄过程中,用户和商家基本上全程参与,会给他们退货过程中带来诸多的不便。
用户痛点:工作日没时间、附近没快递点、手动录错单号、运费不透明等;
商家痛点:在后台不能及时获取物流动向,导致退款或换货周期拉长等;
平台痛点:无法实及时监控退货的进展,与用户、商家存在信息差,导致售后投诉比例高,人工介入成本变高;
那些没有巨额资金支撑、没有强大实力部署物流系统的平台该如何解决逆向物流管理问题?
这个时候,很多第三方物流服务公司也注意到了这一现状,推出了类似的服务。全国知名品牌快递鸟率先推出了退换货上门取件服务。不同的是,快递鸟的取件服务是真正为电商们服务的。
为此,小编专门研究了快递鸟的上门取件业务,做了一点个人总结,分享给大家, 强烈建议产品经理和技术人员观看。
什么是退货上门取件?
退换货上门取件服务是为买家在退货时,提供的一种舒心,便捷的物流退货服务,当买家购买的商品在申请换货或者退货时,由物流公司安排快递员上门取走退货商品的一项服务。
寄商品寄出时用户无需填写寄件地址和收件地址,全部由系统自动生成,具体可看下图一键预约退货上门取件流程:

(退货上门取件的服务流程)
这是一个服务流程图,从图中了解到,有买家,电商平台,快递鸟,物流公司,快递员
我们先说说消费者买家。
我们先做一个退货服务前后对比,没有对接退货服务前:
客户申请退货贼麻烦,首先客户要自己电话联系快递员,或者自己送货到快递网点,还要在退货商品上备注小字条,写上订单号与退货说明,商品邮寄出去还要登录网站填写运单号,客户如果填写错误,会影响客户退款资金到账的时效。有过退货经历的,是不是有同感?
在看对接退货服务以后:
客户申请退货只需轻轻一点,一件退货,物流公司就会安排快递员上门取件,客户在家喝杯咖啡的功夫就完成了退货。还有各种增值服务,可以预约快递员的上门时间,在线支付运费,有些有运费险的,基本上就不需要费用,客户也不用备注订单,后续操作都是系统自动完成,最后客户只能为你竖起大拇指,说一句:very good!
接下来我们说产品和技术人员比较关心的内容——电商平台
电商接收客户退货请求,电商客户会按自己的审核规则进行初审,是否达到退货条件,满足就向快递鸟发起退货申请,不满足就通知客户,这部分功能可以按自己内部的业务需求设计,大的主流程不变,还有其他增值服务的功能,可以去找快递鸟的客服了解,这里就不细说了。
服务优势
上门取件服务是一举多得的业务,对买家,电商平台都受益。
那么卖家能够得到什么?
1.让您的买家体验快捷方便的退货服务,提供您的店铺竞争力
2.在线结算运费,支付无忧
3.退货时进行基础验收,保障退货商品符合您的退货要求
4.退货信息全程监控,让你实时掌握退货进度
5.全程保证退货质量,让您不在担心物流问题
买家能够得到什么?
- 退货更简单,想退货就有人来拿,还能约时间
- 上门取件时效保障
- 支付更便捷,在线支付运费、运费价格透明
- 服务有保障,不怕退货商品丢失、损毁,快递员做过验收,风险转移
服务接口
这里小编会分享源代码,把源码复制到你的项目上,就能快速完成上门退货接口对接,更适合刚入门的朋友们。
这里我们以申通快递的上门退货服务为例来讲解,调用快递鸟提供的上门取件API标准接口,成功调用后,申通快递员会上门服务,同时支持申通快递单号的轨迹查询。快递鸟api接口不区分开发语言,支持Java,C#,PHP,Python,ObjectC等开发语言的程序调用。下面具体讲解实现过程:
一、完成前期准备工作
1、去快递鸟官网免费注册一个账号
2、免费获得一个apiKey(接口权限验证需要),
3、完成实名认证流程
4、订购一个免费套餐
二、API接口
1、测试调用地址:
http://sandboxapi.kdniao.com:8080/kdniaosandbox/gateway/exterfaceInvoke.json
2、正式调用地址:https://api.kdniao.com/api/OOrderService
3、请求方式:POST
4、编码格式(utf-8):application/x-www-form-urlencoded;charset=utf-8
5、返回类型:JSON
6、调试页面:用户登录_快递鸟API让物流接口对接更简单
系统请求参数(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-报文中该参数在一定条件下可选
下单请求参数(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 |
|
下单返回参数(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 |
|
下单请求参数(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":"小心轻放"
}
下单请求完整报文(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
下单成功返回报文(Json示例)
{
"EBusinessID":"1237100",
"Success":true,
"Order":{
"OrderCode":"012657018199",
"KDNOrderCode":"KDN012657018199",
"ShipperCode":" STO",
"LogisticCode":"615123456789"
},
"ResultCode":"100",
"Reason":""
}
实际业务会存在,取消操作功能,客户下的订单,由于多方原因需要取消下单,为此快递鸟也提供了取消上门取件的接
取消请求参数(Body)
|
名称 |
类型(字符长度) |
是否必须 |
描述 |
|
ShipperCode |
String(20) |
R |
快递公司编码 详细编码参考免费注册 |
|
OrderCode |
String(30) |
R |
订单编号(自定义,不可重复) |
|
LogisticCode |
String(30) |
O |
快递单号 |
|
Reason |
String(100) |
O |
取消原因 |
口,我们来讲解下
消返回参数(Return)
|
名称 |
类型(字符长度) |
是否必须 |
描述 |
|
EBusinessID |
String(10) |
R |
用户ID |
|
Success |
Bool(10) |
R |
成功与否(true/false) |
|
ResultCode |
String(5) |
R |
返回编号 |
|
Reason |
String(50) |
O |
失败原因 |
如
。
取消请求参数(Json示例)
{
"OrderCode": "012657018199",
"ShipperCode": "SF",
}
取消成功返回报文(Json示例)
{
"EBusinessID": "1237100",
"Success": true,
"ResultCode": "100",
}
分步讲解(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的方法就能获取到里面的字段信息。
- 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;
}
关于签名
快递鸟和第三方电子商务公司系统进行对接,有一定的安全机制。采用 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 相当于密码。
返回码定义
|
编码 |
说明 |
|
100 |
成功 |
|
101 |
缺少必要参数 |
|
102 |
校验问题 |
|
103 |
格式问题 |
以上就是本次分享的内容。
网购能做到一键购买,更要做到一键退货,客户才能留得住。在这个时代,客户是上帝,如果购物的是大爷,那退货的就是佛爷,我们更要把退货流程做到极致,不要担心客户退货,质量问题,该退的留不住,你保住了一单,失去的是一个客户,客户的传播效应,会让你失去整个市场,好买更好退,销量才翻倍,退货服务能考验电商对消费者的服务态度。
记住留住回头客没有捷径,一定要服务到最后一站。做好上门退货服务!
更多推荐




所有评论(0)