在上篇《淘宝API开发系列--开篇概述》介绍了下淘宝API平台的一些基本知识,由于一直有事情忙,就没有及时跟进随笔的更新,本篇继续讨论淘宝API的开发知识,主要介绍商家的绑定操作。上篇我们说过,淘宝就是基于应用程序键来控制用户的访问频率和流量的,另外可以通过应用程序键,让使用者登陆确认,获取到相关的授权码,然后获取SessionKey,作为访问使用者淘宝资源(如买入卖出等私人记录的信息)

我们再看看SessionKey是如何获取的(下面是淘宝关于正式环境下SessionKey的说明):

正式环境下获取SessionKey

注意:web插件平台应用和web其它应用在正式环境下是同样的获取方法

1、WEB应用

例如回调URL为:http://localhost

访问 http://container.open.taobao.com/container?appkey={appkey},页面会跳转到回调URL,地址类似如下:

http://localhost/?top_appkey={appkey} &top_parameters=xxx&top_session=xxx&top_sign=xxx

回调url上的top_session参数即为SessionKey
2、客户端应用

访问 http://auth.open.taobao.com/?appkey={appkey},即可获得授权码

通过http方式访问 http://container.open.taobao.com/container?authcode={授权码},会得到类似如下的字符串

top_appkey=1142&top_parameters=xxx&top_session=xxx&top_sign=xxx

字符串里面的top_session值即为SessionKey。

由 于本篇文章主要是介绍C/S客户的应用,因此客户端的应用就不能通过回调Url方式获得用户的验证,我们可以通过在Winform中的 WebBrowser控件,显示一个登陆验证及访问确认的操作界面给客户,当客户确认的时候并返回Session Key的内容界面的时候,我们取出Session Key保存并关闭浏览器窗口即可,今后把该SessionKey作为参数来访问相关需要Session Key的API即可。

另外,由于SessionKey的间隔时间比较短,如果API调用间隔时间比较长,那么SessionKey有可能 失效的,但是我们注意到,如果API调用的时候,SesionKey过期 那么会抛出TopException(其中ErrorCode为26或者27是SessionKey过期),里面有关于与TopException的部分 说明如下:

26 Missing Session 缺少SessionKey参数
27 Invalid Session 无效的SessionKey参数

我们先看看具体实现的界面,然后分析其中的实现逻辑吧。

1、首次需要登录的时候,使用一个Winform嵌套一个WebBrowser控件,实现网页登录。

2、商家用户输入账号密码后,确认是否授权程序访问相关资源。

3、确认后生成SessionKey,这个Key正是我们的程序需要的关键内容,因此需要自动获取出来。

4、程序拿到该Session Key后,把它作为参数来访问淘宝API获取相关的信息,这里获取交易API的购买信息,需要SessionKey的。

以上就是使用SessionKey的API工作流程界面,我们下面介绍一下相关的实现代码。

1) 主窗体主要的操作代码:

