JS SDK 2020 是微博开放平台最新版的、针对移动端网页的SDK,它较之前版本有较大改变:
下面我们来一起体验一下这些特性。
注意:由于安全问题,目前如下方法 wb.setSharingContent、wb.openMenu、wb.shareToWxTimeline、wb.shareToWxMessage,对非微博域名(即第三方开发者域名下的网页)暂不提供
如果你没有AppKey请先在开放平台网站,注册自己的应用,申请入口。
在使用JS SDK 2020时,需要为该应用绑定安全域名,其中微博客户端JS 接口将以此域名来进行校验,如果你不打算使用微博客户端JS 接口可以跳过此步骤。
绑定安全域名的操作可以在 我的应用 的 高级信息 页面完成。
在你的页面部署 wbsdk.js 文件,同时,如果你的页面编码不是UTF-8,请添加charset="utf-8"属性。
<script src="https://open.weibo.com/views/js/wbsdk.js" type="text/javascript" charset="utf-8"></script>
支持使用 AMD/CMD 标准模块加载方法加载。
通过 wb.init 接口注入权限验证配置,所有需要使用微博客户端内JS SDK 的页面必须先注入配置信息,否则将无法调用。如果你不打算使用微博客户端JS 接口可以采用简易初始化方法。
完全初始化,使用微博客户端JS 接口与开放标签时,需要完全初始化:
wb.init({
debug: false,
appkey: '',
timestamp: ,
noncestr: '',
signature: '',
scope: [
'getNetworkType'
]
});
其中,配置参数,debug:开启调试模式,appkey:应用唯一标识,timestamp:生成签名的时间戳,noncestr:生成签名的随机串,signature:签名,scope:需要使用的JS接口列表。
简易初始化,不使用微博客户端JS 接口,只使用开放标签时,可以简化初始方法,减少开发难度:
wb.init({
appkey: ''
});
如果你的应用处于开发调试过程,建议使用JS SDK 2020的调试模式,可以在初始化时,配置 debug 为 true,开启调试模式,此时在调用出错时,出错信息将通过 alert 弹出,方便在移动端调试。
wb.init({
debug: true,
...
});
签名算法见文档后面的说明,JS 接口的说明见后面。
init 初始化后会执行 ready 方法,所有JS 接口调用都必须在 ready 接口获得结果之后。如果你没有使用微博客户端JS 接口可以跳过此步骤。
wb.ready(function () {
alert("## init success");
});
init 是一个客户端的异步操作,所以如果需要在页面加载时就调用相关接口,则须把相关接口放在 ready 函数中调用来确保正确执行。对于用户触发时才调用的接口,则可以直接调用,不需要放在 ready 函数中。
初始化失败的处理。如果你没有使用微博客户端JS 接口可以跳过此步骤。
wb.error(function (res) {
alert("## init error: " + res);
});
init 初始化失败会执行 error 函数,如签名过期导致验证失败,错误信息可以在返回的 res 参数中查看,可以在这里更新签名,重新尝试初始化。
<wb-share-button>分享到微博</wb-share-button>
<wb-share-button><div class="myStyle">分享到微博</div></wb-share-button>
<wb-share-button data:title="title" data:url="url">分享到微博</wb-share-button>
<wb-share-button data:pic="https://wx2.sinaimg.cn/large/53b515f0ly1glgemvpjwfj20gi0aw114.jpg">分享到微博</wb-share-button>
<wb-follow-account data:uid="1904178193">在微博上关注我</wb-follow-account>
<wb-follow-account data:uid="1904178193"><div class="myStyle">在微博上关注我</div></wb-follow-account>
wb.followCallBack({
complete: function (res) {
alert("## followCallBack event: " + JSON.stringify(res));
}
});
| 参数名称 | 类型 | 说明描述 |
|---|---|---|
| complete | Function | 当用户进行关注操作时,接收关注结果事件的回调函数。 |
{
"result": false,
"message": "USER_CANCELLED"
}
{
"result": true,
"uid": "10568"
}
{
"result": false,
"message": "IS_FOLLOWING"
}
wb.getNetworkType({
success: function (res) {
alert("## getNetworkType success: " + JSON.stringify(res));
},
fail: function (res) {
alert("## getNetworkType fail: " + JSON.stringify(res));
}
});
| 参数名称 | 类型 | 说明描述 |
|---|---|---|
| success | Function | 调用成功后的回调函数。 |
| fail | Function | 调用失败后的回调函数。 |
{
"network_type": "wifi"
}
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({
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({
success: function (res) {
alert("## openMenu success: " + JSON.stringify(res));
},
fail: function (res) {
alert("## openMenu fail: " + JSON.stringify(res));
}
});
| 参数名称 | 类型 | 说明描述 |
|---|---|---|
| success | Function | 调用成功后的回调函数。 |
| fail | Function | 调用失败后的回调函数。 |
{
"selected_code": "1005",
"selected_title": "朋友圈"
}
| 错误码 | 说明描述 |
|---|---|
| USER_CANCELLED | 用户直接关闭了菜单。 |
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({
success: function (res) {
alert("## shareToWxMessage success: " + JSON.stringify(res));
},
fail: function (res) {
alert("## shareToWxMessage fail: " + JSON.stringify(res));
}
});
| 参数名称 | 类型 | 说明描述 |
|---|---|---|
| success | Function | 调用成功后的回调函数。 |
| fail | Function | 调用失败后的回调函数。 |
wb.scanQRCode({
success: function (res) {
alert("## scanQRCode success: " + JSON.stringify(res));
},
fail: function (res) {
alert("## scanQRCode fail: " + JSON.stringify(res));
}
});
| 参数名称 | 类型 | 说明描述 |
|---|---|---|
| success | Function | 调用成功后的回调函数。 |
| fail | Function | 调用失败后的回调函数。 |
{
"result": "http://weibo.com"
}
| 错误码 | 说明描述 |
|---|---|
| USER_CANCELLED | 用户取消了扫描。 |
| SERVICE_FORBIDDEN | 没有摄像头权限或用户不允许使用摄像头。 |
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 | 调用失败后的回调函数。 |
{
"contacts": [{
"uid": "1404376560",
"screen_name": "zaku",
"avatar_url": "https://tva2.sinaimg.cn/53b515f0jw1e8qgp5bmzyj2050050aa8.jpg"
}]
}
| 错误码 | 说明描述 |
|---|---|
| USER_CANCELLED | 用户直接取消了选择。 |
https://api.weibo.com/oauth2/js_ticket/generate?client_id=APPKEY&client_secret=APPSECRET
{
"result": true,
"appkey": "",
"js_ticket": "",
"expire_time": 7199
}
签名生成规则如下:参与签名的字段包括 noncestr,有效的 jsapi_ticket,timestamp,url。对所有待签名参数按照字段名的 ASCII 码从小到大排序(字典序)后,使用 key1=value1&key2=value2... 的格式拼接成字符串。这里需要注意的是所有参数名均为小写字符,之后对字符串进行 sha1 加密,字段名和字段值都采用原始值,其中,url 为当前网页的完整地址,但是不包含 # 及其后面部分,也不要进行 URL 转义。
签名字符串 = "jsapi_ticket={jsapi_ticket}&noncestr={noncestr}×tamp={timestamp}&url={url}"
签名 = sha1(签名字符串)
签名用的 noncestr 和 timestamp 必须与 init 中的 noncestr 和 timestamp 相同。签名用的 url 必须是调用JS接口页面的完整地址。出于安全考虑,开发者必须在服务器端实现签名的逻辑。
| 编码 | 说明描述 |
|---|---|
| 1001 | 分享到微博。 |
| 1003 | 分享到微博群和私信。 |
| 1004 | 分享到微信好友。 |
| 1005 | 分享到微信朋友圈。 |
| 1101 | 分享到短信。 |
| 1012 | 分享到支付宝好友。 |
| 1010 | 分享到QQ。 |
| 1011 | 分享到QQ空间。 |
| 1102 | 分享到邮件。 |