天天看點

訂餐系統之自動确認淘點點訂單

  最近淘點點好像做了一個重大調整,一個企業帳号隻能開10家店,個人帳号隻能開5家店,這個對于第三方配送的就有些麻煩了,如果您開的店多了,您就得用多個帳号,如果您要把訂單導入自己的平台,統一操作,這個又麻煩了。經過這幾天的開發、測試,終于實作多帳号自動确認,導入訂單到自己的平台了,自動推送給配送員,再讓配送員搶單、配送。之前寫過一篇叫 訂餐系統之擷取淘寶外賣訂單

的文章介紹擷取未确認的淘寶外賣訂單及确認訂單,有興趣的朋友也可以看下,本文算是那篇文章的一個更新吧。支援多帳号,及自動确認功能。

  點選

這裡

進入淘寶開放平台,添加應用,其他操作基本就是按提示傻瓜操作了。有興趣的自己點點哦,這裡就不細說了。

  背景交代完畢,開始進入今天的主題。

第一步,維護開放平台相關資訊

  在開放平台申請應用後會生成兩個資訊App Key和App Secret。我先把這些資訊維護到資料庫中,如下圖,其中的shopid為此帳号下任意一個商家編号即可。session key在下一步中作介紹

  

訂餐系統之自動确認淘點點訂單

第二步,擷取Session key

  Session Key擷取網址為:

http://api.taobao.com/apitools/sessionPage.htm?qq-pf-to=pcqq.c2c

,應用上線後,session key的預設過期時間為一個月(也可以申請一年的),也就是過期了,你要重新到這個位址生成,并更新到第一步中的資料表中。

      操作步驟如下(第二張圖中session對應的内容就是Session Key了):

訂餐系統之自動确認淘點點訂單
訂餐系統之自動确認淘點點訂單

第三步,具體實作

  大部分代碼和

中的相同,主要就是換了個思路,把其中變化的參數都儲存在資料表中,通常循環擷取訂單,并确認訂單。大概代碼如下,寫得不好,希望大家拍磚哈。
訂餐系統之自動确認淘點點訂單
訂餐系統之自動确認淘點點訂單

