订餐系统之获取淘宝外卖订单

当时的情况是这样的:我们一个客户用了我们的订餐系统,也在淘宝外卖上开了店,但是订餐系统中的订单都要通过调度系统,根据配送员的位置,把订单发送给合适的配送员,所以要把淘宝外卖的订单加到订餐系统中(据说淘宝外卖也是因为味捷外卖才开发这个接口的)。

  淘宝外卖提供的接口我知道的有三个,1.获取未确认的订单;2.确认订单;3.拒绝订单。所以订餐系统要做的就是从淘宝外卖获取未确认的订单、确认订单并加入订餐系统。

  开放平台地址:

  http://open.taobao.com/doc/api_cat_detail.htm?scope_id=317&category_id=102

  关于授权:

  http://open.taobao.com/doc/category_list.htm?id=199

  也上一张我们调度系统的图吧,这样大家可能更直观些,主要就是根据商家的位置,用户的位置,及配送员手上的订单量等情况来分配订单,不过目前都是调度人员人式调度的。

   

  

  下面简单的说明下接口调用方法,及示例代码。【注:之前他的接口文档中有一个bug,咨询了他们技术支持才处理好,具体位置不太记得了,也不知道他们修改了没。】

获取访问权限

  这部分代码比较简单,就是到指定地址获取 top_session,代码如下:

  

string appkey = WebUtility.GetConfigKey("taobao_appkey");
 string url = "http://container.open.taobao.com/container?appkey=" + appkey + "&encode=utf-8";
Response.Redirect(url);
 string appkey = WebUtility.GetConfigKey("taobao_appkey");
 string url = "http://container.open.taobao.com/container?appkey=" + appkey + "&encode=utf-8";
Response.Redirect(url);

获取未确认的订单

  这一步要用到上一步中获取的 top_session,基本也就是构造链接,然后用官方提供的 TopSdl.dll,转成IList<TakeoutThirdOrder>,这样就直接Repeater 绑定了,都是程序员,代码一看就明白了。程序中有一个 shopid,这是商户号,开店时会提供。

string top_session = Request["top_session"];
if (top_session == null || top_session == "")
{
AlertScript.RegScript(this.Page, this.UpdatePanel1, "tipsWindown(‘提示信息‘,‘text:未授权,不能获取订单,请先授权!‘,‘250‘,‘150‘,‘true‘,‘1000‘,‘true‘,‘text‘);init();");
return;
}
string shopid = WebUtility.FixgetCookie("taobao_shopid");
if (shopid == null || shopid == "")
{
Response.Redirect("getsectionkey.aspx");
}

string appkey = WebUtility.GetConfigKey("taobao_appkey");
string appsecret = WebUtility.GetConfigKey("taobao_appsecret");

//参数集合
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);
}
//sb.Append(appsecret);

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);
if (response.Result != null && response.Result.ResultList != null)
{
ttOrderlist = response.Result.ResultList;
}
BindData();

string top_session = Request["top_session"];
            if (top_session == null || top_session == "")
            {
                AlertScript.RegScript(this.Page, this.UpdatePanel1, "tipsWindown(‘提示信息‘,‘text:未授权,不能获取订单,请先授权!‘,‘250‘,‘150‘,‘true‘,‘1000‘,‘true‘,‘text‘);init();");
                return;
            }
            string shopid = WebUtility.FixgetCookie("taobao_shopid");
            if (shopid == null || shopid == "")
            {
                Response.Redirect("getsectionkey.aspx");
            }

            string appkey = WebUtility.GetConfigKey("taobao_appkey");
            string appsecret = WebUtility.GetConfigKey("taobao_appsecret");

            //参数集合
            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);
            }
            //sb.Append(appsecret);

            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);
            if (response.Result != null && response.Result.ResultList != null)
            {
                ttOrderlist = response.Result.ResultList;
            }
            BindData();

确认订单

 这个也其他是参考官方的文档,没有特别的地方。上代码:

