本文轉自delphi盒子:http://www.2ccc.com/article.asp?articleid=6121 感謝作者
廢話先不說,
先用D2007寫一個Demo,
演示一下調用淘寶的接口,讓大家心里有個數,
很簡單,新建一個工程,拖一個IDHttp,Button和Memo到窗體上去
然后在這個Button的OnClick事件中寫入如下代碼:
[delphi] view plaincopy
procedureTfrmMain.btnCallTopAPIClick(Sender: TObject);
var
AHttpRequestURL:String;
AHttpReponseContent:TMemoryStream;
begin
AHttpReponseContent:=TMemoryStream.Create;
try
IdHTTP1.ReadTimeout:=0;
IdHTTP1.AllowCookies:=True;
IdHTTP1.ProxyParams.BasicAuthentication:=False;
IdHTTP1.ProxyParams.ProxyPort:=0;
IdHTTP1.Request.ContentLength:=-1;
IdHTTP1.Request.ContentRangeEnd:=0;
IdHTTP1.Request.ContentRangeStart:=0;
IdHTTP1.Request.ContentType:='application/x-www-form-urlencoded';
IdHTTP1.Request.Accept:='text/html, */*';
IdHTTP1.Request.BasicAuthentication:=False;
IdHTTP1.Request.UserAgent:='Mozilla/3.0 (compatible; Indy Library)';
IdHTTP1.HTTPOptions:=[hoForceEncodeParams];
AHttpRequestURL:='http://gw.api.tbsandbox.com/router/rest?'
+'sign=5029C3055D51555112B60B33000122D5'
+'×tamp=2011-07-01+13%3A52%3A03'
+'&v=2.0'
+'&app_key=test'
+'&method=taobao.user.get'
+'&partner_id=top-apitools'
+'&format=json'
+'&nick=%E5%95%86%E5%AE%B6%E6%B5%8B%E8%AF%95%E5%B8%90%E5%8F%B717'
+'&fields=nick,location.state,location.city';
IdHTTP1.Get(AHttpRequestURL,AHttpReponseContent);
AHttpReponseContent.Position:=0;
Self.Memo1.Lines.LoadFromStream(AHttpReponseContent);
finally
AHttpReponseContent.Free;
end;
end;
然后保存,按F9運行,
點擊按鈕之后的結果如下:
如上圖所示,Memo中的字符串就是調用淘寶接口所返回的結果字符串:
{"error_response":{"code":25,"msg":"Invalidsignature"}
我來解釋下這一段Json格式的字符串的意思:
error_response表示調用淘寶API出錯了
"code":25表示出錯代碼是25
"msg":"Invalidsignature"表示出錯的消息是無效的簽名
好了,這個Demo就算結束了,
調用淘寶API的過程就是先准備好HTTP請求的URL,
然后向服務器發送請求,
獲取服務器返回的結果。
基本上各類開放平台現成的SDK都是沒有Delphi語言的。
所以,一般遇到開放平台的接口開發,難免會有些心慌哈。
不過,只要仔細看官方的API文檔(這是重點哈),
以及參考其他語言的SDK源代碼,仔細的研究,花費些許心思與精力,
就會弄出個所以然。
像我去年搞新浪微博開放平台的接口時,參考的就是.NET的代碼。
我在這里只是大致講一下淘寶接口的開發步驟,
適合剛接觸淘寶接口開發的新人,
因為剛開始學習新的東西總會有些茫然,無從下手。
先提一下淘寶開放平台的首頁地址:
http://open.taobao.com/index.htm
首頁(圖):
淘寶開放平台的官方文檔中心地址:
http://open.taobao.com/doc/index.htm?spm=0.0.0.5.oluaZ6
你在文檔中心可以找到你所需要的資料
文檔中心(圖):
那下面,我開講嘍!
一、創建應用
要想使用淘寶接口,必須得創建一個淘寶應用,
我舉一個我自己的淘寶應用作為例子:
應用的圖標:圖標隨便,我用的是本人的頭像,哈哈
應用的名稱:DelphiTaoBaoAPI
應用的標簽:在線訂購應用
應用的AppKey:21235727
應用的流量:5000次/天
應用的標簽是一個很重要的概念,
應用標簽的官方文檔地址:
http://open.taobao.com/doc/detail.htm?id=101125
應用的標簽指定了應用的功能類型以及所具有的權限
有以下幾種類型(圖):
我在這里介紹一下各個應用標簽的功能介紹:
1.在線訂購應用:為賣家提供店鋪后台管理/營銷工具,在線訂購應用實現賣家管理需求,解決店鋪管理/營銷遇到的各種問題,包括批量處理工具、績效管理類、店鋪營銷等。
2.店鋪模塊應用:嵌入到賣家店鋪前台的模塊,店鋪模塊應用主要用於提升買家購物體驗。
3.阿里旺旺插件:基於旺旺賣家版的拓展工具,阿里旺旺插件能有效幫助賣家提升效率,便於管理和操作訂單,會員,營銷等。
4.服務商后台系統:為大型賣家提供大型店鋪后台管理系統,如CRM,ERP等;或者您作為托管服務商,希望自主研發產品給自己店鋪及托管店鋪使用
5.質檢品控應用:作為第三方質檢機構/公司在線提供質檢報告審核、商品質檢、驗廠等品控服務
6.站內買家應用:在應用中心,為淘寶站內買家提供生活類服務、導購工具和游戲等
7.無線買家應用:為無線端買家提供商品導購服務
8.網站接入:為淘寶站外買家提供商品導購服務,包括淘客網站、B2C外店、海外代購等網站類應用
9.商家后台系統:具有開發能力的商家,希望自主開發工具/軟件/系統,用於自身店鋪經營所用
10.不具備開發能力的商家:不具備開發能力,希望使用第三方軟件
創建一個新應用的官方文檔地址:
http://open.taobao.com/doc/detail.htm?id=66
好了,接下來,我們開始創建應用了
1. 打開淘寶開放平台的首頁地址:http://open.taobao.com/index.htm,點擊加入開放平台,或者點擊開發者中心。
2.使用淘寶賬戶登錄,淘寶賬戶需要通過實名認證
3. 填寫基本信息
4. 提交后成為開放平台的開發者
5.在個人的淘寶網開放平台首頁地址:http://my.open.taobao.com/isv/index.htm中點擊創建新應用按鈕
6.填寫應用名稱,選擇應用標簽
7.查看應用的appkey和appsecret,填寫應用詳情
8.點擊保存,可以進行安全掃描,掃描完成后沒有高危漏洞才能申請上線
9.查看應用列表
10.應用管理界面說明
二、調用淘寶接口(TopAPI)
淘寶API支持的調用方法有兩種,分別是:
1.Http調用方式
2.Https免簽名調用方式
其實這兩種方法的區別就在於驗證方式,
第一種方法使用類似於OAUTH 1.0的驗證
第二種使用OAUTH 2.0的驗證
在這里我講的是Http調用方式
Http調用方式的官方文檔地址:
http://open.taobao.com/doc/detail.htm?spm=0.0.0.30.vH5kTk&id=111
我在這里再講一下淘寶的應用運行環境介紹
TOP提供給ISV(獨立軟件開發商)三種測試環境:沙箱環境,正式環境,線上環境
1.沙箱環境
沙箱環境是淘寶開放平台(TOP)提供給獨立軟件開發商(ISV)的測試環境。數據完全獨立,大部分API已經部署到該環境中供ISV進行API的功能測試,對與APP的調用量無限制,但獲取大批量數據時,超時率會較線上環境更高。
沙箱環境調用接口提交地址:http://gw.api.tbsandbox.com/router/rest
沙箱容器地址:http://container.api.tbsandbox.com/container
2.正式測試環境
淘寶正式測試環境是淘寶開放平台(TOP)提供給獨立軟件開發商(ISV)的線上試運行環境。正式測試環境下的數據均是線上的真實淘寶數據。ISV可以在正式測試環境下測試TOP接口的功能,但受到接口調用次數及權限的限制,即一個應用的調用頻率為5000次/天,並且根據應用標簽不同,能調用的接口也不同,但是所有API文檔中標識為開放的V均可以調用。
容器地址:http://container.open.taobao.com/container
調用接口提交地址:http://gw.api.taobao.com/router/rest
3. 線上環境
淘寶線上環境是ISV開發完成之后正式上線或上架運行使用的環境。線上環境下接口調用的數據是真實的淘寶數據,根據應用標簽不同,每個應用將受到接口調用次數及流量的限制。
容器地址:http://container.open.taobao.com/container
調用接口提交地址:http://gw.api.taobao.com/router/rest
好了,接下來我講調用API中最關鍵的一步了,
就是准備好所要調用API的請求URL
我以在沙箱環境中調用taobao.user.get接口來舉例
taobao.user.get這個接口的作用是得到用戶的信息,
這個API的官方文檔的地址是:
http://api.taobao.com/apidoc/api.htm?spm=0.0.0.184.NKWt50#categoryId:1-apiId:1
要調用這個接口,需要的系統級別輸入參數有:
系統級別輸入參數是調用每個API都需要的參數
method:API接口名稱。
session:TOP分配給用戶的SessionKey,需要通過用戶登陸授權獲取。
(有些接口不需要這個參數,比如taobao.user.get這個接口,如果調用接口的時候沒有加入這個參數,那么返回用戶的基本的公開信息,如果加入了這個參數,那么返回用戶的所有信息,包括隱私的信息)
timestamp:時間戳,格式為YYYY-MM-dd HH:MM:SS,例如:2008-01-25 20:23:30。淘寶API服務端允許客戶端請求時間誤差為10分鍾。
format:可選,指定響應格式。默認xml(表示不傳入format參數的時候,接口調用默認返回xml格式的字符串),目前支持格式為xml,json。
app_key:TOP分配給應用的AppKey。
v:API協議版本,可選值:2.0。
sign:API輸入參數簽名結果
sign_method:參數的加密方法選擇,可選值是:md5,hmac。
下面這兩個參數是taobao.user.get這個接口的應用級輸入參數(每個API的應用級輸入參數不同):
fields:需返回的字段列表。可選值:User結構體中的所有字段;以半角逗號(,)分隔。需要用戶授權才能獲取用戶對應的uid和user_id。User結構體的文檔地址:http://api.taobao.com/apidoc/api.htm?spm=0.0.0.184.NKWt50#categoryId:1-apiId:1
nick:可選,用戶昵稱。
以上的這些參數除了sign,其他都是直接可以得到的
所以,需要着重講一下如何得到這個sign參數
sign參數值的算法為:
根據參數名稱將你的所有請求參數按照字母先后順序排序:key + value .... key + value
對除簽名和圖片外的所有請求參數按key做的升序排列, value無需編碼。
例如:將foo=1,bar=2,baz=3 排序為bar=2,baz=3,foo=1
參數名和參數值鏈接后,得到拼裝字符串bar2baz3foo1
淘寶支持MD5和HMAC兩種加密方式
md5:將secretcode(secretcode為應用的AppSecret)同時拼接到參數字符串頭、尾部進行md5加密后,再轉化成大寫,格式是:byte2hex(md5(secretkey1value1key2value2...secret))。
hmac:采用hmac的md5方式,secretcode(secretcode為應用的AppSecret)只在頭部的簽名后再轉化成大寫,格式 是:byte2hex (hmac(key1value1key2value2...,secret))。
例如:
輸入參數為:
method=taobao.user.get
timestamp=2011-07-0113:52:03
format=json
app_key=test
v=2.0
fields=nick,location.state,location.city
nick=商家測試帳號17
sign_method=md5
按照參數名稱升序排列:
app_key=test
fields=nick,location.state,location.city
format=xml
method=taobao.user.get
nick=商家測試帳號17
sign_method=md5
timestamp=2011-07-0113:52:03
v=2.0
拼裝字符串:
連接參數名與參數值,並在首尾加上secretcode(secretcode為應用的AppSecret)(這里假設appsecret=test)值:
testapp_keytestfieldsnick,location.state,location.cityformatxmlmethodtaobao.user.getnick商家測試帳號17sign_methodmd5timestamp2011-07-0113:52:03v2.0test
生成簽名:
32位大寫MD5值->5029C3055D51555112B60B33000122D5
拼裝URL:
將所有參數值轉換為UTF-8編碼,然后拼裝,通過瀏覽器訪問該地址,即成功調用一次接口
http://gw.api.tbsandbox.com/router/rest?sign=5029C3055D51555112B60B33000122D5×tamp=2011-07-01+13%3A52%3A03&v=2.0&app_key=test&method=taobao.user.get&partner_id=top-apitools&format=xml&nick=%E5%95%86%E5%AE%B6%E6%B5%8B%E8%AF%95%E5%B8%90%E5%8F%B717&fields=nick,location.state,location.city
注意事項:
1.所有的請求和響應數據編碼皆為utf-8格式,url里的所有參數值請做urlencode編碼。如果請求的Content-Type是 application/x-www-form-urlencoded, http body里的所有參數值也做urlencode編碼;如果是multipart/form-data格式,每個表單字段的參數值無需編碼,但每個表單字段 的charset部分需要指定為utf-8
2.商品等公開信息查詢類API建議用get請求,交易等隱私信息查詢和修改類API建議用post請求
三、使用接口
Delphi版本淘寶接口我已經放在Google上了,下載地址:
http://code.google.com/p/delphiopenapi/downloads/list
用到的第三方控件有Json的superobject,Zip的VCLUnZip和Http通信的Indy控件。
1.要使用淘寶接口,需要准備淘寶應用的AppKey,AppSecret,以及回調URL
示例如下:
2.獲取用戶授權
用戶使用你的應用,需要對應用進行授權,你的應用才能操作用戶的淘寶數據,像獲取交易列表,商品列表,上下架商品,評價交易等
大部分淘寶的接口使用時需要用戶授權
先將網頁定位到淘寶網針對本應用的授權地址,需要用戶輸入用戶名和密碼
然后淘寶網列出了當前應用的權限,操作范圍,像讀取用戶信息,讀取三個月內的交易記錄
3.接口使用說明
調用我控件中尚未實現的淘寶接口,我寫了一個通用的方法,
為TTaoBaoManager.APIClient(TTaoBaoAPIClient類)
的CustomExecuteAPI方法
[delphi] view plaincopy
//自定義調用API
function CustomExecuteAPI(const AAPIMethod:String;
const AParamNames:array of String;
const AParamValues:array of Variant;
const AFormat:TCallAPIFormat;
const ANeedSessionParam:Boolean;
const AHttpRequestMethod:TCallAPIHttpRequestMethod;
var AHttpResponse:String
):Boolean;
參數AAPIMethod為接口名稱:如taobao.user.get
參數AParamNames為參數名列表:如fields
參數AParamValues為參數值列表:如nick,location.state,location.city
參數AFormat為響應格式:若為Json時,返回字符串為Json格式的,若為Xml時,返回字符串為Xml格式
參數ANeedSessionParam為是否需要授權:如taobao.user.get這個接口,獲取用戶的所有信息時,需要用戶授權
參數AHttpRequestMethod為Http的Get方法
參數AHttpResponse為接口返回的字符串
執行之后,大家可以自己解析返回的字符串來獲取所需要的數據
4.接口功能示例
獲取出售中的商品列表,以及單個商品的詳細信息
獲取三個月內的交易記錄,每個交易的詳細信息,交易增量(交易更新,比如新增了一筆交易,修改了交易狀態等),評價交易
我就講到這里了,如果有講的不對請指正,有講的不好,請指正
有不夠詳細,我指正,有想到不足的,我有空會加上去。
聯系我:Q452330643