轻轻松松使用asp做api淘宝客

更新时间:2024-06-08 22:01:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

轻轻松松使用asp做api淘宝客

写在前面的话

在2008年由本人开发asp版本的api程序让淘客程序进入一个新的里程碑,在阿里妈妈更新api接口2.0后之前程序已无法使用,期间由于工作的原因也没有再次更新,最近发现很多站长需求asp的淘宝客程序所以做了一个asp淘客的视频教程,但是对于一些新手可能看不懂视频,都加我的QQ要我提供视频源程序,这是一种偷懒的行为。今天特意做一个文字教程算是给asp开发站长的一份国庆大礼吧。使用演示站:www.shaop.cn站长:吴林祥 一、准备工作

了解淘宝客什么是淘宝客?淘宝客就是帮助淘宝卖家推广商品并按照成交效果获得佣金的人(可以是个人或者网站),之前叫淘客,自2009年1月12日起,正式更名为淘宝客。“淘宝客”是指帮助淘宝卖家推广商品赚取佣金的人。只要获取淘宝商品的推广链接,让买家通过您的推广链接进入淘宝店铺购买商品并确认付款,就能赚取由卖家支付的佣金,无需投入成本,无需承担风险,最高佣金达商品成交额的50%。

目前最为火爆的淘宝客类型为淘宝api接口调取和单品的推广为主,而主要的程序语言已php和.Net居多。

具体形式 淘宝客推广目前分成2大类,一个专业性质的淘宝客返利网站,另一类是利用CMS或博客,微博等其他可传播的媒介进行淘宝客推广。

推广形式 推广单件商品、推广整个类目商品、推广整个店铺、搜索推广、页面推广、智能广告推广(详细内容请登录www.alimama.com查询)

申请淘宝api 淘宝api申请这里就不多做说明,详细情况请百度一下.

今天就设么多,你需要做的就是申请api的App_key和secretCode,并下载api文档和通读api文档,明天我将带领大家一起了解一下api文档的。下载地址:http://open.taohao.com/

昨天我让大家申请了App_key和secretCode,并下载api文档和通读api文档,今天我就带领大家一起看一下api文档,我们要从淘宝获取数据需要使用哪几个常用api接口。直接看下图:

我们要从淘宝获取数据主要设计我用红线标出来的2个接口,一个是查询淘宝客推广的商品(必须的),二是查询淘宝客推广的商品详细信息,如果你的网站不需要显示详细信息可以那就更简单了,例如演示网站在文章详细界面通过关键字+ajax调取相关产品,点击直接进入淘宝就不需要详细页面调取了。这种方式将在后面讲到,方便个位站长做插件,让网站更灵活。

在做api应用的时候会涉及到API用户授权,但是在我们使用淘宝客api的时候不需要API用户授权,而一些系统级别输入参数并没有列出那些是必须的,这里我们只需要了解应用级的一些参数。通过文档我们知道应用级参数有几项是必须输入有几项是特殊可选和N多项可选,应用级参数fields是必不可少的,这个也是我们需要查询的一些字段。特殊可选主要是Nick和PId以及keyword和Cid的区别,但是两者必须要有一个,输入了Nick可以不用PId,有的PId可以不用Nick,通样有了关键字Keyword可以不输入Cid,有了Cid也可以不要输入Keyword,他们两两之间的关系仔细看文档右边的说明就可以理解,在这里我也不多废话了免得被拍砖。

废话一大堆我们只是说了一下taobao.taobaoke.items.get(查询淘宝客推广商品)的文档。那么taobao.taobaoke.items.detail.get(查询淘宝客推广商品详细信息)的文档还请同学们自己去查看,并做好以下准备

嘿嘿,说是准备其实就是给你布置一点作业,方便我们明天的课程。 ?作业内容:请按以下格式在记事本里准备好你的数据并保存好 app_Key = \secretCode = \pid=\ Nick=””

fields = \

cid=”” keyword=\

