淘宝接口 TopAPi

时间:2022-09-03 08:39:11

演示一下调用淘宝的接口,让大家心里有个数,

很简单,新建一个工程,拖一个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.接口功能示例

获取出售中的商品列表,以及单个商品的详细信息

获取三个月内的交易记录,每个交易的详细信息,交易增量(交易更新,比如新增了一笔交易,修改了交易状态等),评价交易

淘宝接口 TopAPi的更多相关文章

  1. jquery使用淘宝接口跨域查询手机号码归属地实例

    <h1>手机号码归属地查询</h1>    <div class="outer">        <p>请输入手机号码</p& ...

  2. 淘宝接口实现ip归属地查询

    <?php header('content-type:text/html;charset=utf-8'); /*获取当前ip归属地 调用淘宝接口 */ function get_ip_place ...

  3. PHP学习笔记13淘宝接口开发一例&lpar;tmall&period;items&period;discount&period;search&rpar;&comma;PHP

    程序设计,因为接口是有请求次数限制的,正式接口也只有2W次每天的请求次数,所以我们需要把从接口返回的数据缓存起来. 采用的接口是http://api.taobao.com/apidoc/api.htm ...

  4. 通过淘宝接口免费获取IP地址信息

    1.获取互联网访问IP信息 一般获取互联网访问的IP的相关信息一般都是收费接口,免费的接口不多,我使用到一个接口如下: http://ip.taobao.com/service/getIpInfo.p ...

  5. 使用 淘宝 接口,根据公网ip 获取地理信息

    1.  源码,点击查看 1 import java.io.BufferedReader; 2 import java.io.IOException; 3 import java.io.InputStr ...

  6. C&num;根据淘宝接口网址获取客户端访问IP和网络运营商

    网络运营商会为每台联网的电脑分配公网IP,如何获取它们?? 话不多说直接上代码: using System; using System.Collections.Generic; using Syste ...

  7. 淘宝接口-IP返回运营商

    #!/usr/bin/evn python# -*- coding:utf-8 -*-import jsonimport urllib2import datetimeimport reimport Q ...

  8. 关于淘宝的数据来源&comma;针对做淘宝客网站的淘宝api调用方法

    上次写了个淘宝返利模式的博客,直接被移除首页,不知道何故啊.可能是真的跟技术不太刮边. 众所周知,能够支撑一个网站运营的最基础不是程序写的多么好.也不是有多么牛X的运营人员,最主要的是数据,如果没有数 ...

  9. 淘宝开放平台TOP SDK调用对接淘宝或天猫

    如果在淘宝/天猫上开了网店,用户自己也有一套自己的管理平台,这时可能会考虑和淘宝进行数据对接.这就需要考虑调用阿里提供的开发接口来推送和接收数据. 对接的方式有2种,一种是通过http接口,另外一种是 ...

随机推荐

  1. &lbrack;R&rsqb;R下as&period;Date&lpar;&rpar;函数的坑

    问题描述: 在本地使用as.Date()函数从POSIXct类型中提取date时,出现了日期不一致的错误.导致处理数据时,总是出问题. 还好被领导发现数据有误,不然这个bug不知道还要潜伏多久.尽管如 ...

  2. Babelfish &lpar;STL&rpar;

    题目描述 You have just moved from Waterloo to a big city. The people here speak an incomprehensible dial ...

  3. Java经典编程题50道之二十四

    有5个人坐在一起,问第5个人多少岁,他说比第4个人大2岁.问第4个人岁数,他说比第3个人大2岁. 问第三个人,他说比第2人大两岁.问第2个人, 说比第一个人大两岁.最后问第一个人,他说是10岁. 请问 ...

  4. Android的自动完成文本框-android学习之旅(二十六)

    AutoComplicatedTextView简介 AutoComplicatedTextView是从EditText派生出来的,可以使用EditText的所有的属性.当用户输入一定的内容后,会有提示 ...

  5. &lbrack;Swift&rsqb;LeetCode1025&period; 除数博弈 &vert; Divisor Game

    Alice and Bob take turns playing a game, with Alice starting first. Initially, there is a number N o ...

  6. Netty 出站缓冲区 ChannelOutboundBuffer 源码解析(isWritable 属性的重要性)

    目录: 前言 ChannelOutboundBuffer 介绍 addMessage 方法 addFlush 方法 flush0 方法 缓冲区扩展思考 总结 每个 ChannelSocket 的 Un ...

  7. WebClient 通过get和post请求api

    //get 请求        string url = string.Format("http://localhost:28450/api/values?str1=a&str2=b ...

  8. bzoj2026&colon; &lbrack;SHOI2009&rsqb;Coin

    Description Constantine刚结束在MySky Island的度假,正准备离开的时候,他想送给她的好朋友YY一份特别的礼物——MySky Island上特别的手工艺品宝石纪念币.宝石 ...

  9. maven摘除jar包中配置文件

    <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-p ...

  10. 福大软工&&num;183&semi;第十一次作业-Alpha事后诸葛亮

    福大软工·第十一次作业-Alpha事后诸葛亮 组长博客链接 本次作业博客链接 项目Postmortem 模板 设想和目标 我们的软件要解决什么问题?是否定义得很清楚?是否对典型用户和典型场景有清晰的描 ...