淘宝 TOP 平台Open API入门篇
淘宝 TOP 平台Open API入门篇
[未经本人许可 严禁转载]
前不久刚写了一篇关于淘宝Open API的入门教程,具体见http://blog.csdn.net/hereweare2009/archive/2009/05/28/4222625.aspx ,今天刚刚得知,淘宝也发布了自己的平台---Taobao Open Platform,简称TOP平台。此前淘宝的Open API是通过alisoft的SIP平台对外开放的。具体的TOP信息去官网看看,http://open.taobao.com/ 。我也没仔细看,我比较急切,我就直接在我上一篇的Blog的代码上,尝试改造走TOP平台调用,整个过程不到10分钟,也许俺对alisoft的SIP机制比较清楚吧。我个人觉得整个调用过程基本上和alisoft的SIP没啥区别,呵呵!
TOP的OpenAPI与alisoft的SIP一样,分为三类:apiType=1表示调用时需要ISV(第三方开发者)签名和认证;apiType=2表示调用时需要ISV签名和认证,同时需要用户授权确认;apiType=3表示:调用时需要ISV签名和认证,可选用户授权确认(授权后可获取公开信息) 。taobao.user.get是属于可选用户授权。未经用户授权只能获得用户的公开信息。整个过程与SIP不同的是Session的生成,具体见:http://wiki.open.taobao.com/index.php/%E5%A6%82%E4%BD%95%E5%8F%96%E5%BE%97session%EF%BC%9F ,下面代码有说明。其它的我啥也不懂,也不罗嗦了,直接贴代码:
import java.io.IOException;
import java.security.MessageDigest;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.TreeMap;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.NameValuePair;
import org.apache.commons.httpclient.methods.PostMethod;
import sun.misc.BASE64Decoder;
/**
* TOP Open API开发实例
* 今天得知淘宝TOP平台发布
* 发了几分钟时间 将上次alisoft 平台的demo改了下
* 测试一把,呵呵 alisoft的SIP调用见上一篇Blog:
* http://blog.csdn.net/hereweare2009/archive/2009/05/28/4222625.aspx
*/
public class TOPDemo {
public static void main(String... args)
{
String TopUrl = "http://gw.sandbox.taobao.com/router/rest?";
//组装请求参数
TreeMap<String, String> apiparamsMap = new TreeMap<String, String>();
apiparamsMap.put("method", "taobao.user.get");
//关键是获取session,先请求授权URL:http://open.taobao.com/isv/authorize.php?appkey=alipublic01
// 就会获得淘宝TOP授权码,点复制按钮,复制授权码,
// 再访问http://container.sandbox.taobao.com/container?authcode=授权码
// 将上面的“授权码”替换出刚才授权的授权码,请求该url,则在结果中top_session即为所要的结果
apiparamsMap.put("session", "*****");//替换为你自己的session
apiparamsMap.put("api_key", "alipublic01");//我使用的是测试帐号alipublic01
apiparamsMap.put("timestamp", new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
apiparamsMap.put("v", "1.0");
apiparamsMap.put("fields", "created,nick,sex,location,buyer_credit.level,last_visit");
apiparamsMap.put("nick", "tbtest520");
String sign = sign(apiparamsMap, "test");//alipublic01的密钥是test
apiparamsMap.put("sign", sign);
// 向TOP平台测试环境发起调用
System.out.println(requestTOPApi(TopUrl, apiparamsMap));
}
/**
* 请求淘宝TOP平台OpenAPI服务
* @param url TOP平台入口
* @param params 请求参数
* @return 请求结果
*/
public static String requestTOPApi(String url, Map<String, String> params) {
HttpClient client = new HttpClient();
PostMethod postMethod = new PostMethod(url);
try {
NameValuePair[] postData = new NameValuePair[params.size()];
Iterator<String> iters = params.keySet().iterator();
int i = 0;
while (iters.hasNext()) {
String key = (String) iters.next();
postData[i] = new NameValuePair(key, params.get(key).toString());
i++;
}
postMethod.setRequestBody(postData);
client.executeMethod(postMethod);
return postMethod.getResponseBodyAsString();
} catch (Exception ex) {
ex.printStackTrace();
} finally {
if (postMethod != null)
postMethod.releaseConnection();
}
return null;
}
private static String byte2hex(byte[] b) {
StringBuffer hs = new StringBuffer();
String stmp = "";
for (int n = 0; n < b.length; n++) {
stmp = (java.lang.Integer.toHexString(b[n] & 0XFF));
if (stmp.length() == 1)
hs.append("0").append(stmp);
else
hs.append(stmp);
}
return hs.toString().toUpperCase();
}
/**
* 把经过BASE64编码的字符串转换为Map对象
*/
public static Map<String, String> convertBase64StringtoMap(String str) {
if (str == null)
return null;
BASE64Decoder decoder = new BASE64Decoder();
String keyvalues = null;
try {
keyvalues = new String(decoder.decodeBuffer(str));
} catch (IOException e) {
// log.error(str + "不是一个合法的BASE64编码字符串");
return null;
}
if (keyvalues == null || keyvalues.length() == 0)
return null;
String[] keyvalueArray = keyvalues.split("&");
Map<String, String> map = new HashMap<String, String>();
for (String keyvalue : keyvalueArray) {
String[] s = keyvalue.split("=");
if (s == null || s.length != 2)
return null;
map.put(s[0], s[1]);
}
return map;
}
/**
* 签名方法,用于生成签名。生成签名的描述见注3
*
* @param params
* 传给服务器的参数
* @param secret
* 分配给您的APP_SECRET
*/
private static String sign(TreeMap<String, String> params, String secret) {
String result = null;
if (params == null)
return result;
Iterator<String> iter = params.keySet().iterator();
StringBuffer orgin = new StringBuffer(secret);
while (iter.hasNext()) {
String name = (String) iter.next();
orgin.append(name).append(params.get(name));
}
try {
MessageDigest md = MessageDigest.getInstance("MD5");
result = byte2hex(md.digest(orgin.toString().getBytes("utf-8")));
} catch (Exception ex) {
throw new java.lang.RuntimeException("sign error !");
}
return result;
}
}
执行结果如下:
<?xml version="1.0" encoding="utf-8" ?>
<rsp>
<user>
<buyer_credit><level>0</level></buyer_credit>
<created>2008-03-09 02:19:35</created>
<last_visit>2009-04-16 14:57:14</last_visit>
<location>
<city><![CDATA[杭州]]></city>
<state><![CDATA[浙江]]></state>
</location>
<nick><![CDATA[tbtest520]]></nick>
<sex><![CDATA[m]]></sex>
</user>
</rsp><!--xvm169.sqa-->
永久链接: http://blog.csdn.net/hereweare2009/archive/2009/06/22/4290239.aspx
淘宝 TOP 平台Open API入门篇相关推荐
- SN-TOP架构的初步探讨——谈淘宝TOP平台的升级
SN-TOP架构的初步探讨 --谈淘宝TOP平台的升级 文章全文将于12月10日发布,敬请关注!
- 如何快速对接淘宝开放平台API接口(淘宝店铺订单明文接口,淘宝店铺商品上传接口,淘宝店铺订单交易接口)
很多电商系统的需求场景,都面临淘宝开放平台的接入,但这也是让不少开发者头疼的问题. 那么,如果快速接入呢?东哥的对接经验相信可以帮到不少开发者,快速接入.少走弯路. 1.公共参数 名称 类型 必须 描 ...
- 关于淘宝开放平台API的session失效问题解决
前几天发现淘宝开放平台API突然无法调用了,一直在提示出错,提示的错误信息为:Invalid session. 众所周知淘宝开放平台的API接口调用需要三个Key:appKey(合作方标识), sec ...
- 淘宝开放平台php-sdk测试
今天想使用淘宝开放平台的API获取商品详情,可是以前一直没使用过,看起来有点高深莫测,后然看开发入门,一步一步,还真有点感觉了,然后看示例,还真行了,记下来以后参考.其中遇到问题,后然解决了. 因为 ...
- 关于淘宝开放平台的战略规划
关于淘宝开放平台的战略规划 --知识产权保护,若需引用,请注明来源. 需要回答的三大问题: 1) 淘宝开放平台怎么发展? 2) 淘宝开放平台究竟在什么模式下才能突破? 3) 淘宝开放平台博客大赛 ...
- 淘宝TOP程序API接口接入教程--入门篇
作为一个中小型网站开发者,淘宝API的开放大大缩短了网站的开发周期和运作效率,面对海量的数据,开发者只要仔细阅读开发文档,熟悉相应的接口,就可以把数据导入自己的网站,这样就不必望洋兴叹了. 目前淘宝T ...
- 淘宝API学习之道:淘宝TOP之API接口接入教程
作为一个中小型站点开发人员,淘宝API的开放大大缩短了站点的开发周期和运作效率.面对海量的数据.开发人员仅仅要细致阅读开发文档,熟悉对应的接口,就能够把数据导入自己的站点,这样就不必望洋兴叹了. 眼下 ...
- 关于淘宝API的详细说明(淘宝开放平台API揭秘)
自淘宝开放平台Beta公测开始,陆续开放了上百次个API,这些API涵盖了淘宝基本业务,截止发日志当天开放平台API每天的调用量可是说是天文数字. 作为TOP开发者的您对 于淘宝平台-API可以信手拿 ...
- 淘宝开放平台API族
淘宝作为电子商务市场的超级航母,在电子商务基础服务领域,经过多年的沉淀和革新,围绕电子商务生态链的持续整合,形成了以营销.支付.物流和售后为核心的基础服务体系. 淘宝是一个电子商务的江湖,从整合核心的 ...
最新文章
- 13-flutter 加载图片
- Lispbox的简单配置
- 位bit、字节byte、kb、mb
- Python 中的 os 模块常见方法?
- postgresql 怎么读_大数据采集和抽取怎么做?这篇文章终于说明白了!
- sqlite java_如何在Java中使用Sqlite
- 【BZOJ1196】公路修建问题,二分+最小生成树
- wpf button无边框_中国式新房无玄关?客厅真不缺这点面积!
- 火车票放票时间 潜规则
- 数据库系统:NoSQL与SQL的区别
- 数字电路课程设计--电子钟实验报告
- 简单实现DButil工具类
- 阿里月薪6W招程序员,看到要求我傻眼了!
- 在使用百度地图API时,浏览器报错
- css3中的属性选择器以及新增伪类
- 信息安全工程第四章网络安全体系与网络安全模型要点小结
- Erlang开源20周年:这门编程语言见证了互联网的技术成长
- 贪心算法or背包问题
- C#迭代器的详细用法
- ros ubuntu 卸载_ROS安装与卸载
热门文章
- 从2G到5G, 基站天线过去与未来
- redis(二)使用redis工具类
- 计算机组成(超详细)+附带思维导图
- 报名照片太大怎么压缩?压缩图片到固定大小的方法
- 红帽扩展存储系列产品市场分销路线
- 20171001-构建之法:现代软件工程-阅读笔记2
- 温度报警程序c语言设计,单片机温度报警器与时钟显示C程序和原理图
- ionic4-ts 字符串中获取汉字与去掉汉字
- 西澳推出两大创新型住宅太阳能加存储项目
- win8 64 mysql下载教程_windows下安装mysql-8.0.18-winx64的教程(图文详解)