protected void Page_Load(object sender, EventArgs e)
    {
        if (!Page.IsPostBack)
        {
            TBShoplist = SectionProxyData.GetTaoBaoShopList();
            foreach (var account in SectionProxyData.GettaobaoAPIAcountList())
            {
                string shopid = account.Priority.ToString();
                string appkey = account.classname;
                string appsecret = account.pic;
                string top_session = account.hovepic;

                //參數集合
                SortedList<string, string> parameters = new SortedList<string, string>();
                //2.1 應用級輸入參數
                parameters.Add("is_all", "true");
                parameters.Add("store_id", shopid);
                parameters.Add("max_size", "20");
                //2.2 系統級參數
                parameters.Add("method", "taobao.trade.waimai.get");
                parameters.Add("session", top_session);
                parameters.Add("timestamp", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
                parameters.Add("format", "json");
                parameters.Add("app_key", appkey);
                parameters.Add("v", "2.0");
                parameters.Add("partner_id", "top-apitools");

                //2.3 生成sign,格式: app_secret參數1值1參數2值2,生成md5後轉為大寫
                StringBuilder sb = new StringBuilder();
                sb.Append(appsecret);
                foreach (KeyValuePair<string, string> item in parameters)
                {
                    sb.Append(item.Key + item.Value);
                }

                parameters.Add("sign", WebUtility.GetMd5(sb.ToString()).ToUpper());

                //3.生成url
                string url = "http://gw.api.taobao.com/router/rest?";//線上環境: http://gw.api.taobao.com/router/rest  測試環境: http://gw.sandbox.taobao.com/router/rest
                StringBuilder query = new StringBuilder();
                foreach (KeyValuePair<string, string> item in parameters)
                {
                    query.Append(item.Key + "=" + System.Web.HttpUtility.UrlEncode(item.Value, System.Text.Encoding.UTF8) + "&");
                }
                url += query.ToString().TrimEnd(new char[] { '&' });

                ITopClient client = new DefaultTopClient(url, appkey, appsecret, "json");
                TradeWaimaiGetRequest req = new TradeWaimaiGetRequest();
                req.StoreId = Convert.ToInt32(shopid);
                req.IsAll = true;
                req.MaxSize = 20L;

                TradeWaimaiGetResponse response = client.Execute(req,top_session);
                if (response.Result != null && response.Result.ResultList != null)
                {
                    ttOrderlist = response.Result.ResultList;

                    string cbautoconfirm = WebUtility.FixgetCookie("cbautoconfirm");
                    if (cbautoconfirm == "true" || cbautoconfirm == "checked")
                    {
                        //自動确認;
                        foreach (var model in ttOrderlist)
                        {
                            confirmOrder(model, appkey, appsecret, top_session);
                        }
                    }
                }
            }
           
        }
    }

    /// <summary>
    /// 确認訂單
    /// </summary>
    protected void confirmOrder(TakeoutThirdOrder model, string appkey, string appsecret, string top_session)
    {
        //1.加到系統,
        ...
        int rs = bll.AddTBOrder(ordermodel, foodlist);

        //2.确認訂單
        if (rs > 0)
        {
            //參數集合
            SortedList<string, string> parameters = new SortedList<string, string>();
            //2.1 應用級輸入參數
            parameters.Add("order_id", model.Id.ToString());
            //2.2 系統級參數
            parameters.Add("method", "taobao.trade.waimai.confirm");
            parameters.Add("session", top_session);
            parameters.Add("timestamp", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
            parameters.Add("format", "json");
            parameters.Add("app_key", appkey);
            parameters.Add("v", "2.0");
            parameters.Add("partner_id", "top-apitools");

            //2.3 生成sign,格式: app_secret參數1值1參數2值2,生成md5後轉為大寫
            StringBuilder sb = new StringBuilder();
            sb.Append(appsecret);
            foreach (KeyValuePair<string, string> item in parameters)
            {
                sb.Append(item.Key + item.Value);
            }
            //sb.Append(appsecret);

            parameters.Add("sign", WebUtility.GetMd5(sb.ToString()).ToUpper());

            //3.生成url
            string url = "http://gw.api.taobao.com/router/rest?";
            StringBuilder query = new StringBuilder();
            foreach (KeyValuePair<string, string> item in parameters)
            {
                query.Append(item.Key + "=" + System.Web.HttpUtility.UrlEncode(item.Value, System.Text.Encoding.UTF8) + "&");
            }
            url += query.ToString().TrimEnd(new char[] { '&' });

            ITopClient client = new DefaultTopClient(url, appkey, appsecret, "json");
            TradeWaimaiConfirmRequest req = new TradeWaimaiConfirmRequest();
            req.OrderId = Convert.ToInt64(model.Id);
            TradeWaimaiConfirmResponse response = client.Execute(req, top_session);
        }
    }      

View Code

     界面效果如下圖,預設30秒通路一次,自動确認(淘寶掌櫃确認後,這裡就不能再擷取了)。

訂餐系統之自動确認淘點點訂單

第四步,讓訂單跑起來

  如果在第三步,增加部分代碼,把訂單推送到我們配送員的Android用戶端,讓大家去搶單,然後配送。整個流程就變得相當easy了。

結語

  此文與之前的文章描述的内容相關,并沒有增加多少技術含量,隻是增加了一些思路,如多帳号問題、自動确認等,當然推送用戶端,讓大家搶單,這隻是對接了下我們原有的系統。希望對有需要的同學有點幫助,鄙人技術有限,寫得不好地方也請大家拍磚哈!

       成為一名優秀的程式員!

版權聲明:

作者:J²

訂餐系統之自動确認淘點點訂單
訂餐系統之自動确認淘點點訂單

編輯:

妞妞 妞妞首頁

出處:http://www.cnblogs.com/jijunjian/

本文版權歸作者和部落格園共有,歡迎轉載,大家好,才是真的好!

#top