最近在忙与淘宝做对接的工作,总体感觉淘宝的api文档做的还不错,不仅有沙箱测试环境,而且对于每一个api都可以通过api测试工具生成想要的代码,你完全可以先在测试工具中测试之后再进行代码的编写,这样就减少了我们不停修改代码的次数;但是有一点淘宝的文档上没有说明,sessionkey(有的地方也称是accessToken)的有效期比较短,如果没有你的应用没有发布的话,那么你的sessionkey的有效期只有1天,如果sessionkey过期了,私有的数据你就不能进行访问了。这个问题折腾了我一天半,当遇到这个问题之后,我立即发扬问度娘传统,但是非常的失望,基本上都是用JAVA的,.net也只有winform形式的,对于webform中没有提及。期间仿照JAVA的代码进行编码,但是失败了,可能是因为对.net没有达到滚瓜烂熟的地步,有些java的方法和对象我在.net都没有找到与之对应的方法和对象,就这样一直试,最终还是以失败告终。最后还是在淘宝的文档中找到了方法,不过这个方法的有效时间是多久还需要在之后进行验证。真是后悔自己没有好好的看看文档,导致浪费了大量的时间。下面就说说我是如何实现自动获取淘宝API的SessionKey。

  首先还是建议大家想看一下淘宝提供的文档http://open.taobao.com/doc/detail.htm?spm=0.0.0.0.nDCovh&id=118,这篇文档比较详细的介绍了在各个平台上如何延长SessionKey的有效期,我使用的是Refreshing an Access Token(通过刷新令牌刷新访问令牌)方式来延长访问令牌的时间。一般来说有三步,获取授权码code,得到访问令牌和刷新令牌,通过刷新令牌刷新访问令牌的有效期。下面对这三个部分进行说明,不过只针对采用Oauth2.0进行身份验证和授权协议的应用。

下面这幅图是淘宝文档上的,它说明了淘宝OAuth2.0的授权过程:

  • 获取授权码Code

  其实获取授权码Code非常的简单,只要你按照https://oauth.taobao.com/authorize?response_type=code&client_id=12304977&redirect_uri=http://www.oauth.net/2/&state=1212&view=web这种Url的格式,将连接中的client_id和redirect_uri替换成自己的就行,然后在浏览器输入该地址,回调的地址中就有code。这条Url中,client_id是我们从淘宝中获取到的AppKey,回调地址改成自己的本地地址就行。

  • 获取访问令牌和刷新令牌

  获取访问令牌这一操作建议每一次要获取数据时就进行一次操作,这样可以保证访问令牌SessionKey和Refresh_key保持最新。刚开始的时候,这一步我就执行了一次,获取刷新令牌后,以为刷新令牌的有效期会很长,可是第二天我运行第三步的代码是,发现出现了400错误,没办法,我又重新来了一遍同样的操作。现在我也没有弄明白是什么原因导致刷新令牌不能使用,如果有人知道,还请留下你的足迹,我猜可能是刷新令牌过期了。获取刷新令牌和访问令牌的代码如下:

Top.Api.Util.WebUtils wu = new Top.Api.Util.WebUtils();
IDictionary<string, string> param = new Dictionary<string, string>();
param.Add("grant_type", "authorization_code");
param.Add("code",code);
param.Add("client_id", appkey);
param.Add("client_secret", appsecret);
param.Add("redirect_uri", "http://192.168.3.120");
param.Add("view", "web");
string response = wu.DoPost(tokenUrl, param);

这里的DoPost方法返回的是Json格式的数据,需要使用JavaScriptSerializer进行解析。这样就获取到了access_token和refresh_token。下面就进入下一步,进行访问令牌的有效期进行刷新。

  • 刷新访问令牌的有效期

  一般来说,如果你的应用没有发布,那么你的sessionKey的有效期是1天,我的应用没有发布,刷新之后,访问令牌的有效期变成了两天,不知道发布之后的应用有效期能够刷到多久,知道的还麻烦留下足迹。刷新令牌有效期的代码如下:

Top.Api.Util.WebUtils wu = new Top.Api.Util.WebUtils();
IDictionary<string, string> param = new Dictionary<string, string>();
param.Add("grant_type", "refresh_token");
param.Add("refresh_token", refreshToken);
param.Add("client_id", appKey);
param.Add("client_secret", appSecret);
param.Add("view", "web");
string response = wu.DoPost(refreshTokenUrl, param);

和上面一样,返回的数据格式为json格式。

  还要说的是,刷新令牌需要在刷新有效期内进行刷新,不然运行代码时可能会报错。建议是将使用授权码Code获取刷新令牌和访问令牌这段代码放入一个Job中,根据刷新令牌的有效期来设置job运行的间隔时间。

  其实如果参照TopApi的文档,很容易就能掌握上面的知识,只是很多时候我们都在追求速度,对于文档都不细看,当遇到问题时,还是需要倒过来阅读文档,这与之前的意图背道而驰,希望自己能够吸取这次的教训。

