退貨退款產品流程設計 技術開發對接 提供最有效的上門取件解決方案

前言

近幾年來,我國電子商務交易規模愈來愈大,線上訂單愈來愈多,退換貨的狀況也愈來愈常見。退換貨環節是線上購物過程當中的重要一環,也是體現電商平臺與商家服務水平的重要方面。同時,退換貨也是電商平臺、商家與消費者之間最容易產生糾紛的環節。爲了保障這個環節的服務,電商平臺不斷推出各類服務,其中就包括退換貨上門取件服務。
目前淘寶,京東,拼多多都有這項服務,不幸的是這樣的大型電商都是平臺內部使用,並不對外提供服務,也就是說,其餘電商平臺須要使用淘寶,京東的退換貨上門取件服務,基本不可能,而咱們這些小中型電商要想自主研發也不現實,成本過高,週期長,固然我寫這篇文章,也是有充分的信心可以幫助到你們,萬幸的是,不少第三方物流服務公司也注意到了這一現狀,推出了相似的服務,全國知名品牌快遞鳥率先推出了退換貨上門取件服務,不一樣的是,快遞鳥的取件服務是真正爲咱們電商服務的,爲此,我專門研究了快遞鳥的上門取件業務,作了一點我的總結,分享給你們, 建議產品經理和技術人員必看,必定有收穫。算法

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.附言

因爲篇幅較長,我會在下一篇文章單獨講解取件狀態推送接口,上門取件下單成功之後,快遞員收到訂單,會反饋接單狀態,快遞鳥會把狀態實時推送到電商平臺的服務器

相關文章
相關標籤/搜索