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

很简单,新建一个工程,拖一个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淘宝接口开发一例(tmall.items.discount.search),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#根据淘宝接口网址获取客户端访问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. 关于淘宝的数据来源,针对做淘宝客网站的淘宝api调用方法

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

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

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

随机推荐

  1. 为何gpio_to_irq不能静态使用?【转】

    之前在调试传感器模块的时候发现,在结构体声明的时候irq成员使用gpio_to_irq会报错,而动态使用的话就没有问题.就对gpio_to_irq为什么不能静态使用产生了疑问.恰巧最近又有朋友遇到了同 ...

  2. WPF的EventAggregator的发布和订阅

    EventAggregator是Prism中专门处理ViewModel与ViewModel之间事件传递的类对象,它提供了针对事件的发布方法和订阅方法,所以可以非常方便的来管理事件.下面分几步来实现相关 ...

  3. 【Android】隐藏底部虚拟按键

    Google的官方文档是: https://developer.android.com/training/system-ui/navigation.html#behind 示例代码 1 View de ...

  4. wpf 用户自定义事件传参

    //自定义传参 ,对外联系的参数 public class ImageZoomChangedEventArgs : RoutedEventArgs { /// <summary> /// ...

  5. .NetCore中使用ExceptionLess 添加操作日志

    上一篇文章已经扩展了日志,下面我们在结合下处理操作日志 通常我们想到操作日志 可能想到的参数可能有 模块 方法 参数内容 操作人 操作时间 操作 Ip 下面我们就来结合这些信息添加操作日志 如果要在代 ...

  6. 第二届CCF软件能力认证

    1. 相邻数对 问题描述 给定n个不同的整数,问这些数中有多少对整数,它们的值正好相差1. 输入格式 输入的第一行包含一个整数n,表示给定整数的个数. 第二行包含所给定的n个整数. 输出格式 输出一个 ...

  7. Qt QByteArray或者Char转十六进制 QString

    1.QByteArray转十六进制 QByteArray buff = sp->readAll(); qDebug() << buff.toHex() << " ...

  8. wfst的compose算法

    介绍一些compose算法,以及这部分的代码实现. 原理部分参考: 走进语音识别中的 WFST(二) 可以看下示例图: 我们先来看一下 Composition 的效果,图(a)和图(b)Composi ...

  9. CSS 浮动和清除

    CSS 浮动和清除浮动 在写页面布局的过程中,浮动是大家经常用的属性.在好多的排版布局中都是用的的浮动比如说下面这些地方都是应用到了浮动. 在我学习浮动的时候可是熬坏了脑筋,在这里我分享一下我对浮动这 ...

  10. mybatis generator修改默认生成的sql模板

    相关连接: mybatis-generator扩展教程系列 -- 自定义sql xml文件 git项目地址