大家好,我用官方的例子时总是出现Invalid Signature错误
http://open.taobao.com/dev/index.php/Php%E8%B0%83%E7%94%A8%E7%A4%BA%E4%BE%8B%E4%BB%A3%E7%A0%81然后我在API工具里试了一下
http://my.open.taobao.com/apitools/apiTools.htm选的是测试环境,app key和app secret都是test,fields:nick,type,buyer_credit,seller_credit,nick:andyy_tan
得到提交参数如下:
http://gw.api.tbsandbox.com/router/rest?app_key=test&codeType=PHP&fields=nick,type,buyer_credit,seller_credit&format=xml&method=taobao.user.get&nick=andyy_tan&sign=4BD403FAAEF42695CDFB591327C66E4B&timestamp=2011-02-05 21:34:49&v=2.0我按照签名算法
http://open.taobao.com/dev/index.php/快速上手指南#.E7.AD.BE.E5.90.8D把sign=4BD403FAAEF42695CDFB591327C66E4B去掉,=和&去掉,在前后加上test,得到:
testapp_keytestcodeTypePHPfieldsnick,type,buyer_credit,seller_creditformatxmlmethodtaobao.user.getnickandyy_tantimestamp2011-02-05 21:34:49v2.0test然后我把这段参数用MD5加密,跟4BD403FAAEF42695CDFB591327C66E4B不一样请问我错在哪里?

解决方案 »

  1.   


    建议还是再仔细一些,一步一步来,API这种事情非常需要细心
      

  2.   

    参考一下这个,专门提到了签名的问题:淘宝API资料总结
     
    1 api测试工具:http://open.taobao.com/api_tool/api_test.html
    2 获取授权码appKey: http://open.taobao.com/isv/authorize.php?appkey=test
    3 获取sessionKey:container.sandbox.taobao.com/container?authcode=appKey
    4 如果到正式环境测试,需要绑定用户才能测试数据,而且检索的信息都是自己真实的数据,如果做更新操作也是真的哦!
    资料
    1 淘宝api文档: http://my.open.taobao.com/apidoc/index.htm
    2 Php sdk :http://www.taoapi.com/
    3 Flash版淘宝api :http://wonzhai.5d6d.com/thread-2563-1-1.html
    4 淘宝as3 sdk:http://taobaoassdk.googlecode.com/svn/trunk/docs/index.html
    5 sdk开发者:http://code.google.com/p/taobaoassdk/
     
    6 flash sdk开发者博客:http://51openapi.appspot.com/
    淘宝开放平台(TOP)上AS3使用方法http://www.flashas.net/as/20090815/4424.html
    http://bbs.haina2010.com/viewthread.php?tid=437
    App Key: 12115408
    App Secret: f22eea570dbe7a3beb20e326b88ce5e4
    as3corelib
    php实现获取淘宝信息,实际上是发送url请求,通过对返回的结果进行处理,而构成我们自己网站的样式
    1 测试环境请求url地址: http://gw.api.tbsandbox.com/router/rest?
    2 正式环境请求url地址:http://gw.api.taobao.com/router/rest?
    3 appKey:相当于是淘宝账户,淘宝用于身份认证,免得你干坏事找不到你人
    4 appSecret:这个可能是为了保证签名的唯一性
    5 申请appKey 和appSecret:http://www.admin5.com/article/20091224/200144.shtml
    获取淘宝信息方法:
    1 生成签名:B98CBC79B960E61FC507A8AEDCF0DC77
       要请求的方法 + 加密方式 + 要返回的字段 + 方法需要的参数信息 + 推广者昵称
    2 组织参数:$param
    method=taobao.taobaoke.items.get
    timestamp=2010-08-09+04%3A18%3A35
    format=xml
    app_key=12115408
    v=2.0
    sign_method=md5
    fields=iid%2Cnum_iid%2Ctitle%2Cnick%2Cpic_url%2Cprice%2Cclick_url%2Ccommission%2Ccommission_rate%2Ccommission_num%2Ccommission_volume%2Cshop_click_url%2Cseller_credit_score%2Citem_location
    nick=sandbox_c_2
    keyword=mp3
    cid=0
    start_price=0.01
    end_price=99999999
    start_credit=1heart
    end_credit=5goldencrown
    sort=price_desc
    start_commissionRate=150
    end_commissionRate=5000
    start_commissionNum=0
    end_commissionNum=99999999
    page_no=1
    page_size=10
    sign=2DAC3815691816F79D91980301297489
    3 生成最终请求url:http://gw.api.tbsandbox.com/router/rest?$param
    4 请求url
    5 解析返回数据
    1 生成签名算法:
    1、拼装
    根据参数名称将你的所有请求参数按照字母先后顺序排序;
    例如将foo=1,bar=2,baz=3 排序为bar=2,baz=3,foo=1
    参数名和参数值链接后,得到拼装字符串bar2baz3foo1
    2、签名
    md5:将secretcode同时拼接到参数字符串头、尾部。例如SECRETbar2baz3foo1SECRET
    //签名函数 
    function createSign ($paramArr) { 
       global $appSecret; 
       $sign = $appSecret; 
       ksort($paramArr); 
       foreach ($paramArr as $key => $val) { 
          if ($key !='' && $val !='') { 
              $sign .= $key.$val; 
          } 
       } 
       $sign = strtoupper(md5($sign.$appSecret));
       return $sign; 
    }
    2 生成 method=xx&appKey=xx
    //组参函数 
    function createStrParam ($paramArr) { 
       $strParam = ''; 
       foreach ($paramArr as $key => $val) { 
          if ($key != '' && $val !='') { 
              $strParam .= $key.'='.urlencode($val).'&'; 
          } 
       } 
       return $strParam; 

    测试链接:
    http://gw.api.tbsandbox.com/router/rest?api_key=12056677&method=taobao.itemcats.get&format=xml&v=2.0&timestamp=2010-08-16 17:10:14&sign_method=md5&parent_cid=0&fields=cid,parent_cid,name,is_parent,status,sort_order&sign=E855BE1CF715BA5DBDE44AC5AC661E77
    Service 501 error:没有对0加引号。
    淘宝flash sdk api:http://taobaoassdk.googlecode.com/svn/trunk/docs/index.html
    淘宝测试环境与正式环境的不同:
    测试环境不要求签名是否正确,都能正确返回值
    而正式环境要求签名正确,才能返回值

    因为签名中包含appKey信息,这个是淘宝给的,是唯一的。淘宝这样做确保有据可查,和你的淘宝绑定的。
      

  3.   

    参考:php taobao api开发入门篇-常见问题