自动获取淘宝API数据访问的SessionKey的更多相关文章

  1. 关于淘宝的数据来源,针对做淘宝客网站的淘宝api调用方法

    上次写了个淘宝返利模式的博客,直接被移除首页,不知道何故啊.可能是真的跟技术不太刮边. 众所周知,能够支撑一个网站运营的最基础不是程序写的多么好.也不是有多么牛X的运营人员,最主要的是数据,如果没有数 ...

  2. C# 脚本代码自动登录淘宝获取用户信息

    C# 脚本代码自动登录淘宝获取用户信息   最近遇到的一个需求是如何让程序自动登录淘宝, 获取用户名称等信息. 其实这个利用SS (SpiderStudio的简称) 实现起来非常简单. 十数行代码就可 ...

  3. SB淘宝api的奇葩问题! 一则服务器无法访问淘宝api

    <?xml version="1.0" encoding="utf-8" ?><error_response><code>3 ...

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

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

  5. taobao_api项目开坑,自主完成淘宝主要接口的开发-版本:卖家版(非淘宝api)

    项目名称:taobao_api 项目目的:独立实现各个淘宝操作的相关api,不依赖淘宝提供的api,而是自己实现接口 前期实现接口:已付款订单查询(自动更新), 订单发货 , 订单备注 应用场景:中小 ...

  6. 淘宝异构数据源数据交换工具 DataX

    淘宝异构数据源数据交换工具 DataX 阅读目录 DataX是什么? DataX用来解决什么? DataX特点? DataX结构模式(框架+插件) DataX在淘宝的运用 DataX是什么? Data ...

  7. 大数据 --> 淘宝异构数据源数据交换工具 DataX

    淘宝异构数据源数据交换工具 DataX DataX是什么? DataX是一个在异构的数据库/文件系统之间高速交换数据的工具,实现了在任意的数据处理系统(RDBMS/Hdfs/Local filesys ...

  8. 淘宝API得到单个商品的信息,用了淘宝的SDK...

    淘宝api获取到的数据.返回结果可以选择json格式和xml格式的啊.每个api下面都有sdk调用示例哦. 详细:http://wenwen.soso.com/z/q335640192.htm 淘宝开 ...

  9. 淘宝API学习之道:淘宝TOP之API接口接入教程

    作为一个中小型站点开发人员,淘宝API的开放大大缩短了站点的开发周期和运作效率.面对海量的数据.开发人员仅仅要细致阅读开发文档,熟悉对应的接口,就能够把数据导入自己的站点,这样就不必望洋兴叹了. 眼下 ...

随机推荐

  1. MySQL日期 专题

    一.MySQL 获得当前日期时间 函数 1.1 获得当前日期+时间(date + time)函数:now() mysql> select now();+--------------------- ...

  2. Java_压缩与解压工具类

    转载请注明出处:http://blog.csdn.net/y22222ly/article/details/52201675 zip压缩,解压 zip压缩与解压主要依靠java api的两个类: Zi ...

  3. 机器审核图片学习(1)pornDetector

    a) https://github.com/bakwc/PornDetector 封装了两个库,opencv与scikit-learn 另外一种法师封装了opencv与tensorflow

  4. Internet protocol security (ipsec) packet processing for multiple clients sharing a single network address

    Embodiments of the present invention address deficiencies of the art in respect to secure communicat ...

  5. 概率论经典问题 —— 三个事件 A、B、C 独立 ≠ 三个事件两两独立

    三个事件 A.B.C 相互独立?三个事件两两独立? A:第一次正面朝上: B:第二次正面朝上: C:第一次和第二次结果不同: P(AB)=P(A)P(B): P(AC)=1/4=P(A)P(C)(不是 ...

  6. SVN使用教程(基于SAE)

    TortoiseSVN is an easy-to-use SCM / source control software for Microsoft Windows and possibly the b ...

  7. 静态库、动态库,dll文件、lib文件,隐式链接、显式链接浅见

    静态链接.动态链接 静态库和动态库分别应用在静态链接方式和动态链接方式中,所谓静态链接方式是指在程序执行之前完成所有的链接工作,把静态库一起打包合入,生成一个可执行的目标文件(EXE文件).所谓动态链 ...

  8. python 教程 第十九章、 图形界面编程

    第十九章. 图形界面编程 import Tkinter top = Tkinter.Tk() hello = Tkinter.Label(top, text='Hello World!') hello ...

  9. DTFT、DFT、FFT

    对于一般的周期信号可以用一系列(有限个或者无穷多了)正弦波的叠加来表示.这些正弦波的频率都是某一个特定频率的倍数如5hz.2*5hz.3*5hz--(其中的 5hz 叫基频).这是傅立叶级数的思想.所 ...

  10. String转Color

    原文:String转Color 很硬性的转换,谁知道更好的忘不吝赐教啊. /// <summary> /// String To Color /// </summary> // ...