对于开发者:

  1. 申请成为开发者
  2. 创建一个应用,会得到应用的App key和App Secret,其中App Key是公开的,而App Secret是只有开发者才知道的。

用户如何使用:<wbr></wbr>

  1. 查询不需要验证的非私密信息,如在淘宝不需要登录就能看到的,可以直接调用API查询
  2. 查询需要验证的私密信息如交易信息:

<wbr><wbr><wbr><wbr><wbr> 1)用户登录Taobao,授权我们的应用可以查询他的私密信息,授权后会得到Session Key</wbr></wbr></wbr></wbr></wbr>

<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr> 其实这一步需要两步完成:</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>

<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr> a)访问http://my.open.taobao.com/auth/authorize.htm?appkey={app key}获得授权码authcode(有10分钟时间限制)</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>

<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr> b)访问http://container.open.taobao.com/container?authcode={a获取的authcode}获取Session Key</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>

<wbr><wbr><wbr><wbr><wbr> 2) 将此Session Key复制到我们的程序中,程序调用TOP时传入此Session Key就可以返回查询结果了</wbr></wbr></wbr></wbr></wbr>

C#调用 <wbr><wbr></wbr></wbr>

  1. 下载.net开发使用的官方SDK(开源的)
  2. 引用其中的TopSdk.dll<wbr></wbr>
  3. 基本调用代码如下:
ITopClient<wbr>client<wbr>=<wbr><span style="color: rgb(0, 0, 255); font-family: 'Courier new' !important;">new</span><wbr>DefaultTopClient(<span style="color: rgb(128, 0, 0); font-family: 'Courier new' !important;">"</span><span style="color: rgb(128, 0, 0); font-family: 'Courier new' !important;">http://gw.api.taobao.com/router/rest</span><span style="color: rgb(128, 0, 0); font-family: 'Courier new' !important;">"</span>,<wbr><span style="color: rgb(128, 0, 0); font-family: 'Courier new' !important;">"</span><span style="color: rgb(128, 0, 0); font-family: 'Courier new' !important;">appkey</span><span style="color: rgb(128, 0, 0); font-family: 'Courier new' !important;">"</span>,<wbr><span style="color: rgb(128, 0, 0); font-family: 'Courier new' !important;">"</span><span style="color: rgb(128, 0, 0); font-family: 'Courier new' !important;">app<wbr>secret</wbr></span><span style="color: rgb(128, 0, 0); font-family: 'Courier new' !important;">"</span>);<wbr><wbr><br> UserGetRequest<wbr>req<wbr>=<wbr><span style="color: rgb(0, 0, 255); font-family: 'Courier new' !important;">new</span><wbr>UserGetRequest();<wbr><wbr><br><br><span style="color: rgb(0, 128, 0); font-family: 'Courier new' !important;">//</span><span style="color: rgb(0, 128, 0); font-family: 'Courier new' !important;">要查询的字段</span><br> req.Fields<wbr>=<wbr><span style="color: rgb(128, 0, 0); font-family: 'Courier new' !important;">"</span><span style="color: rgb(128, 0, 0); font-family: 'Courier new' !important;">user_id,uid,nick,sex,buyer_credit,seller_credit,location,created</span><span style="color: rgb(128, 0, 0); font-family: 'Courier new' !important;">"</span><span style="color: rgb(128, 0, 0); font-family: 'Courier new' !important;">;<wbr><wbr></wbr></wbr></span><span style="color: rgb(128, 0, 0); font-family: 'Courier new' !important;"><br></span>req.Nick<wbr>=<wbr><span style="color: rgb(128, 0, 0); font-family: 'Courier new' !important;">"</span><span style="color: rgb(128, 0, 0); font-family: 'Courier new' !important;">test</span><span style="color: rgb(128, 0, 0); font-family: 'Courier new' !important;">"</span>;<wbr><wbr><br> UserGetResponse<wbr>user<wbr>=<wbr>client.Execute(req);<wbr><span style="color: rgb(0, 128, 0); font-family: 'Courier new' !important;">//</span><span style="color: rgb(0, 128, 0); font-family: 'Courier new' !important;">必要时传入Session<wbr>key</wbr></span></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>

我的实践总结:

<wbr><wbr><wbr><wbr><wbr><wbr><wbr> 我创建的是商家自用型应用,我是用来自动发货用的,例如提取买家留言中的Email地址,自动发送邮件给买家。当然采用C/s结构,值得注意的是:Session Key并没有传说中的10分钟限制,可以一次获取永久使用,也许是商家自用型应用的关系?</wbr></wbr></wbr></wbr></wbr></wbr></wbr>

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


  最近在忙与淘宝做对接的工作,总体感觉淘宝的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的授权过程:

淘宝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<<span style="margin: 0px; padding: 0px; color: rgb(0, 0, 255); font-family: 'Courier New' !important;">string, string> param = new Dictionary<<span style="margin: 0px; padding: 0px; color: rgb(0, 0, 255); font-family: 'Courier New' !important;">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<<span style="margin: 0px; padding: 0px; color: rgb(0, 0, 255); font-family: 'Courier New' !important;">string, string> param = new Dictionary<<span style="margin: 0px; padding: 0px; color: rgb(0, 0, 255); font-family: 'Courier New' !important;">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的文档,很容易就能掌握上面的知识,只是很多时候我们都在追求速度,对于文档都不细看,当遇到问题时,还是需要倒过来阅读文档,这与之前的意图背道而驰,希望自己能够吸取这次的教训。


Logo

电商企业物流数字化转型必备!快递鸟 API 接口,72 小时快速完成物流系统集成。全流程实战1V1指导,营造开放的API技术生态圈。

更多推荐