最近淘點點好像作了一個重大調整,一個企業賬號只能開10家店,我的賬號只能開5家店,這個對於第三方配送的就有些麻煩了,若是您開的店多了,您就得用多個賬號,若是您要把訂單導入本身的平臺,統一操做,這個又麻煩了。通過這幾天的開發、測試,終於實現多賬號自動確認,導入訂單到本身的平臺了,自動推送給配送員,再讓配送員搶單、配送。以前寫過一篇叫訂餐系統之獲取淘寶外賣訂單的文章介紹獲取未確認的淘寶外賣訂單及確認訂單,有興趣的朋友也能夠看下,本文算是那篇文章的一個升級吧。支持多賬號,及自動確認功能。html
點擊這裏進入淘寶開放平臺,添加應用,其餘操做基本就是按提示傻瓜操做了。有興趣的本身點點哦,這裏就不細說了。程序員
背景交代完畢,開始進入今天的主題。數據庫
在開放平臺申請應用後會生成兩個信息App Key和App Secret。我先把這些信息維護到數據庫中,以下圖,其中的shopid爲此賬號下任意一個商家編號便可。session key在下一步中做介紹json
Session Key獲取網址爲:http://api.taobao.com/apitools/sessionPage.htm?qq-pf-to=pcqq.c2c,應用上線後,session key的默認過時時間爲一個月(也能夠申請一年的),也就是過時了,你要從新到這個地址生成,並更新到第一步中的數據表中。api
操做步驟以下(第二張圖中session對應的內容就是Session Key了):session
大部分代碼和訂餐系統之獲取淘寶外賣訂單中的相同,主要就是換了個思路,把其中變化的參數都保存在數據表中,一般循環獲取訂單,並確認訂單。大概代碼以下,寫得很差,但願你們拍磚哈。app
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); } }
界面效果以下圖,默認30秒訪問一次,自動確認(淘寶掌櫃確認後,這裏就不能再獲取了)。ide
若是在第三步,增長部分代碼,把訂單推送到咱們配送員的Android客戶端,讓你們去搶單,而後配送。整個流程就變得至關easy了。測試
此文與以前的文章描述的內容相關,並無增長多少技術含量,只是增長了一些思路,如多賬號問題、自動確認等,固然推送客戶端,讓你們搶單,這只是對接了下咱們原有的系統。但願對有須要的同窗有點幫助,鄙人技術有限,寫得很差地方也請你們拍磚哈!ui
成爲一名優秀的程序員!