`
az7772010
  • 浏览: 203311 次
  • 性别: Icon_minigender_1
  • 来自: 天津
社区版块
存档分类
最新评论

C#调用淘宝API流程整理

 
阅读更多

对于开发者:

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


分享到:
评论

相关推荐

    C#调用API教程

     C# API大全pdf,内容涉及使用C#调用windows API 入门:  一:入门,直接从C# 调用DLL 导出  二.背后的原理―― 知其所以然,相关的知识  从.NET 平台调用Win32 API的一些基础知识以及编程实例,windows ...

    C#调用淘宝api(web实现)

    C#调用淘宝api(web实现),详细实例说明

    C#调用C++ Api或接口转换工具

    C#调用C++ Api或接口转换工具,自动将C++ Api转换成C#中使用接口 开发C#调用C++库或者api的好助手。

    C#中调用API,介绍API的使用

    C#中调用API C#中调用API C#中调用API C#中调用API

    C#调用api接口

    API函数是构筑Windows应用程序的基石,是Windows编程的必备利器。每一种Windows应用程序开发工具都提供了间接或直接调用了Windows API函数的方法

    C# 调用淘宝开放平台API的例子

    开发语言C#,工具是VS2010,本例子是原创调用淘宝开放平台API的例子。其中包括项目形式的淘宝JDK(2012.6.28),功能有:取得用户的API(TOP_test),店铺API(Shop_API),类目API(Item_API),交易API(Trade_API)。

    C#调用API串口通信

    C#调用API串口通信C#调用API串口通信C#调用API串口通信C#调用API串口通信C#调用API串口通信C#调用API串口通信

    C#winform调用webapi.rar

    C#winform调用webapi 上传json格式字符串,返回json字符串结果

    C#调用淘宝API既TOP SDK 查看最近下架商品和自动橱窗 更新版

    C#调用淘宝API既TOP SDK 查看最近下架商品和自动橱窗 初学的 只要更改下APPKEY 和 APPSecret 主要是 还要通过浏览器去获得SessionKey 请高手帮忙下怎么自动获得

    C#调用一言API并提取关键字 调用2.zip

    实现了用C#调用一言API,并通过字符串筛选提取关键字,筛选出句子与作者,并实现了可以显示自定义类别句子的功能!

    C#调用API 资料

    c# 调用api 的一些资料。“★(不错的例子)用C#调用Windows API和其它进程通信”“C#和内存指针.doc“”C#中调用Windows API的要点“”c语言调用api_C#中调用API“”用Visual C#调用Windows API函数

    在C#调用windows API

    本文将C#中调用API的要点汇集如下,希望给未在C#中使用过API的朋友一点帮助。另外如果安装了Visual Studio .net的话,在C:Program FilesMicrosoft Visual Studio ....

    C#调用windowsAPI

    在.Net Framework SDK文档中,关于调用Windows API的指示比较零散,并且其中稍全面一点的是针对Visual Basic .net讲述的。本文将C#中调用API的要点汇集如下,希望给未在C#中使用过API的朋友一点帮助。

    c# 调用百度地图API 代码示例

    将百度地图嵌入c# cs窗体中,cs...查了很多资料,参考网上众多朋友的代码及百度地图API demo,这个例子中的js代码不用key,方便很多,使用的是v1.4版,少了很多限制,使用.net4.5开发的,可以将c#代码转为低版本也行的。

    C#调用API修改系统时间

    C#调用API修改系统时间,适合新手使用。

    C#中调用Windows API的要点.rar_API_C#调用C_C# windows_windows

    C#中调用Windows API的要点

    C#中调用API C#中调用API

    API(Application Programming Interface),我想大家不会陌生,它是我们Windows编程的常客,虽然基于.Net平台的C#有了强大的类库,但是,我们还是不能否认API在Windows编程中的重要性。大多数的编程语言都支持API编程...

    c#调用wlanapi连接到wifi示例

    c#调用wlanapi连接到wifi示例,适用于xp。 win7可能需要稍微修改代码。

    C# 调用系统API连接打印机

    C# 调用系统API连接打印机打印POS

    C#调用Windows自身的API开发摄像头拍照和摄像功能

    1、C#调用Windows自身的API开发摄像头拍照和摄像功能 2、下载的代码绝对可用

Global site tag (gtag.js) - Google Analytics