api的调用方式分为http调用方式和https免签名调用方式,而我们这里讲解的是以http调用方式获取数据,获取数据格式为xml,加密方式使用32位大写MD5值。详细内容如下(转自淘宝开放平台)已了解的可跳过这一节。

1、 TOP接口调用原理

调用TOP的API接口时,即是与TOP服务器的数据进行一次交互的过程,API调用接口时,API调用端(即用户调用接口运行的程序),调用API服务端的数据(即TOP提供的服务器,可调用淘宝上的数据)时的交互流程。

2、 数据获取方式

淘宝开放平台调用接口都是通过调用API来实现的,所有的API都是基于REST协议,可兼容多种编程语言。只要能够按照top的规范POST调用参数就可以取得相应接口返回的淘宝数据。 3、 调用入口

环境地址,即调用接口(API)时,都通过访问该地址,来获取该接口需要获取的数据

正式环境:http://gw.api.taobao.com/router/rest

沙箱环境:http://gw.api.tbsandbox.com/router/rest

注:淘宝沙箱环境是淘宝开放平台(TOP)提供给独立软件开发商的测试环境。沙箱环境模拟线上真实的淘宝环境,淘宝商家可以在沙箱环境中完全仿真测试TOP接口的功能;沙箱环境地址:http://mini.tbsandbox.com/

4、 调用参数

调用接口(API)时,必须传入的系统级参数以及应用级参数,该接口更多输入参数以及返回结构详见API文档 5、 系统参数介绍

名称 型 method string 类需 Y API接口名称 是否必描述 timestamp string Y 时间戳,格式为yyyy-mm-dd HH:mm:ss,例如:2008-01-25 20:23:30。淘宝API服务端允许客户端请求时间误差为6分钟。 format string N 可选,指定响应格式。默认xml,目前支持格式为xml,json app_key string Y TOP分配给应用的AppKey v string Y API协议版本,可选值:2.0。 sign string Y API输入参数签名结果 sign_method string Y 参数的加密方法选择,可选值是:md5,hmac 6、 签名(重点难点)

调用接口(API)时需要对请求参数进行签名验证,TOP服务器也会对该请求参数进行验证是否合法的。根据参数名称将你的所有请求参数按照字母先后顺序排序:key + value .... key + value对除签名和图片外的所有请求参数按key做的升序排列, value无需编码。例如:将

foo=1,bar=2,baz=3 排序为bar=2,baz=3,foo=1参数名和参数值链接后,得到拼装字符串bar2baz3foo1,将secretcode同时拼接到参数字符串头、尾部进行md5加密后,再转化成大写,格式是:byte2hex (md5(secretkey1value1key2value2...secret))。 7、发送http请求

拼装URL: 将所有参数值转换为UTF-8编码,然后拼装,通过浏览器访问该地址,即成功调用一次接口

http://gw.api.tbsandbox.com/router/rest?sign=5029C3055D51555112B60B33000122D5×tamp=2011-07-01+13:52:03&v=2.0&app_key=test&method=taobao.user.get&partner_id=top-apitools&format=xml&nick=???????μ?èˉ??????·17&fields=nick,location.state,location.city

淘宝开放平台给出的文档很详细,在上一节我们也说了有一些系统级的参数,上面已经列出了详细的系统级的名称和描述,这些是必须输入的参数,本教程使用的是xml格式调取并使用md5加密,签名是重点也是好多开发者的难点

之处,往往都是因为签名错误导致调取数据的失败。本次学习严格按照我的步骤走下去你可以直接在正式环境下调取出数据。

本节没有太多的内容,你需要准的工作就是准备好md5.asp文件,值得注意的是需要32位的加密。打开你下载的md5.asp查看最后2行,修改成如下即可 MD5 = LCase(WordToHex(a) & WordToHex(b) & WordToHex(c) & WordToHex(d)) '32λ

'MD5=LCase(WordToHex(b) & WordToHex(c)) '16λ

