Cdiscount平臺對接總結(辛酸史)

       這段時間做了Cdiscount平臺的對接,當前只是做到了抓取賬號訂單。在此做一個總結,備忘。同時也算是一把辛酸史,供後來人嘲笑。

       1.API說明地址:https://dev.cdiscount.com/marketplace

       2.API對接步驟:
         後臺添加API賬號、密碼  --> 獲取Token --> 調用對應接口-->處理接口返回數據。

        關於對接時的詳細步驟和涉及到的接口等詳細信息,API說明中已經包含,不做累述。這裏主要說一下這次對接時我踩過的一些坑。

       1.Cdiscount賬號申請後後臺會同時自動創建一個對應的api賬號。比如後臺登陸賬號是:liu1314,那對應會有一個liu1314-api的api賬號,當我們要對接API時,只需要先在後臺設置該api賬號的密碼,然後就可以通過api賬號和密碼去獲取token。獲取到token後才能使用token調用接口方法。

         這裏要吐槽的是,密碼一定要絕對嚴格按照平臺的密碼規則要求去設置。注意,我說的是絕對嚴格按照!一開始我一直獲取不到token,改了好幾次密碼都不行,來來回回開了不少的case。 最終獲取成功的時候,只是把密碼裏的特殊字符改成了規則裏提到的@符號...... (不知道是必須這麼要求的還是那邊在後臺做了什麼處理,總之來來回回半個月總算才獲取到了token.) 

       token的有效期是48小時。

       2.本以爲獲取到token以後,接下來就一路通暢了,事實證明我還是太年輕了。         

         再次提醒,調用接口方法時,入參請嚴格參考API說明中的實例。如果想多嘗試,也請先嚴格使用API說明中的參數,然後再做減法。

         抓取訂單調的GetOrderList方法。通常抓取訂單時,會分別用創建時間區間和修改時間區間各抓取一次。

         我開始入參只使用了時間參數,但是每次返回的都是所有的訂單,而不是傳入的時間區間內的數據。嘗試了多次依舊不行!撓頭,繼續開case.....  等來平臺的回覆是,他們那邊調用沒有問題,然後附上request和response的文件了事.....

         摸不着頭腦。某一瞬間,回想到獲取token時的遭遇,於是傳入參數完全按照case裏的request,結果果然獲取到了期望的時間段內的訂單數據。-_-    所以原因是什麼呢?API不會告訴你,case回覆也不會告訴你!經過不斷的嘗試,最終我得出的結論是,傳入參數必須包含具體的訂單狀態,時間參數纔會起作用!!我???

         然而,坑到這裏還沒完。當我用創建時間區間抓取訂單的時候,發現漏單了。作爲抓單的程序,漏單這種事情是絕不能存在的!可覈實後發現,漏掉的單創建時間都是在該時間區間裏面,那爲什麼會抓不到呢?這完全不科學啊!凡事總有原因,尤其“搬磚”這件事情。於是繼續各種姿勢不停嘗試......

         最後終於終於找到了正確的路,原來傳創建時間區間的時候,必須得同時傳入修改時間區間的參數!!我?????

         同理可得,按訂單修改時間區間抓取訂單的時候,創建時間區間也必須要賦值,只是,傳個無關緊要的創建時間區間即可。

         目前爲止,自己也已經對接過好幾個國外的電商平臺,但Cdiscount這次依舊實實在在的給我上了一課!

         祝各位後來者同行好運........

 

    附獲取token的代碼(C#):    
        private string UpdateToken()
        {

            string url = ConfigurationManager.AppSettings["GetTokenUrl"];
            HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest;
            request.ContentType = "application/json";
            request.Method = "GET";
            string base64Credentials = GetEncodedCredentials();
            request.Headers.Add("Authorization", "Basic " + base64Credentials);
            HttpWebResponse response = request.GetResponse() as HttpWebResponse;
            string result = string.Empty;
            using (StreamReader reader = new StreamReader(response.GetResponseStream()))
            {
                result = reader.ReadToEnd();
            }

            if (!string.IsNullOrEmpty(result))
            {

                XmlDocument xmlDoc = new XmlDocument();
                xmlDoc.LoadXml(result);
                result = xmlDoc.InnerText;
            }
            else
            {
                Console.WriteLine("Token獲取異常。未獲取到返回值。");
                throw new Exception("Token獲取異常。未獲取到返回值。");
            }

       }
        private string GetEncodedCredentials()
        {
            string m_Username = ConfigurationManager.AppSettings["cUserName"];
            string m_Password = ConfigurationManager.AppSettings["cPassword"];
            string mergedCredentials = string.Format("{0}:{1}", m_Username, m_Password);
            byte[] byteCredentials = UTF8Encoding.UTF8.GetBytes(mergedCredentials);
            return Convert.ToBase64String(byteCredentials);
        }

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章