去年做过小程序群成员相关的信息展示需求,后续常有同事来问细节。
因此把去年做完后的梳理的小结发出来供参考。
微信文档现在相较去年也有所更新完善,但大致流程不变。
获取用户分享相关的群信息,与用户id进行绑定。
三种途径:
最近,微信小程序已经无法正常获取成功or失败的回调,这对此功能的影响是无法在用户分享成功的第一时间建立群关系
但是,整体上的群关系依然是能建立的,只是时间滞后了。
path:参数带上分享用户的uid,当点击用户进入后,即可获取两个用户id,一并建立群关系。(18.09.15补充)
//在转发成功回调中获取
onShareAppMessage: function (res) {
return {
title: '这是一个测试分享',
path: '/pages/redPacket/index/index?index=1&hello=hello',
success: function(res) {
wx.getShareInfo({
shareTicket: res.shareTickets[0],
success(resShare) {
console.log(resShare);
},
fail(resShare) {
console.log(resShare);
},
});
},
fail: function(res) {
//分享失败
}
}
},
设置当前页面的转发配置,使其在分享的时候带上shareTicket
wx.showShareMenu({
withShareTicket: true
})
在onShareAppMessage
success
的回调中可以拿到shareTickets
,一个数组,其对应一个shareTicket
shareTicket
:转发对象
官方说明中的解密算法:
(解密示例代码可直接在官方文档搜索:加密数据解密算法)
目标密文encryptedData
,和解密算法初始向量iv
已经在getShareInfo
的成功回调中获取
还缺一个密钥session_key
session_key是本次登陆的会话密钥
可以通过wx:login(OBJECT)
接口获得,用于换取用户登录态信息,包括用户的唯一标志openid
及本次登陆的会话密钥session_key
session_key
不可作为数据在前后端进行传输code
有效期5min。换取session_key
。session_key
生命周期到下一次调用login
,引发登录态刷新时。后端通过以下接口获得
https://api.weixin.qq.com/sns/jscode2session?appid=APPID&secret=SECRET&js_code=JSCODE&grant_type=authorization_code
appid 小程序唯一标识
secret 小程序的 app secret
js_code 登录时获取的 code
grant_type 填写为 authorization_code
回参:
openid、session_key
至此,解密需要的所有信息都已获取。解密算法较常见,在此不累述。
群id:openGId,以及时间戳都已有
其他参数什么意思,可以参考官方文档,本文不再累述
shareTicket
的获取,在App
级别App()
的onLaunch()
,和onShow()
里面获取。App({
onLaunch: function (options) {
if (options && options.shareTicket) {
//获取shareTicket
}
},
onShow: function (options) {
if (options && options.shareTicket) {
//获取shareTicket
}
},
});
onLaunch
全局只调一次,所以写在onShow
里面最好微信文档说明地址
https://open.weixin.qq.com/cgi-bin/showdocument?action=dir_list&t=resource/res_list&verify=1&id=open1419317340&token=&lang=zh_CN
客户端按照文档的说明,发起分享。最后解析流程是一样的。
由于appsecret,是可以重新生成的,如果变动影响较大。因此,咱们登陆后端已经对从code获取session_key的流程,进行了处理。
后续,如果有需求需要涉及这方面,可以直接找登录业务的同事。
登录时获取的session_key可以从xxx-api(公司内部服务)服务中获取