代码Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->    public partial class Form1 : Form{private TopJsonRestClient jsonClient;private TopContext context;private void Form1_Load(object sender, EventArgs e){this.winGridView1.ProgressBar = this.toolStripProgressBar1.ProgressBar;this.winGridView1.AppendedMenu = this.contextMenuStrip1;jsonClient = new TopJsonRestClient("http://gw.api.taobao.com/router/rest", "12033411", "你的密钥");client = GetProductTopClient("json");xmlClient = new TopXmlRestClient("http://gw.api.taobao.com/router/rest", "12033411", "你的密钥"");}/// <summary>/// 判断是否顺利获取SessionKey/// </summary>/// <returns></returns>private bool GetAuthorizeCode(){string authorizeCode = "";FrmAuthorized dlg = new FrmAuthorized();if (dlg.ShowDialog() == DialogResult.OK){authorizeCode = dlg.AuthrizeCode;}if (string.IsNullOrEmpty(authorizeCode)) return false;context = SysUtils.GetTopContext(authorizeCode);if (context == null) return false;return true;}private void BindData(){if (context == null){bool flag = GetAuthorizeCode();if (!flag) return;}string sessionKey = context.SessionKey;获取用户信息//UserGetRequest request = new UserGetRequest();//request.Fields = "user_id,nick,sex,created,location,alipay_account,birthday";//request.Nick = "wuhuacong";//User user = client.Execute(request, new UserJsonParser());//MessageBox.Show(ReflectionUtil.GetProperties(user));try{//买入交易TradesBoughtGetRequest req = new TradesBoughtGetRequest();req.Fields = "tid,title,price,type,iid,seller_nick,buyer_nick,status,orders";req.PageNo = 1;req.PageSize = 10;ResponseList<Trade> rsp = jsonClient.GetBoughtTrades(req, sessionKey);this.winGridView1.DataSource = rsp.Content;MessageBox.Show(rsp.Content.Count.ToString());//卖出交易TradesSoldGetRequest soldReq = new TradesSoldGetRequest();soldReq.Fields = "tid,title,price,type,iid,seller_nick,buyer_nick,status,orders";soldReq.PageNo = 1;soldReq.PageSize = 10;ResponseList<Trade> soldRsp = jsonClient.GetSoldTrades(soldReq, sessionKey);this.winGridView1.DataSource = soldRsp.Content;MessageBox.Show(soldRsp.Content.Count.ToString());}catch (TopException ex){if (ex.ErrorCode == 26 || ex.ErrorCode == 27){if (MessageUtil.ShowYesNoAndError("SessionKey过期,您是否需要重新认证") == DialogResult.Yes){bool flag = GetAuthorizeCode();if (!flag) return;BindData();//重新刷新}else{return;}}}}private void btnTest_Click(object sender, EventArgs e){BindData();}

2、用户登陆的窗体,就是一个form窗体加上一个WebBrowser控件,窗体代码如下:

代码Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->    public partial class FrmAuthorized : Form{/// <summary>/// 授权码/// </summary>public string AuthrizeCode = "";private string url = "http://open.taobao.com/authorize/?appkey=12033411";public FrmAuthorized(){InitializeComponent();}/// <summary>/// 获取HTML页面内制定Key的Value内容/// </summary>/// <param name="html"></param>/// <param name="key"></param>/// <returns></returns>public string GetHiddenKeyValue(string html, string key){string str = html.Substring(html.IndexOf(key));str = str.Substring(str.IndexOf("value") + 7);int eindex1 = str.IndexOf("'");int eindex2 = str.IndexOf("\"");int eindex = eindex2;if (eindex1 >= 0 && eindex1 < eindex2){eindex = eindex1;}return str.Substring(0, eindex);}private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e){if (e.Url.AbsoluteUri == url){AuthrizeCode = GetHiddenKeyValue(this.webBrowser1.DocumentText, "autoInput");if (!string.IsNullOrEmpty(AuthrizeCode) && AuthrizeCode.IndexOf("TOP-") >= 0){this.DialogResult = DialogResult.OK;this.Close();}}}private void FrmAuthorized_Load(object sender, EventArgs e){webBrowser1.Navigate(url);}}

这样我们就可以在首次使用API或者SessionKey失效的时候,让商家用户输入账号密码并确认即可,其他使用即可顺利无阻。

是不是有点意思呢,赶快试试吧,说不定带来一些意想不到的收获及创意哦。

http://www.cnblogs.com/wuhuacong/archive/2010/03/26/1697005.html

淘宝API开发系列--商家的绑定2相关推荐

  1. 淘宝API开发系列---阿里.聚石塔.开放平台的使用5

    好久没有继续跟进淘宝的API使用了,有很多做相关应用的同行都来咨询,很多都因为自己开发工作比较忙而没有来得及好的处理,前几天,有一个朋友叫帮忙指导如何使用淘宝API,由于原来有一些成熟的例子应用,因此 ...

  2. 【.Net码农】【淘宝API】淘宝API开发系列---阿里.聚石塔.开放平台的使用

    好久没有继续跟进淘宝的API使用了,有很多做相关应用的同行都来咨询,很多都因为自己开发工作比较忙而没有来得及好的处理,前几天,有一个朋友叫帮忙指导如何使用淘宝API,由于原来有一些成熟的例子应用,因此 ...

  3. 淘宝API开发系列--开篇概述

    前阵子有空发现淘宝的API挺有意思的,就留意学习了一下,淘宝从2008.6月开始公测以来,API渐趋稳定,文档的相关说明也比较细致,不过基于淘宝API做应用的软件目前应该还不是很多,不过由于马云的影响 ...

  4. 淘宝API开发系列:淘宝图片搜索API / item_search_img-按图搜索淘宝商品(拍立淘)/图片搜索API调用值说明

    为了进行淘宝的API开发,首先我们需要做下面几件事情. 1)开发者注册一个账号 2)然后为每个淘宝应用注册一个应用程序键(App Key) . 3)下载淘宝API的SDK并掌握基本的API基础知识和调 ...

  5. 淘宝API开发系列:item_fee-淘宝/天猫获得淘宝商品快递费用 API 返回值说明

    为了进行淘宝的API开发,首先我们需要做下面几件事情. 1)开发者注册一个账号 2)然后为每个淘宝应用注册一个应用程序键(App Key) . 3)下载淘宝API的SDK并掌握基本的API基础知识和调 ...

  6. 淘宝API开发系列,产品详情,关键词搜索,订单接口系列等

    为了进行电商的API开发,首先我们需要做下面几件事情. 1)开发者注册一个账号, 2)然后为每个电商应用注册一个应用程序键(App Key) . 3)下载电商API的SDK并掌握基本的API基础知识和 ...

  7. 【淘宝API开发系列】获取商品详情,商品评论、卖家订单接口

     一.获取淘宝卖家店铺订单背景        订单是卖家的核心数据,卖家的很多日常工作都是围绕着订单展开,应用的基本功能就是要保证订单实时.完整的展示在卖家面前.由于API请求依赖于网络,存在 着网络 ...

  8. 【淘宝API开发系列】获得商品评论 API 返回值说明

    一.商品评价有什么好处? (1)根据统计,有93%的消费者是会看评价的,并且每一个消费者在阅读评价数量上基本上都是1-3条左右,最重要的是拼多多评价促使转化率提升50%! (2)影响买家购物决策:95 ...

  9. 淘宝 API 开发步骤

    为了进行淘宝的 API 开发,首先我们需要做下面几件事情. 1)开发者注册一个账号  注册链接 2)然后为每个淘宝应用注册一个应用程序键(App Key) . 3)下载淘宝 API 的 SDK 并掌握 ...

