最近在忙与淘宝做对接的工作,总体感觉淘宝的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的更多相关文章

  1. PHP对接淘宝客api完成APP引流优惠券

    淘宝客现在对多数人来说已经耳熟能详了,属于CPS(Cost Per Sale),一种网络广告收费标准,以实际销售产品数量来换算广告刊登金额.其他收费标准还有常见的CPC(Cost Per Click ...

  2. 淘宝联盟api调用笔记

    一.流程及主要请求接口 每日凌晨1点开始,服务器定时自动请求淘宝联盟数据,请求完毕之后,执行一个存储过程对数据进行整理,删除过期...购买数量<...的商品......,请求接口分别有(tbk_ ...

  3. 淘宝用户api 如何获得App Key和API Secret

    下面我们通过截图的方式详细说明申请淘宝应用的步骤. 一.访问淘宝开放平台http://open.taobao.com/ 申请成为合作伙伴 二.填写个人信息申请入住 三.点击创建应用 四.填写应用名称, ...

  4. 淘管 ERP项目与淘宝对接中产生的若干问题及处理办法

    现象:ERP绑定淘宝后,下载商品数据时如果成功,ajax不断尝试重发. 原因:  /app/taoapi/lib/top/TopClient.php 中的curl()方法成功后,返回空值,而前端收到空 ...

  5. 看淘宝营销api 文档有感

    total: use appkey & secrect variance naming rule 提供沙箱环境 使用api gateway 使用rest(但返回结果包裹了 isp.thread ...

  6. php根据IP地址跳转对应的城市,淘宝REST api调用地址直接使用

    <?php // 定义一个函数getIP() function getIP(){ global $ip; if (getenv("HTTP_CLIENT_IP")) { $i ...

  7. 自动获取淘宝API数据访问的SessionKey

    最近在忙与淘宝做对接的工作,总体感觉淘宝的api文档做的还不错,不仅有沙箱测试环境,而且对于每一个api都可以通过api测试工具生成想要的代码,你完全可以先在测试工具中测试之后再进行代码的编写,这样就 ...

  8. 淘宝TOP之API测试

    下面的文章,是很早之前写的.内容过时了.主要是获取session的方法,很简单了.作为一个中小型网站开发者,淘宝API的开放大大缩短了网站的开发周期和运作效率,面对海量的数据,开发者只要仔细阅读开发文 ...

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

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

随机推荐

  1. overflow:hidden

    原来以为overflow:hidden能隐藏所有溢出的子元素,但今天发现我错了. 对于overflow:hidden的最大误解时:当一个具有高度和宽度中至少一项的容器应用了overflow:hidde ...

  2. Jquery on() 动态绑定事件

    之前就一直受这个问题的困扰,在jQuery1.7版本之后添加了on方法,之前就了解过,其优越性高于live(),bind(),delegate()等方法,在此之前项目中想用这个来测试结果发现,居然动态 ...

  3. Android 平滑图片加载和缓存库 Glide 使用详解

    在图片加载库烂大街的今天,选择一个适合自己使用的图片加载库已经成为了每一个Android开发者的必经之路.现在市面上知名的图片加载库有UIL,Picasso,Volley ImageLoader,Fr ...

  4. Ubuntu自定义命令

    回到主文件夹 $ cd ~ 建立.bash_aliases $ touch .bash_aliases $ vim .bash_aliases 在此文件中加入一句话: alias cdlauncher ...

  5. spring mvc ajax

    <%@ page contentType="text/html;charset=UTF-8" %> <%@ include file="/WEB-INF ...

  6. nginx启动报错(1113: No mapping for the Unicode character exists in the target multi-byte code page)

    使用windows版本的nginx启动时遇到(1113: No mapping for the Unicode character exists in the target multi-byte co ...

  7. GitHub+hexo to Blog

    title: GitHub+hexo to Blog date: 2014-12-26 09:44:53 tags: hexo, github --- 摘要 一直想要一个自己的博客,不过一直怯于对网站 ...

  8. 我对前端MVC的理解

    前端MVC:(model.view.controller)模型.视图.控制器 MVC的逻辑都应该以函数的形式包装好,然后按产品业务和交互需求,使用对应的设计模式组装成合适的MVC对象或类. MVC逻辑 ...

  9. GTW likes gt(BC 模拟 or 优先队列)

    GTW likes gt Accepts: 54 Submissions: 782 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 13107 ...

  10. Rectangle and Square

    Description Little Petya very much likes rectangles and especially squares. Recently he has received ...