protected void rtpOrderlist_ItemCommand(object source, RepeaterCommandEventArgs e)
{
string type = e.CommandName;
string oid = e.CommandArgument.ToString();
switch (type)
{
case "pass":
//确认后,加到系统(这部分订单要再加一个步定位(用户,商家)修改这个这个字段:latlng)
//先判断此订单是否已经加到系统
string sql = " orderid=‘" + oid + "‘ ";
if (bll.GetCount(sql) > 0)
{
AlertScript.RegScript(this.Page, this.UpdatePanel1, "tipsWindown(‘提示信息‘,‘text:此订单已经加入系统,请不要重复操作!‘,‘250‘,‘150‘,‘true‘,‘2000‘,‘true‘,‘text‘);init();");
return;
}
TakeoutThirdOrder model = ttOrderlist.Where(p => p.Id.ToString() == oid).ToList<TakeoutThirdOrder>()[0];
//1.加到系统,
ETogoOrderInfo ordermodel = new ETogoOrderInfo();
IList<FoodInOrderInfo> foodlist = new List<FoodInOrderInfo>();
decimal allfoodmoney = 0;
foreach (OrderGoods item in model.GoodsList)
{
FoodInOrderInfo fmodel = new FoodInOrderInfo();
fmodel.FoodID = 0;
fmodel.FoodName = item.Name;
fmodel.FoodPrice = Convert.ToDecimal(item.RealPrice);
fmodel.Currentprice = fmodel.FoodPrice;
fmodel.package = 0;
fmodel.Num = Convert.ToInt32(item.Count);
allfoodmoney += fmodel.FoodPrice * fmodel.Num;

foodlist.Add(fmodel);
}

ordermodel.OrderID = model.Id.ToString();
ordermodel.UserName = model.UserAddress.Name;
ordermodel.Tel = model.UserAddress.Mobile;
ordermodel.Address = model.UserAddress.Address;
ordermodel.tabaoshopid = Convert.ToInt64(model.StoreId);
ordermodel.orderTime = Convert.ToDateTime(model.CreateTime);
ordermodel.TotalPrice = allfoodmoney;
ordermodel.Remark = model.Note;
ordermodel.sendmoney = Convert.ToInt32(Convert.ToDecimal(model.DeliveryPay));
ordermodel.Inve2 = "";
ordermodel.OrderTotal = allfoodmoney;
ordermodel.PayMode = 1;
ordermodel.paytime = Convert.ToDateTime(model.CreateTime);
ordermodel.paymoney = Convert.ToDecimal(model.TotalPay);
ordermodel.SentTime = model.StartDeliverytime;
ordermodel.shopaddress = model.Address;
ordermodel.TogoName = model.StoreName;

int rs = bll.AddTBOrder(ordermodel, foodlist);

//2.修改状态

if (rs > 0)
{
string shopid = WebUtility.FixgetCookie("taobao_shopid");
if (shopid == null || shopid == "")
{
Response.Redirect("getsectionkey.aspx");
}

string appkey = WebUtility.GetConfigKey("taobao_appkey");
string appsecret = WebUtility.GetConfigKey("taobao_appsecret");
string top_session = Request["top_session"];

//参数集合
SortedList<string, string> parameters = new SortedList<string, string>();
//2.1 应用级输入参数
parameters.Add("order_id", oid);
//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(oid);
TradeWaimaiConfirmResponse response = client.Execute(req, top_session);
ttOrderlist.Remove(model);

AlertScript.RegScript(this.Page, this.UpdatePanel1, "tipsWindown(‘提示信息‘,‘text:操作成功!‘,‘250‘,‘150‘,‘true‘,‘1000‘,‘true‘,‘text‘);init();");
BindData();
}
else
{
AlertScript.RegScript(this.Page, this.UpdatePanel1, "tipsWindown(‘提示信息‘,‘text:操作失败!‘,‘250‘,‘150‘,‘true‘,‘1000‘,‘true‘,‘text‘);init();");
}
break;
case "refuse":
if (bll.DelETogoOrder(Convert.ToInt32(e.CommandArgument)) > 0)//只是隐藏了,并没删除
{
AlertScript.RegScript(this.Page, this.UpdatePanel1, "tipsWindown(‘提示信息‘,‘text:删除成功!‘,‘250‘,‘150‘,‘true‘,‘1000‘,‘true‘,‘text‘);init();");
BindData();
}
else
{
AlertScript.RegScript(this.Page, this.UpdatePanel1, "tipsWindown(‘提示信息‘,‘text:删除失败!‘,‘250‘,‘150‘,‘true‘,‘1000‘,‘true‘,‘text‘);init();");
}
break;
}

转:

http://www.cnblogs.com/jijunjian/p/3405111.html

protected void rtpOrderlist_ItemCommand(object source, RepeaterCommandEventArgs e)
    {
        string type = e.CommandName;
        string oid = e.CommandArgument.ToString();
        switch (type)
        {
            case "pass":
                //确认后,加到系统(这部分订单要再加一个步定位(用户,商家)修改这个这个字段:latlng)
                //先判断此订单是否已经加到系统
                string sql = " orderid=‘" + oid + "‘ ";
                if (bll.GetCount(sql) > 0)
                {
                    AlertScript.RegScript(this.Page, this.UpdatePanel1, "tipsWindown(‘提示信息‘,‘text:此订单已经加入系统,请不要重复操作!‘,‘250‘,‘150‘,‘true‘,‘2000‘,‘true‘,‘text‘);init();");
                    return;
                }
                TakeoutThirdOrder model = ttOrderlist.Where(p => p.Id.ToString() == oid).ToList<TakeoutThirdOrder>()[0];
                //1.加到系统,
                ETogoOrderInfo ordermodel = new ETogoOrderInfo();
                IList<FoodInOrderInfo> foodlist = new List<FoodInOrderInfo>();
                decimal allfoodmoney = 0;
                foreach (OrderGoods item in model.GoodsList)
                {
                    FoodInOrderInfo fmodel = new FoodInOrderInfo();
                    fmodel.FoodID = 0;
                    fmodel.FoodName = item.Name;
                    fmodel.FoodPrice = Convert.ToDecimal(item.RealPrice);
                    fmodel.Currentprice = fmodel.FoodPrice;
                    fmodel.package = 0;
                    fmodel.Num = Convert.ToInt32(item.Count);
                    allfoodmoney += fmodel.FoodPrice * fmodel.Num;

                    foodlist.Add(fmodel);
                }

                ordermodel.OrderID = model.Id.ToString();
                ordermodel.UserName = model.UserAddress.Name;
                ordermodel.Tel = model.UserAddress.Mobile;
                ordermodel.Address = model.UserAddress.Address;
                ordermodel.tabaoshopid = Convert.ToInt64(model.StoreId);
                ordermodel.orderTime = Convert.ToDateTime(model.CreateTime);
                ordermodel.TotalPrice = allfoodmoney;
                ordermodel.Remark = model.Note;
                ordermodel.sendmoney = Convert.ToInt32(Convert.ToDecimal(model.DeliveryPay));
                ordermodel.Inve2 = "";
                ordermodel.OrderTotal = allfoodmoney;
                ordermodel.PayMode = 1;
                ordermodel.paytime = Convert.ToDateTime(model.CreateTime);
                ordermodel.paymoney = Convert.ToDecimal(model.TotalPay);
                ordermodel.SentTime = model.StartDeliverytime;
                ordermodel.shopaddress = model.Address;
                ordermodel.TogoName = model.StoreName;

                int rs = bll.AddTBOrder(ordermodel, foodlist);

                //2.修改状态

                if (rs > 0)
                {
                    string shopid = WebUtility.FixgetCookie("taobao_shopid");
                    if (shopid == null || shopid == "")
                    {
                        Response.Redirect("getsectionkey.aspx");
                    }

                    string appkey = WebUtility.GetConfigKey("taobao_appkey");
                    string appsecret = WebUtility.GetConfigKey("taobao_appsecret");
                    string top_session = Request["top_session"];

                    //参数集合
                    SortedList<string, string> parameters = new SortedList<string, string>();
                    //2.1 应用级输入参数
                    parameters.Add("order_id", oid);
                    //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(oid);
                    TradeWaimaiConfirmResponse response = client.Execute(req, top_session);
                    ttOrderlist.Remove(model);

                    AlertScript.RegScript(this.Page, this.UpdatePanel1, "tipsWindown(‘提示信息‘,‘text:操作成功!‘,‘250‘,‘150‘,‘true‘,‘1000‘,‘true‘,‘text‘);init();");
                    BindData();
                }
                else
                {
                    AlertScript.RegScript(this.Page, this.UpdatePanel1, "tipsWindown(‘提示信息‘,‘text:操作失败!‘,‘250‘,‘150‘,‘true‘,‘1000‘,‘true‘,‘text‘);init();");
                }
                break;
            case "refuse":
                if (bll.DelETogoOrder(Convert.ToInt32(e.CommandArgument)) > 0)//只是隐藏了,并没删除
                {
                    AlertScript.RegScript(this.Page, this.UpdatePanel1, "tipsWindown(‘提示信息‘,‘text:删除成功!‘,‘250‘,‘150‘,‘true‘,‘1000‘,‘true‘,‘text‘);init();");
                    BindData();
                }
                else
                {
                    AlertScript.RegScript(this.Page, this.UpdatePanel1, "tipsWindown(‘提示信息‘,‘text:删除失败!‘,‘250‘,‘150‘,‘true‘,‘1000‘,‘true‘,‘text‘);init();");
                }
                break;
        }

时间: 2024-12-28 00:07:27

订餐系统之获取淘宝外卖订单的相关文章

获取淘宝订单的解决方案——转

项目需求: 需求很简单,就是想获取淘宝的订单: 获取淘宝订单的几种方式: 聚石塔: 首先是该商家必须已经入驻了聚石塔,因为聚石塔可以共享改商家的淘宝.天猫.阿里云.支付宝等信息.所以你可以通过该商家的聚石塔账号来调取订单信息. 实现难度:★★ 使用率:★★ 因为只要有商家的聚石塔账号,就可以让商家给你提供API接口,去调用该商家的淘宝,天猫订单信息,所以实现难度不大,但是使用率很低.因为入驻聚石塔的商家基本上都是大商家,而且入驻聚石塔的条件也比较苛刻. 物流宝: taobao.logistics

『Reprint』 复杂表单应用解耦,淘宝机票订单实践

背景 在web应用中,复杂表单这类web应用富交互元素多,业务逻辑复杂,犬牙交错,且需求变化频繁.及容易成为晦涩和幽暗之地,也经常是各种代码坏味道的来源.针对这种典型的复杂应用,本文以淘宝机票订单为例提出一种架构模式梳理和消化表单带来的复杂性. 模块和组件划分 解决复杂表单的的第一步,划分模块. 概念上,为了复用和解耦方便,应将模块按照功能的内聚程度进行划分.强相关,频繁沟通和交互的功能应该归为一个模块.模块间尽量不存在依赖关系.也就是常说的"高内聚,低耦合".如下图所示,淘宝机票订单

通过淘宝接口获取淘宝全部商品目录实例

最近项目需要,要获取淘宝商品全部类目结构,有两种方法,1. 可以通过爬虫技术实现, 2. 通过淘宝开放接口实现. 这里选用第2种方法,以下是实现过程: 1. 首先要申请成为淘宝开发者 http://open.taobao.com/index.htm 2. 进入后台后,新建一个应用,得到一个app证书,证书里面有Appkey 和 Appsecret (Appsecret为 API 调用的密钥要注意保密,如泄漏要及时重置) 3. 调用淘宝接口还需要一个 sissionid,通过以下方式得到, 访问U

Beatiful Soup获取淘宝商品详情

Beatiful Soup生成商品详情页面的剖析树, 主要函数:findAll(name=None, attrs={}, recursive=True, text=None, limit=None, **kwargs) 利用findAll先获取标签范围的内容,再利用正则表达式进行匹配输出. Beatiful Soup的中文文档: http://www.crummy.com/software/BeautifulSoup/bs3/documentation.zh.html#Searching%20t

淘宝开放平台php-sdk测试 获取淘宝商品信息(转)

今天想使用淘宝开放平台的API获取商品详情,可是以前一直没使用过,看起来有点高深莫测,后然看开发入门,一步一步,还真有点感觉了,然后看示例,还真行了,记下来以后参考.其中遇到问题,后然解决了.因为我已经有APPKEY了所以,我使用的是正式环境,大家可以使用测试换进,设置稍微有点区别: 1.下载PHP SDK,下载地址:http://open.taobao.com/doc/detail.htm?spm=0.0.0.21.e7516f&id=34#s1 2.PHP SDK解压后,lotusphp_r

轻流订餐系统上线,商家做外卖生意更简单

大家好,我是每周为你们送餐的严阿姨, 为了保障每一位同事一上午辛苦的工作后可以准时吃上香喷喷的午饭, 我们特地更新了后厨的:订餐系统 从今天起,部门负责订餐的同学们,可以轻松提交订餐了- 我们将从以下几个方面重点把关, 做到: 1.不晚单 2.不错单 3.好服务 4.好味道 您有新的午餐订单 请及时处理哦~ 有了这个系统,我们后厨的工作人员都会第一时间收到每位同事下的订餐,不仅是短信收到提醒,邮件.微信都能收到哦- 您的订餐已确认 等着上菜吧~ 收到订单后,我们在后台进行确认,确认后我们的新系统

获取淘宝sessionkey 实时保存

<?php/* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ define('IN_ECS', true);require(dirname(__FILE__) . '/includes/in

跨域获取淘宝搜索框数据

<style> *{ margin: 0; padding: 0; } form{ position: relative; } .text{ width:300px; border: 1px solid #FFCC00; line-height: 40px; outline:none; } .sub{ width: 50px; line-height: 40px; background:#FFCC00 ; /*border: none;*/ position: absolute; top: 0

python获取淘宝登入cookies

重点:去新浪微博登入接口登入 一.代码 # coding=utf-8 import requests from selenium.webdriver.common.by import By from selenium.webdriver.support import expected_conditions as EC import time, random from selenium import webdriver from selenium.webdriver.support.wait im