最新文章

  1. 16位计算机cpu电路图,简单16位CPU设计.doc
  2. C#中的DBNull、Null、String.Empty和“”
  3. 如何解决区块链钱包更新慢问题?
  4. 球体动画Android,Android自定义View实现简单炫酷的球体进度球实例代码
  5. 3-15Pytorch与分布函数
  6. python中索引和下标_Series下标索引、标签索引、切片索引、布尔索引
  7. MySQL5.6多实例安装
  8. 《写给PHP开发者的Node.js学习指南》一2.2 预定义的PHP变量
  9. Flink Weekly | 每周社区动态更新(附5月活跃榜单)
  10. ubuntu和ok6410开发板之间架设nfs
  11. Vue配置TinyMCE富文本编辑器 + 图片(本地)上传到服务器
  12. MIPI归纳---为什么阻抗为100欧姆
  13. 3个空手套白狼的经典案例,教你如何利用商业模式疯狂赚钱
  14. JavaScript中的面向对象编程
  15. 微软云Blob存储账号使用——Java使用
  16. Cloudflare 与 GoDaddy
  17. 基于深度学习的菠萝实时三维坐标定位项目
  18. tomcat启动报错,找不到对应的 queue,从而引发内存泄漏
  19. 等级保护测评—Windows
  20. 英语的加减乘除怎么计算机,用英语表示加减乘除法的用法

热门文章

  1. 现代C++之SFINAE
  2. 移动前端自适应适配方法
  3. Broken pipe问题分析
  4. 三位一体,用游戏打通孩子记忆力、认知和双语启蒙的学前神器
  5. 使用Amazon S3 Python版本 连接ceph 基本操作
  6. IBM X服务器告警面板指示灯说明
  7. Linux系统中的进程与计划任务管理
  8. 理解 css rem与动态计算rem
  9. 路由器缓冲区膨胀导致的TCP传输延迟
  10. blob图片路径加密