我们使用的是32位的,把16位的注释小即可。今天就到这里,明天就开始进入程序阶段了请各位学员提前做好准备,这里要设置到一些类文件,对类不了解的同学抓紧补习一下,我这里没有时间给你补习什么是类?类怎么写?类怎么用?

本教程演示地址:www.shaop.cn

上一节的作业同学们都做好了吧?今天的课程就进入程序阶段了,我会给大家一点一点分析并一点一点的去做。还望各位同学跟上节奏哦!在第二节的时候我让大家准备了一个记事本文件,里面的内容如下

app_Key = \ secretCode = \ pid=\ Nick=””

fields = \ cid=”” keyword=\

现在我们对照上一节的系统级参数看一下还差什么? API接口名称method=“taobao.taobaoke.items.get” Format格式化我们用的是xml V当前的api版本为2.0

Sign API输入参数签名结果(重点) sign_method加密方式选择md5方式

timestamp当前时间戳要用完整的格式如“2012-09-10 09:06:26” 相关函数

1、通过上面的归类我们知道asp里系统默认时间是<%=now()%>,但是他的格式不是完整的,所以我们需要一个函数来转换一下!

'================================================== '函 数 名: Format_Time '功 能: 格式化时间 '参 数: 当前的时间now()

'================================================== Function Format_Time(s_Time) Dim y, m, d, h, mi, s Format_Time = \

If IsDate(s_Time) = False Then Exit Function y = cstr(year(s_Time)) m = cstr(month(s_Time)) If len(m) = 1 Then m = \d = cstr(day(s_Time)) If len(d) = 1 Then d = \h = cstr(hour(s_Time)) If len(h) = 1 Then h = \mi = cstr(minute(s_Time)) If len(mi) = 1 Then mi = \s = cstr(second(s_Time)) If len(s) = 1 Then s = \' yyyy-mm-dd hh:mm:ss

Format_Time = y & \End Function

2、整个获取过程中我们传递给淘宝的数据是utf-8格式的,所以我们对传递的汉字部分(关键字,淘宝用户名)进行编码转换。函数如下

'================================================== '函 数 名: YuZhe_UrlEncode

'功 能: 将指定字符进行指定格式进行编码 '参 数: iStrCode 目标字符

' iPageCode 指定编码 65001-UTF-8或936-GB2312

'================================================== Function YuZhe_UrlEncode(iStrCode, iPageCode) Dim StrUrlEncode

StrUrlEncode = \初始化变量

If iPageCode <> SetPageCode Then '如果指定要编码的类型与当前页面编码不一至,则临时设置处理该函数时的页面编码类型 Session.CodePage = iPageCode

StrUrlEncode = Server.UrlEncode(iStrCode)

Session.CodePage = SetPageCode '还原页面编码为默认 Else

StrUrlEncode = Server.UrlEncode(iStrCode) End If

YuZhe_UrlEncode = StrUrlEncode End Function

3、在asp获取淘宝客数据的时候我们使用的是httpget方式获取。这个比较简单我直接提供函数了。

'============httpget=========== dim gXmlHttpVer Function getXmlHttpVer()

dim i,xmlHttpVersions,xmlHttpVersion getXmlHttpVer=false

