zoukankan      html  css  js  c++  java
  • 淘宝网Open API 入门教程

    淘宝网Open API 入门教程

    淘宝网的Open API开放将近一年了,越来越多的人(包括已工作的和在校的大学生)都在使用淘宝的Open API,有不少ISV应用已上架盈利了。我也使用淘宝的Open Api也大半年了。不过了,由于阿里软件的文档比较的乱,让很多初学者分不清头绪(注:淘宝网的Open API是开放在阿里软件的一个平台上,是什么服务集群平台吧)。当然了,在中国,能够将自己的服务资源开放出来给第三方使用,特别是淘宝网这种大型商业网站来说,阿里巴巴的这种分享精神和开放的胸怀还是令人佩服的。因此在使用Open API过程中,我们如果觉得资料不是很充分,也不要过多的抱怨,开放的同时意味着责任。呵呵!

    在这了,趁端午节放假,将我使用淘宝Open api的心得分享出来,先写一篇简单的入门教程,也算是分享和开放吧。

    通过阅读阿里软件提供的文档,我们对如何调用淘宝的Open API有了基本的了解。阿里软件Open API平台即服务集成平台SIP相关的文档链接如下(在使用SIP平台上的Open API还是先要了解下该平台的相关策略如安全策略,访问控制策略等):

    http://wiki.isv.alisoft.com/index.php/%E6%9C%8D%E5%8A%A1%E9%9B%86%E6%88%90%E5%B9%B3%E5%8F%B0

    服务集群平台就不多唠叨了,去上面的文档地址去看看。我就简要的讲讲就我所知道的一些值得注意的地方:

    1.                  淘宝的Open API每分钟访问的次数是有限制的,好像是400次/分钟,即一个应用访问任何一个淘宝的API,一分钟内最多只能访问400次;

    2.                  在次数方面,除了上面的控制外,还有日访问次数控制。如果你的应用是上架的,则日访问量没有限制;如果你的应用没有上架,那么一天之内,你访问淘宝的Open API的次数累计起来不能超过1000次。不要有意见哦,人家的资源也是有限的,而且还是免费的。

    3.                  服务集成平台的api的安全级别分为四类:无安全策略校验;签名校验;用户授权校验(包含签名校验);可选用户授权校验(包含签名校验)。淘宝的Open API大多都是需要用户授权的。所谓用户授权就是应用软件在操作用户的淘宝数据时,就需要用户授权。如淘宝卖家在使用店铺管理软件维护自己的店铺时,淘宝网就需要淘宝卖家对该店铺软件进行授权,只有授权了,店铺管理软件才能操作淘宝卖家的数据。

    4.                  授权除了上面所描述的外,授权还有时效性。就是授权是有期限的,现在淘宝授权一次的最大有效时效为一个小时。如果在一个小时内,没用调用任何淘宝的API,则授权过期了,需要重新授权。而对于未上架的应用,授权时效内不管有没有调用Open API,授权期限过后就需要重新授权。看来,上架的应用还是有相当大的空间优势。

    其他的就不多唠叨了,还没有在阿里软件注册应用的,还得先去阿里软件平台注册一个应用,注册成功后,你会得到APP ID及CERT CODE。其中APP ID是用来标记应用,即你注册应用的ID,CERT CODE则是你应用的密钥,在做签名时用。

    下面直接来个demo,感受下淘宝的Open API。我们调用交易类的taobao.trade.get为例,该api文档地址为:http://isp.alisoft.com/apidoc/api/apiIndex.html#isp_taobao-6-281 。可以知道这个api是用户授权,即需要用户授权才可以访问该用户的交易信息。

    源代码如下:


    package org.openapi.taobao;

     

    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.Set;

    import java.util.TreeSet;

     

    import org.apache.commons.httpclient.HttpClient;

    import org.apache.commons.httpclient.NameValuePair;

    import org.apache.commons.httpclient.methods.PostMethod;

     

    public class TaobaoOpenApiDemo {

     

        
    /**

         * 调用淘宝的taobao.trade.get demo,

         * 运行该示例时,你需要将appId,appSecret,tid

         * 这三个参数替换为你自己的,就可以运行该demo

         * 

         * 在第一次运行时 会提醒你登录淘宝进行授权,

         * 授权成功后 再次运行该demo就可以获取指定交易的信息 呵呵

         * 

         * 这只是一个简单的demo,只是为初学者提供方便

         * 有了这个原型 大家就可以各显自己的神通了

         
    */

        
    public static void main(String[] args) {

           

           
    // 淘宝Open API平台即SIP平台的入口

           String sipRequestUrl 
    = "http://sip.alisoft.com/sip/rest"

           String appId 
    = "****"// 在阿里软件平台注册的应用ID,请使用你自己的应用ID

           String appSecret 
    = "******"// 注册的应用的密钥,请使用你自己应用的密钥

           String taobaoApiName 
    = "taobao.trade.get"// 交易类api

           String sessionId 
    = "1234567";//sessionId是isv应用自己生成的字符串

    //确保每个使用该应用的用户各自的sessionId各不相同

           SimpleDateFormat formater 
    = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

     

           Map
    <String, String> params = new HashMap<String, String>();

           params.put(
    "sip_appkey", appId);

           params.put(
    "sip_apiname", taobaoApiName);

           params.put(
    "sip_timestamp", formater.format(new Date()));

           params.put(
    "sip_sessionid", sessionId);

           params.put(
    "fields""seller_nick,buyer_nick,title,type,created,sid");

           params.put(
    "tid""******"); //请设置你要查询的交易号

           params.put(
    "format""xml");

           params.put(
    "v""1.0");

           params.put(
    "sip_sign", getSign(appSecret, params));

     

           String result 
    = requestOpenApi(sipRequestUrl, params);

           
    if (result != null && result.startsWith("sip_isp_loginurl:")) {

               result 
    = result.replaceAll("&amp;""&");

               System.out.println(
    "打开浏览器,访问下面的URL进行用户授权,授权成功后" +

                      
    ",再次运行该类就可以调用api获取交易信息");

               System.out.println(result.substring(
    "sip_isp_loginurl:".length()));

           } 
    else if (result != null)

               System.out.println(result);

     

        }

     

        
    /**

         * 请求淘宝Open API服务

         * 
    @param url 服务集群平台入口

         * 
    @param params 请求参数

         * 
    @return 请求结果

         
    */

        
    public static String requestOpenApi(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);

               String resultCode 
    = postMethod.getResponseHeader("sip_status")

                      .getValue();

               
    if (resultCode == null || ("".equals(resultCode)))

                  
    return null;

               
    else if ("1004".equals(resultCode))

                  
    return "sip_isp_loginurl:"

                         
    + postMethod.getResponseHeader("sip_isp_loginurl")

                                .getValue();

               
    else if (!"9999".equals(resultCode))

                  
    return resultCode

                         
    + ":"

                         
    + postMethod.getResponseHeader("sip_errormessage")

                                .getValue();

     

               
    return postMethod.getResponseBodyAsString();

     

           } 
    catch (Exception ex) {

               ex.printStackTrace();

           } 
    finally {

               
    if (postMethod != null)

                  postMethod.releaseConnection();

           }

     

           
    return null;

     

        }

     

        
    /**

         * 对所有参数进行签名

         * 
    @param secret APP ID对应的密钥

         * 
    @param params 请求中所有的参数

         * 
    @return 签名

         
    */

        
    public static String getSign(String secret, Map<String, String> params) {

           
    if (secret == null || "".equals(secret) || params == null)

               
    throw new RuntimeException(

                      
    "secret or params is null or blank, please check");

     

           StringBuilder sb 
    = new StringBuilder().append(secret);

           String result 
    = null;

     

           
    try {

               Set
    <String> sortedKeys = new TreeSet<String>();

               sortedKeys.addAll(params.keySet());

               
    for (String key : sortedKeys)

                  sb.append(key).append(params.get(key));

     

               MessageDigest md 
    = MessageDigest.getInstance("MD5");

               result 
    = byteTohex(md.digest(sb.toString().getBytes("utf-8")));

     

           } 
    catch (Exception e) {

               
    throw new RuntimeException(e);

           }

     

           
    return result;

        }

     

        
    public static String byteTohex(byte[] b) {

           StringBuffer sb 
    = new StringBuffer();

           String stmp 
    = "";

     

           
    for (int n = 0; n < b.length; n++) {

               stmp 
    = (java.lang.Integer.toHexString(b[n] & 0XFF));

     

               
    if (stmp.length() == 1)

                  sb.append(
    "0").append(stmp);

               
    else

                  sb.append(stmp);

           }

     

           
    return sb.toString().toUpperCase();

        }

     

    }

     


     

    上面短短的100多行代码只是向初学者展示如何使用淘宝的Open API服务。从代码也可以看到,基于rest的Open Api的确使用起来相当的方便。当然,要想使用好淘宝的Open API,还得好好的阅读淘宝Open Api文档。同时,还需打开自己的思维,使用淘宝的Open Api编写出有创意的应用。早日上架,早日盈利!

    如果大家有什么问题,可以回复本贴,有问必答。大家相互探讨,共同进步。呵呵!

    本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/hereweare2009/archive/2009/05/28/4222625.aspx

  • 相关阅读:
    MOSS中的User的Title, LoginName, DisplayName, SID之间的关系
    如何在Network Monitor中高亮间隔时间过长的帧?
    SharePoint服务器如果需要安装杀毒软件, 需要注意什么?
    如何查看SQL Profiler? 如何查看SQL死锁?
    什么是Telnet
    The name or security ID (SID) of the domain specified is inconsistent with the trust information for that domain.
    Windows SharePoint Service 3.0的某个Web Application无搜索结果
    网络连接不上, 有TCP错误, 如果操作系统是Windows Server 2003, 请尝试一下这里
    在WinDBG中查看内存的命令
    The virtual machine could not be started because the hypervisor is not running
  • 原文地址:https://www.cnblogs.com/jxgxy/p/1496600.html
Copyright © 2011-2022 走看看