最近淘點點好像做了一個重大調整,一個企業帳号隻能開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