xmlHttpVersions=Array(\for i=0 to ubound(xmlHttpVersions) xmlHttpVersion=xmlHttpVersions(i)

if isInstallObj(xmlHttpVersion) then getXmlHttpVer=xmlHttpVersion:gXmlHttpVer=xmlHttpVersion: Exit Function next

End Function Function tryXmlHttp() dim i,ah

ah=array(\P.2.0\

\\

\On Error Resume Next for i=0 to UBound(ah)

SET tryXmlHttp=Server.CreateObject(ah(i))

if err.number=0 then:gXmlHttpVer=ah(i):tryXmlHttp.setTimeouts 2000,20000,20000,180000 err.clear:Exit Function:else:err.clear:end if next

End Function dim gXmlHttpObj

Function getRemoteContent(Byval returnType) '组参

url=strGetUrl&createStrParam()

if not isObject(gXmlHttpObj) then:set gXmlHttpObj=tryXmlHttp():end if gXmlHttpObj.open \On error resume next gXmlHttpObj.send()

if err.number = -2147012894 then dim des

select case gXmlHttpObj.readyState Case 1

des=\\Case 2:des=\Case 3:des=\Case else:des=\end select

htm = htm& gXmlHttpVer&\\

\EE;\

\0;的服务商\response.end else

select case returnType case \

getRemoteContent=gXmlHttpObj.responseText case \

getRemoteContent=gXmlHttpObj.responseBody end select end if End Function

好了,今天的内容就到这里了。整理上面的三个函数以后了解一下签名的生成方式。明天我们进入签名程序

又是一天的开始,今天大家要打起精神来看了,api的签名是个难点。很多站长都是在这里出错的。今天我来带大家一起研究下签名函数。 首先我们来看一下开放平台给的签名说明:

调用接口(API)时需要对请求参数进行签名验证,TOP服务器也会对该请求参数进行验证是否合法的。根据参数名称将你的所有请求参数按照字母先后顺序排序:key + value .... key + value对除签名和图片外的所有请求参数按key做的升序排列, value无需编码。例如:将foo=1,bar=2,baz=3 排序为bar=2,baz=3,foo=1参数名和参数值链接后,得到拼装字符串bar2baz3foo1,将secretcode同时拼接到参数字符串头、尾部进行md5加密后,再转化成大写,格式是:byte2hex (md5(secretkey1value1key2value2...secret))。 通过上面的说明我们知道其中有几个重要点: 1、 请求参数按照字母先后顺序 2、 请求参数按key做的升序排列 3、 参数名和参数值链接拼装为字符串 4、 value无需编码

5、 将secretcode同时拼接到参数字符串头、尾部进行md5加密后

6、 转化成大写

以上6点中第一点和第二点可以可以一起看。在php中使用的是数组的形式添加和排序,那么我们在这里也使用数组的形式来做,这样相对就简单了。有key有value,这是一个二维数组。如下:

TaoApiRecord=Array(\\\

\)

这个数组我已经添加几个系统级参数在里面,timestamp直接讨厌了函数Format_Time。在开发中我们的appkey一级nick或pid都是变化的,更多的是其他相关的参数需要添加如这个数组里面,那么如何添加呢?很简单写一个函数在数组中添加一项。函数如下: '数组中增增加

Function ArrayList(tag,value) arrLenth=UBound(TaoApiRecord)

REDIM Preserve TaoApiRecord(arrlenth+1) TaoApiRecord(arrlenth+1)=tag&\ ArrayList=TaoApiRecord End Function

使用方法 :ArrayList \结果:

TaoApiRecord=Array(\\\

\“app_key=12345678\ ) ……

以此类推把我们需要的参数都加入到数组中。接下来就是对数组进行排序。通用简单的一个函数处理。如下:

'============数组冒泡排序===================== Function ArraySort(ary) KeepChecking = TRUE

Do Until KeepChecking = FALSE

KeepChecking = FALSE For I = 0 to UBound(ary) If I = UBound(ary) Then Exit For If ary(I) > ary(I+1) Then FirstValue = ary(I) SecondValue = ary(I+1) ary(I) = SecondValue ary(I+1) = FirstValue KeepChecking = TRUE End If Next Loop

ArraySort = ary End Function

使用方法 :ArraySort(TaoApiRecord) 结果:

TaoApiRecord=Array(“app_key=12345678\ \\

\\)

到了在这里,第一条第二条已经完成,现在开始拼装字符串,对数组进行解析按照要求参数名和参数值链接拼装为字符串需要如下函数: '按要求进行排序组织传递的参数

Function zzBokeOrder(ary) zzBokeOrder=\

MyArray = ArraySort(ary)

For I = Lbound(MyArray) to Ubound(MyArray) If zzBokeOrder=\ zzBokeOrder =MyArray(I) Else

zzBokeOrder =zzBokeOrder&MyArray(I) End If Next End Function

使用方法 :zzBokeOrder (TaoApiRecord) 结果:

zzBokeOrder=app_key12345678formatxmlsign_methodmd5timestamp2012-09-10 09:42:25v2.0 注意:我们看第四点,value无需编码,我们生成的结果里面没有中文所以不需要编码,但是文档说明里的这一点往往就是出错点,关键字查询的时候是中文这里必须要处理,淘宝官方说需要进行utf8编码处理,其实我告诉你,不管你的程序语言是utf8编码还是gb2312编码,在签名的时候数组里的关键字必须是gb2312的处理,这里就用到我们上面的YuZhe_UrlEncode编码处理函数。关键字加入数组的时候要处理,方法如下

strKeyword=YuZhe_UrlEncode(Keyword,936)?把汉字转换成gb2312格式 ArrayList \

现在我们开始生成签名,看第五点将secretcode同时拼接到参数字符串头、尾部进行md5加密,第六点转换成大写。 结果:

sign = zzbokeOrder(TaoapiRecord)

sign=ucase(md5(strsecretCode&sign&strsecretCode))

大功告成,签名生成了。那么我们就要给淘宝传递参数了。传递方式如下

http://gw.api.tbsandbox.com/router/rest?sign=5029C3055D51555112B60B33000122D5×tamp=2011-07-01+13:52:03&v=2.0&app_key=test&method=taobao.user.get&partner_id=top-apitools&format=xml&nick=???????μ?èˉ??????·17&fields=nick,location.state,location.city

注意:刚才我们说签名里的汉字问题,这里也需要注意传递的参数汉字问题。签名里是gb2312的编码。这里给淘宝发送的信息里又需要的是utf的编码。这里如意搞混淆。在做开发的是本人也是大费周章。最后还是被我发现了,所以这里我们还是通过我们的数组进行组合我用了一个函数处理 '组参+签名函数

function createStrParam()

For I = Lbound(TaoapiRecord) to Ubound(TaoapiRecord) arry=split(TaoapiRecord(I),\ If URLsignRecord=\

URLsignRecord =arry(0)&\ Else

if arry(0)=\

URLsignRecord =URLsignRecord&\ else

URLsignRecord =URLsignRecord&\ end if End If Next

createStrParam=URLsignRecord end function

结果:

timestamp=2011-07-01+13:52:03&v=2.0&app_key=test&method=taobao.user.get&partner_id=top-apitools&format=xml&nick=???????μ?èˉ??????·17&fields=nick,location.state,location.city 有了签名和传递的参数进行最终的组合,就是把获取淘宝客数据的地址http://gw.api.taobao.com/router/rest?和签名加在上面的结果里。 Httpurl=http://gw.api.taobao.com/router/rest?

timestamp=2011-07-01+13:52:03&v=2.0&app_key=test&method=taobao.user.get&partner_id=top-apitools&format=xml&nick=???????μ?èˉ??????·17&fields=nick,location.state,location.city&sign=15AS4SAD47DDUDBB23234

好了,签名和传递的参数都做好了,今天的课程也就到这里了。给的作业就是把这几个函数都整理一下,明天我们就获取获取,有能力的做成一个类文件方便调去。明天我带大家取数据了

又是一个新的开始,昨天的课程不知道大家学的如何了,今天我带大家一起获取淘宝数据。先问问大家你们有没有做昨天的作业呢?肯定有同学偷懒了。为了方便测试我已经写好了,今天就拿出来吧,免得大家说我扣。 直接上函数,没有注释…..

文件名:New_APi.asp <%

Class MainClass_TopAPi Private strGetUrl Private strVersion Private strFormat Private strSign_Method Private

TaoApiRecord,strapp_key,strsecretCode,strpid,strPage_Size,strMethod,strFields,strSort,strPage_No,strKeyword

Private Sub Class_Initialize()

strGetUrl = \ strVersion = \ strFormat=\ strSign_Method=\ TaoApiRecord =

Array(\thod=\ End Sub

Private Sub Class_Terminate() End Sub '定义的方法

Public Sub Information() End Sub

Public Property Let setapp_Key(ByVal app_Key) ArrayList \ End Property

Public Property Let setsecretCode(ByVal secretCode) strsecretCode=secretCode End Property

Public Property Let setpid(ByVal pid) ArrayList \ End Property

Public Property Let setPage_Size(ByVal Page_Size) ArrayList \ End Property

Public Property Let setMethod(ByVal method) ArrayList \ End Property

Public Property Let setFields(ByVal fields) ArrayList \ End Property

Public Property Let setSort(ByVal sort) ArrayList \ End Property

Public Property Let setPage_No(ByVal Page_No) ArrayList \ End Property

Public Property Let setCid(ByVal Cid) ArrayList \ End Property

Public Property Let setKeyword(ByVal Keyword) strKeyword=YuZhe_UrlEncode(Keyword,936) ArrayList \ End Property

'数组中增增加

Function ArrayList(tag,value) arrLenth=UBound(TaoApiRecord)

REDIM Preserve TaoApiRecord(arrlenth+1) TaoApiRecord(arrlenth+1)=tag&\ ArrayList=TaoApiRecord End Function

'============数组冒泡排序===================== Function ArraySort(ary) KeepChecking = TRUE

Do Until KeepChecking = FALSE KeepChecking = FALSE For I = 0 to UBound(ary) If I = UBound(ary) Then Exit For If ary(I) > ary(I+1) Then FirstValue = ary(I) SecondValue = ary(I+1) ary(I) = SecondValue ary(I+1) = FirstValue KeepChecking = TRUE End If Next Loop

ArraySort = ary End Function

'按要求进行排序组织传递的参数 Function zzBokeOrder(ary) zzBokeOrder=\

MyArray = ArraySort(ary)

For I = Lbound(MyArray) to Ubound(MyArray) If zzBokeOrder=\ zzBokeOrder =MyArray(I) Else

zzBokeOrder =zzBokeOrder&\ End If Next End Function

'组参+签名函数

function createStrParam()

signRecord = zzbokeOrder(TaoapiRecord)

For I = Lbound(TaoapiRecord) to Ubound(TaoapiRecord) arry=split(TaoapiRecord(I),\

If URLsignRecord=\

URLsignRecord =arry(0)&\ Else

if arry(0)=\

URLsignRecord =URLsignRecord&\ else

URLsignRecord =URLsignRecord&\ end if End If Next

sign=Replace(Replace(signRecord,\ sign=ucase(md5(strsecretCode&sign&strsecretCode)) '给taobao传递的参数

createStrParam=URLsignRecord &\

end function

'============httpget=========== dim gXmlHttpVer Function getXmlHttpVer()

dim i,xmlHttpVersions,xmlHttpVersion getXmlHttpVer=false

xmlHttpVersions=Array(\\ for i=0 to ubound(xmlHttpVersions) xmlHttpVersion=xmlHttpVersions(i)

if isInstallObj(xmlHttpVersion) then getXmlHttpVer=xmlHttpVersion:gXmlHttpVer=xmlHttpVersion: Exit Function next End Function

Function tryXmlHttp() dim

i,ah:ah=array(\HTTP.2.0\LHTTP.6.0\

\ On Error Resume Next for i=0 to UBound(ah)

SET tryXmlHttp=Server.CreateObject(ah(i))

if err.number=0 then:gXmlHttpVer=ah(i):tryXmlHttp.setTimeouts 2000,20000,20000,180000:err.clear:Exit Function:else:err.clear:end if next

本文来源:https://www.bwwdw.com/article/iex6.html

Top