跳转到: 导航, 搜索

JS SDK 2020

JS SDK 2020 是微博开放平台最新版的、针对移动端网页的SDK,它较之前版本有较大改变:

  • 1、聚焦移动端H5场景,去除了原来PC时代的旧组件;
  • 2、分享功能,适配多场景,无论是在微博、微信、手机浏览器,还是PC上,都可以方便使用;
  • 3、采用开放标签,样式完全由开发者自己控制;
  • 4、更加安全,因此去除了原来的JS前端直接授权、直接调接口的功能,防止数据外泄,相应的页面授权需求,需要开发者按照标准授权流程接入,调用开放接口则需要放在服务端完成;


下面我们来一起体验一下这些特性。



开发指南

如果你没有AppKey请先在开放平台网站,注册自己的应用,申请入口


1、绑定安全域名

在使用JS SDK 2020时,需要为该应用绑定安全域名,其中微博客户端JS 接口将以此域名来进行校验。


绑定安全域名的操作可以在 我的应用 的 高级信息 页面完成。


2、引用JS SDK 2020文件

在你的页面部署 wbsdk.js 文件,同时,如果你的页面编码不是UTF-8,请添加charset="utf-8"属性。

HTML
<script src="https://open.weibo.com/views/js/wbsdk.js" type="text/javascript" charset="utf-8"></script>

支持使用 AMD/CMD 标准模块加载方法加载。


3、初始化JS SDK 2020

通过 wb.init 接口注入权限验证配置,所有需要使用微博客户端内JS SDK 的页面必须先注入配置信息,否则将无法调用。

Javascript
wb.init({
	debug: false,
	appkey: '',
	timestamp: ,
	noncestr: '',
	signature: '',
	scope: [
		'getNetworkType',
		'setBrowserTitle',
		'setSharingContent',
		'openMenu',
		'scanQRCode',
		'pickContact'
	]
});

其中,配置参数,debug:开启调试模式,appkey:应用唯一标识,timestamp:生成签名的时间戳,noncestr:生成签名的随机串,signature:签名,scope:需要使用的JS接口列表。

如果你的应用处于开发调试过程,建议使用JS SDK 2020的调试模式,可以在初始化时,配置 debug 为 true,开启调试模式,此时在调用出错时,出错信息将通过 alert 弹出,方便在移动端调试。

Javascript
wb.init({
    debug: true,
    ...
});

签名算法见文档后面的说明,JS 接口的说明见后面。


4、通过 ready 接口处理成功验证

init 初始化后会执行 ready 方法,所有JS 接口调用都必须在 ready 接口获得结果之后。

Javascript
wb.ready(function () {
	alert("## init success");
});

init 是一个客户端的异步操作,所以如果需要在页面加载时就调用相关接口,则须把相关接口放在 ready 函数中调用来确保正确执行。对于用户触发时才调用的接口,则可以直接调用,不需要放在 ready 函数中。


5、通过 error 接口处理失败验证

初始化失败的处理。

Javascript
wb.error(function (res) {
	alert("## init error: " + res);
});

init 初始化失败会执行 error 函数,如签名过期导致验证失败,错误信息可以在返回的 res 参数中查看,可以在这里更新签名,重新尝试初始化。


开放标签

开放标签类似原来的组件,目前主要就是分享功能。


分享开放标签
分享当前页面到微博,适配各种场景。
示例
HTML
<wb-share-button>分享到微博</wb-share-button>
开放标签中的样式,完全由开发者自己控制,例如。
HTML
<wb-share-button><div class="myStyle">分享到微博</div></wb-share-button>
指定分享的内容和页面地址,可以通过 data:title,data:url 属性标签完成自定义,例如。
HTML
<wb-share-button data:title="title" data:url="url">分享到微博</wb-share-button>
如果需要在分享的时候,指定一张分享图片,需要先将图片上传到微博图床,然后在开放标签上指定图片的PID,例如。
HTML
<wb-share-button data:pid="53b515f0ly1glgemvpjwfj20gi0aw114">分享到微博</wb-share-button>


内容聚合流开放标签
按照关键词,输入一个内容聚合流。
示例
HTML
<wb-topic-timeline data:keyword="王者荣耀" data:height="500"></wb-topic-timeline>
其中,data:keyword 属性为需要指定的关键词,data:height 属性为显示 view 的高度。


微博客户端内JS 接口说明

微博客户端JS 接口。


wb.getNetworkType
获取网络类型。
示例
Javascript
wb.getNetworkType({
	success: function (res) {
		alert("## getNetworkType success: " + JSON.stringify(res));
	},
	fail: function (res) {
		alert("## getNetworkType fail: " + JSON.stringify(res));
	}
});
参数说明
参数名称 类型 说明描述
success Function 调用成功后的回调函数。
fail Function 调用失败后的回调函数。
返回值
Javascript
{
	"network_type": "wifi"
}


wb.setBrowserTitle
设置页面标题。
示例
Javascript
wb.setBrowserTitle({
	title: "JS SDK DEMO",
	success: function (res) {
		alert("## setBrowserTitle success: " + JSON.stringify(res));
	},
	fail: function (res) {
		alert("## setBrowserTitle fail: " + JSON.stringify(res));
	}
});
参数说明
参数名称 类型 说明描述
title String 需要设置的页面标题。
success Function 调用成功后的回调函数。
fail Function 调用失败后的回调函数。
错误码
错误码 说明描述
MISSING_PARAMS 缺少title参数。


