退货退款产品流程设计 技术开发对接 提供最有效的上门取件解决方案

前言

近几年来,我国电子商务交易规模愈来愈大,线上订单愈来愈多,退换货的状况也愈来愈常见。退换货环节是线上购物过程当中的重要一环,也是体现电商平台与商家服务水平的重要方面。同时,退换货也是电商平台、商家与消费者之间最容易产生纠纷的环节。为了保障这个环节的服务,电商平台不断推出各类服务,其中就包括退换货上门取件服务。
目前淘宝,京东,拼多多都有这项服务,不幸的是这样的大型电商都是平台内部使用,并不对外提供服务,也就是说,其余电商平台须要使用淘宝,京东的退换货上门取件服务,基本不可能,而咱们这些小中型电商要想自主研发也不现实,成本过高,周期长,固然我写这篇文章,也是有充分的信心可以帮助到你们,万幸的是,不少第三方物流服务公司也注意到了这一现状,推出了相似的服务,全国知名品牌快递鸟率先推出了退换货上门取件服务,不一样的是,快递鸟的取件服务是真正为咱们电商服务的,为此,我专门研究了快递鸟的上门取件业务,作了一点我的总结,分享给你们, 建议产品经理和技术人员必看,必定有收获。算法

1. 服务介绍

1.1什么是退货上门取件?
退换货上门取件服务是为买家在退货时,提供的一种舒心,便捷的物流退货服务,当买家购买的商品在申请换货或者退货时,由物流公司安排快递员上门取走退货商品的一项服务。
1.2退货上门取件的服务流程json

退货退款产品流程设计 技术开发对接 提供最有效的上门取件解决方案
上图是一个服务流程图,从图中了解到,有买家,电商平台,快递鸟,物流公司,快递员.咱们先说说消费者买家。api

咱们先作一个退货服务先后对比,
没有对接退货服务前:
客户申请退货贼麻烦,首先客户要本身电话联系快递员,或者本身送货到快递网点,还要在退货商品上备注小字条,写上订单号与退货说明,商品邮寄出去还要登陆网站填写运单号,客户若是填写错误,会影响客户退款资金到帐的时效。有过退货经历的,是否是有同感?安全

在看对接退货服务之后:
客户申请退货只需轻轻一点,一件退货,物流公司就会安排快递员上门取件,客户在家喝杯咖啡的功夫就完成了退货。还有各类增值服务,能够预定快递员的上门时间,在线支付运费,有些有运费险的,基本上就不须要费用,客户也不用备注订单,后续操做都是系统自动完成,最后客户只能为你竖起大拇指,说一句:very good!服务器

接下来讲说电商平台
电商接收客户退货请求,电商客户会按本身的审核规则进行初审,是否达到退货条件,知足就向快递鸟发起退货申请,不知足就通知客户,这部分功能能够按本身内部的业务需求设计,大的主流程不变,还有其余增值服务的功能,能够去找快递鸟的客服了解,这里就不细说了。微信

剩下的几个角色,快递鸟,物流公司,快递员之间的关系,他们有本身的内部业务流程,应该不简单,若是感兴趣能够给我留言,给你们细说。app

2. 服务优点

上门取件服务是一举多得的业务,对买家,电商平台都受益。
卖家可以获得什么?
1, 让您的买家体验快捷方便的退货服务,提供您的店铺竞争力
2, 在线结算运费,支付无忧
3, 退货时进行基础验收,保障退货商品符合您的退货要求
4, 退货信息全程监控,让你实时掌握退货进度
5, 全程保证退货质量,让您不在担忧物流问题ide

买家可以获得什么?
1, 退货更简单,想退货就有人来拿,还能约时间
2, 支付更便捷,在线支付运费
3, 不怕退货商品丢失,损毁,快递员作过验收,风险转移post

3.服务接口

为了照顾刚入门的技术人员,我会分享源代码,把源码复制到你的项目上,就能快速完成上门退货接口对接.更适合刚入门的菜鸟,这里咱们以申通快递的上门退货服务为例来说解,调用快递鸟提供的上门取件API标准接口,成功调用后,申通快递员会上门取件,同时支持申通快递单号的轨迹查询。快递鸟api接口不区分开发语言,支持Java,C#,PHP,Python,ObjectC等开发语言的程序调用。下面具体讲解实现过程.测试

3.1.完成前期准备工做

去快递鸟官网免费注册一个帐号
   免费得到一个apiKey(接口权限验证须要),
   完成实名认证流程
   订购一个免费套餐

3.2.API接口

测试调用地址:http://sandboxapi.kdniao.com:8080/kdniaosandbox/gateway/exterfaceInvoke.json
   正式调用地址:https://api.kdniao.com/api/OOrderService
   请求方式:POST
   编码格式(utf-8):application/x-www-form-urlencoded;charset=utf-8
   返回类型:JSON  
   调试页面:http://kdniao.com/UserCenter/v2/SandBox/TrackQuery.aspx

3.3.系统请求参数(Headers)

3.4.下单请求参数(Body)

3.5.下单返回参数(Return)

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)

3.10.取消返回参数(Return)

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的方法就能获取到里面的字段信息。
  • 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==用户 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| 格式问题

4.总结

愿意掏钱来咱们平台购物的客户,也必定会考虑退货带来的便利,解决客户后顾之忧才是好的服务,我并不赞同有些产品经理的观点,他们认为退款的流程要作的足够复杂,让消费者以为退货好麻烦,索性就不退了,这样的思惟是不可取的,咱们应该在产品质量上下功夫,好的产品,好比 微信,支付宝,这些产品咱们都是手机必备,就算有个按期弹窗提醒你,哥们,把微信卸载吧,你依然是无动于衷的,由于你离不开微信, 我就很讨厌某些软件,安装的时候是一键安装,卸载的时候连卸载按钮都很难被发现,而且还卸不干净,像狗皮膏药同样,附在电脑上,网购也是同样的道理,能作到一键购买,更要作到一键退货,这年头,客户是上帝,若是购物的是大爷,那退货的就是佛爷,退货咱们让佛爷难受,佛爷就会让咱们为惨淡的销量买单。到那个时候就别想着如何给客户发货了,也只能发愁了,哈哈!一愁,愁出了少白头。相反,咱们更要把退货流程作到极致,不要担忧客户退货,质量问题,该退的留不住,你保住了一单,失去的是一个客户,客户的传播效应,会让你失去整个市场,好买更好退,销量才翻倍,退货服务能考验电商对消费者的服务态度。留住回头客没有捷径,必定要服务到最后一站。作好上门退货服务!

5.附言

因为篇幅较长,我会在下一篇文章单独讲解取件状态推送接口,上门取件下单成功之后,快递员收到订单,会反馈接单状态,快递鸟会把状态实时推送到电商平台的服务器

相关文章
相关标签/搜索