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);
        }

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