wb.setSharingContent
设置在微博内分享到微信的内容。
示例
Javascript
wb.setSharingContent({
	icon: "https://img.t.sinajs.cn/t6/style/images/face/face_card_longwb.png",
	title: "SDK Sharing Content",
	desc: "SDK Sharing Content",
	success: function (res) {
		alert("## setSharingContent success: " + JSON.stringify(res));
	},
	fail: function (res) {
		alert("## setSharingContent fail: " + JSON.stringify(res));
	}
});
参数说明
参数名称 类型 说明描述
icon String 分享到微信的卡片图标的图片地址。
title String 分享到微信的卡片标题。
desc String 分享到微信的卡片描述。
success Function 调用成功后的回调函数。
fail Function 调用失败后的回调函数。


wb.openMenu
打开分享菜单
示例
Javascript
wb.openMenu({
	success: function (res) {
		alert("## openMenu success: " + JSON.stringify(res));
	},
	fail: function (res) {
		alert("## openMenu fail: " + JSON.stringify(res));
	}
});
参数说明
参数名称 类型 说明描述
success Function 调用成功后的回调函数。
fail Function 调用失败后的回调函数。
返回值
Javascript
{
	"selected_code": "1005",
	"selected_title": "朋友圈"
}
错误码
错误码 说明描述
USER_CANCELLED 用户直接关闭了菜单。


wb.shareToWxTimeline
分享到微信朋友圈
示例
Javascript
wb.shareToWxTimeline({
	success: function (res) {
		alert("## shareToWxTimeline success: " + JSON.stringify(res));
	},
	fail: function (res) {
		alert("## shareToWxTimeline fail: " + JSON.stringify(res));
	}
});
参数说明
参数名称 类型 说明描述
success Function 调用成功后的回调函数。
fail Function 调用失败后的回调函数。


wb.shareToWxMessage
分享到微信好友
示例
Javascript
wb.shareToWxMessage({
	success: function (res) {
		alert("## shareToWxMessage success: " + JSON.stringify(res));
	},
	fail: function (res) {
		alert("## shareToWxMessage fail: " + JSON.stringify(res));
	}
});
参数说明
参数名称 类型 说明描述
success Function 调用成功后的回调函数。
fail Function 调用失败后的回调函数。


wb.scanQRCode
扫描二维码
示例
Javascript
wb.scanQRCode({
	success: function (res) {
		alert("## scanQRCode success: " + JSON.stringify(res));
	},
	fail: function (res) {
		alert("## scanQRCode fail: " + JSON.stringify(res));
	}
});
参数说明
参数名称 类型 说明描述
success Function 调用成功后的回调函数。
fail Function 调用失败后的回调函数。
返回值
Javascript
{
	"result": "http://weibo.com"
}
错误码
错误码 说明描述
USER_CANCELLED 用户取消了扫描。
SERVICE_FORBIDDEN 没有摄像头权限或用户不允许使用摄像头。


wb.pickContact
选择微博好友
示例
Javascript
wb.pickContact({
	count: 3,
	success: function (res) {
		alert("## pickContact success: " + JSON.stringify(res));
	},
	fail: function (res) {
		alert("## pickContact fail: " + JSON.stringify(res));
	}
});
参数说明
参数名称 类型 说明描述
count Int 可以选择的人数,例如,传1就是只能选一个人,最大不能超过10。
success Function 调用成功后的回调函数。
fail Function 调用失败后的回调函数。
返回值
Javascript
{
	"contacts": [{
		"uid": "1404376560",
		"screen_name": "zaku",
		"avatar_url": "https://tva2.sinaimg.cn/53b515f0jw1e8qgp5bmzyj2050050aa8.jpg"
	}]
}
错误码
错误码 说明描述
USER_CANCELLED 用户直接取消了选择。


JS SDK 2020 使用权限签名算法

生成签名之前必须先了解一下 jsapi_ticket,jsapi_ticket 是网页用于调用微博客户端内JS接口的临时票据。正常情况下,jsapi_ticket 的有效期为7200秒。由于有效期内再次调用该接口会导致 ticket 刷新,旧的直接失效。因此频繁刷新 jsapi_ticket 有可能导致签名校验失败,影响自身业务,因此,建议开发者在自己的服务全局缓存 jsapi_ticket 。


获取 jsapi_ticket 的接口
接口为 POST 请求
API
https://api.weibo.com/oauth2/js_ticket/generate?client_id=APPKEY&client_secret=APPSECRET
返回值
JSON
{
	"result": true,
	"appkey": "",
	"js_ticket": "",
	"expire_time": 7199
}
其中,js_ticket 为需要获取的 jsapi_ticket ,expire_time 为过期时间。


签名算法

签名生成规则如下:参与签名的字段包括 noncestr,有效的 jsapi_ticket,timestamp,url。对所有待签名参数按照字段名的 ASCII 码从小到大排序(字典序)后,使用 key1=value1&key2=value2… 的格式拼接成字符串。这里需要注意的是所有参数名均为小写字符,之后对字符串进行 sha1 加密,字段名和字段值都采用原始值,其中,url 为当前网页的完整地址,但是不包含 # 及其后面部分,也不要进行 URL 转义。

签名字符串
签名字符串 = "jsapi_ticket={jsapi_ticket}&noncestr={noncestr}&timestamp={timestamp}&url={url}"


签名
签名 = sha1(签名字符串)

签名用的 noncestr 和 timestamp 必须与 init 中的 noncestr 和 timestamp 相同。签名用的 url 必须是调用JS接口页面的完整地址。出于安全考虑,开发者必须在服务器端实现签名的逻辑。


附录一、菜单按钮code