第一步:正确部署JSSDK
注意:正确的部署做法是每个需要调用组件接口的html页面都埋点这段JS代码。
在每个html页面的head标签之间引入jssdk脚本,并将appkey参数作为URL进行配置(单个页面只需加载一次sdk脚本,配置一次系统参数)。
根据采用协议的不同,jssdk脚本分为两种,分别是:
1、http协议:
2、https协议:
<script src="https://s.tbcdn.cn/apps/top/x/sdk.js?appkey=xxxxxxx">
第二步:生成签名参数
任何调用前都必须将sign和timestamp填入到当前页面的cookie中(必须服务端填入),因为每一次组件提交请求都会获取cookie中的这两个参数用来验证应用的身份。
详细校验规则算法介绍:
签名算法采用Hmac-md5,hmac(secret+"app_key"+app_key+"timestamp"+timestamp+secret, secret),其中原始字符串是secret+"app_key"+app_key+"timestamp"+timestamp+secret,加密串是secret,其中timestamp(时间戳格式为13位数字类型,例如:1333275943000,位数不够可使用“0”补足)这部分工作必须在服务端处理。
举个例子:
PHP环境(5.1以上版本)的签名实现方式:
$app_key = '';/*填写appkey */
$secret='';/*填入Appsecret'*/
$timestamp=time()."000";
$message = $secret.'app_key'.$app_key.'timestamp'.$timestamp.$secret;
$mysign=strtoupper(hash_hmac("md5",$message,$secret));
setcookie("timestamp",$timestamp);
setcookie("sign",$mysign);
?>
第三步:使用淘宝组件、组件API
1.通过JSSDK的内置方法(TOP.ui)方法创建淘宝组件
以登录组件为例:
TOP.ui("login-btn", {
container:".top-login-btn-container",
type:"1,1",
callback:{
login:function(user){alert(user)},
logout:function(){}
}
});
具体配置可以参考下文档:http://xtao.aliapp.com/ui/login-btn/1.0/demo/demo.html
2.通过JSSDK内置方法TOP.api来调用组件API。
包含参数:
- [ type ] {String} 调用api的类型,可选'rest'和'tql'
- [ method ] {String} 发送请求的方式,可选'get'和'post'
- params {Object|String} 指定接口名和需要的应用级参数,或TQL查询语句。
- cb {Function} 回调函数。以返回的json对象为唯一参数。
-
以'taobao.taobaoke.widget.items.convert'接口为例
(方法说明文档: http://api.taobao.com/apidoc/api.htm?spm=0.0.0.37.751a97&path=cid:38-apiId:21417):
-
TOP.api('rest', 'get',{
method:'taobao.taobaoke.widget.items.convert',
track_iids:'19237740785_track_11116',
fields:'num_iid,click_url,commission_rate'
},function(resp){
if(resp.error_response){
alert('taobao.taobaoke.widget.items.convert接口获取商品信息品失败!'+resp.error_response.msg);
return false;
}
var respItem=resp.taobaoke_items.taobaoke_item;
for(var i=0;i
//$("#r"+respItem[i].num_iid).html("佣金:"+Number(respItem[i].commission_rate)/100+"%");
//$("#a"+respItem[i].num_iid).attr("href",respItem[i].click_url);
}
})
-
调用一定有返回。 如果调用有错误,则返回的json形如 (详细异常信息请查看文档:http://open.taobao.com/doc/category_list.htm?id=75):
{"error_response":{
"code":41,//错误码 "msg":"Invalid arguments:num_iid"
} }
-
-
在某些情况下,使用TOP.api 方法调用api时,即使已经正确设置签名和时间戳并写入浏览器cookie,但依然会出现:26 - Missing session、30 - Missing timestamp错误,可以通过显示设置session和timestamp参数来解决,方法如下:
-
-
TOP.api('rest','get',{
method:'taobao.user.buyer.get',
session:'usersession',
timestamp:'1131333445560',
fields:'nick,user_id,avatar,alipay_account,buyer_credit,seller_credit,location,last_visit,birthday,sex'
},function(resp){
if(resp.user){
alert('success!');
}else{
alert('failure!');
} });
截止这一步,组件API的请求基本完成,第四步数据验证请根据自身的情况进行实现。
第四步:验证数据可靠性
由于通过JS调用服务端,数据是异步callback到ISV的JS,由于JS本身的不可靠性,可能存在数据本身被篡改的情况,请ISV根据自己的业务场景自行判断,是否需要验证数据可靠性。
如果需要验证数据可靠性。请求后端API的时候,请加上请求参数response_sign=true
-
TOP.api({
method:'taobao.item.get',
num_iid:'13736273292',
response_sign:true,
fields:'num_iid,title,nick'
},function(resp){
alert( JSON.stringify(resp));
alert(resp.content);
});
签名验证方式
和Widget本身的签名方式类似,返回结果里的sign的生成方式签名算法采用Hmac-md5,验签名表达式为:
resp.sign = hmac(secret+"app_key"+resp.appkey+"timestamp"+resp.timestap+"content"+resp.content+secret, secret)
注意:所有的签名验证和签名都必须在服务端完成,所有通过JS完成,在页面里直接暴露secret的,appkey立马收回