注意:以下文档只适用于TOP接口,请谨慎使用!

JS-API调用说明

更新时间:2017/07/11 访问次数:137134

关于JSSDK

 

jssdk作为开发工具的一部分发布给ISV,开发者使用jssdk中包装的方法来开发插件。

注:线上jssdk.js对应文件为utf-8编码,如果插件页面为gbk编码的,需要引入js处加上charset="utf-8"。请用原生的onload来加载,用jquery的$load会出错。

 

部署JSSDK

 

开发者只要引用线上地址

移动端:https://g.alicdn.com/sj/tqn/m/sdk-mobile.min.js

千牛移动JS-SDK说明文档

PC端:https://g.alicdn.com/sj/qn/jssdk.js      

 

PC端插件安全校验

 

目前千牛插件、旺旺插件、widget插件以及附属窗口都需要call_back_url访问触发插件的启动,现增加安全校验参数sign:

1.根据参数名称(除签名sign)将所有请求参数按照字母先后顺序排序:key + value .... key + value

例如:将foo=1,bar=2,baz=3 排序为bar=2,baz=3,foo=1,参数名和参数值链接后,得到拼装字符串bar2baz3foo1

2.将secret 拼接到参数字符串头、尾进行md5加密后,再转化成大写,格式是:byte2hex(md5(secretkey1value1key2value2...secret))

 

PC端授权完成,回调地址示例如下:

PC(授权信息:sessionkey字段。请求来源:from字段):

http://localhost:9016/?

appkey=21722245

&category=xiaogongju

&deviceuuid=77b350ae48272df6a457c487402d3136

&from=qianniupc

&instance=731_AAF3531E6E1345B487F836F5527E61F4

&nick=天猫商家

&sdkversion=106000

&sessionkey=622220639d5d93896bb7979b4698c89f37fdcf6dc04820e263664221

&sign=EDBCB4B8083C3EDD85D5426A05F19C29

&slot=qianniu

&user_id=211164000

&version=2.02.00N

 

示例:

根据上面回调地址和secret=8fee713ae62d62b27d27得到的加密字符串如下:

 

8fee713ae62d62b27d27appkey21722245categoryxiaogongjudeviceuuid77b350ae48272df6a457c487402d3136

fromqianniupcinstance731_AAF3531E6E1345B487F836F5527E61F4nick天猫商家sdkversion106000

sessionkey622220639d5d93896bb7979b4698c89f37fdcf6dc04820e263664221

slotqianniuuser_id211164000version2.02.00N8fee713ae62d62b27d27

 

产生的sign如下:

2B8888B4DB8E06875CF29E8377AA3FFB

 

注意事项:

  1.所有的参数皆为utf-8格式

  2.nick参数是中文或者子账号的情况下,中文请不要编码,中间的冒号也不好编码,保留原样

 

3.插件验证

获取到用户授权完成传入回调地址的参数和值,

根据加密规则生成sign,

与回调地址参数中sign的值做对比,若一致,则说明,传入参数合法,否则,未非法参数    

 

java示例代码

TreeMap<String, String> tree=new TreeMap<String, String>();

Enumeration<String> enums = request.getParameterNames();

String param="";

 

while(enums.hasMoreElements()){

      String ele = enums.nextElement();

      tree.put(ele, request.getParameter(ele));

}

Set<String>  key  = tree.keySet();

Iterator<String> it = key.iterator();

 

while( it.hasNext() ){

      String v=it.next();

      //System.out.println(" "+v+" decode:"+java.net.URLDecoder.decode(request.getParameter(v),"utf-8"));

      if(!"sign".equals(v)){

                  param+=v+java.net.URLDecoder.decode(request.getParameter(v),"utf-8");

      }

}

 

param = SECRET+param+SECRET;

String sign2=Md5.sign(param).toUpperCase();

System.out.println("sign:"+sign);

System.out.println("sign2:"+sign2);

if(!sign2.equalsIgnoreCase(sign)){

      System.out.println("非法访问,请退出并重新登陆");

}

 

千牛组件、API

 

通过JSSDK内置方法

接口分一级层次:

QN.plugin.invoke         // 工具栏插件调用协议

QN.wwplugin.invoke       // 旺旺插件调用协议

QN.application.invoke    // 应用本身提供的属性与方法等

QN.wangwang.invoke       // 旺旺相关的接口

QN.top.invoke            // top相关的接口透传调用

QN.component.invoke      // 组件调用

 

调用API,包含参数:

cmd

param

其中plugin层和wwplugin层多一个额外的类别参数category,如:

 

plugin与wwplugin的调用:

QN.plugin.invoke( {

    category : '类别',//jianyiguanli

    cmd : 'API名称',//

    param : {/* defined obj */ },

    error : function(msg, categroy, cmd, param) {

       // 调用失败

    },

    success : function(rsp, categroy, cmd, param) {

       // 回调结果

    }

} );

 

application、wangwang以及top的调用,以获取千牛版本为例:

QN.application.invoke( {

    cmd : ' getVersion',

    param : {/* defined obj */ },

    error : function(msg, cmd, param) {

       // 调用失败

    },

    success : function(rsp, cmd, param) {

       // 回调结果

    }

} );

 

component的调用,以改价组件为例:

QN.component.invoke( {

    category : 'updatePrice',

    cmd : '',

    param : {

       uuid : '1234',

       tid : '订单号'

    },

    error : function(msg, cmd, param) {

       // 调用失败

    },

    success : function(rsp, cmd, param) {

       // 回调结果

    }

}); 

 

API返回结果

 

通过JSSDK调用千牛API返回的结果是Object ,具体属性可查看API列表。

如需将msg 和rsp对象的打印出,可以通过JSON.stringify(msg)和JSON.stringify(rsp)转化成JSON数据格式等方式输出。

FAQ

关于此文档暂时还没有FAQ
返回
顶部