小程序分享至群群消息小结(包括分享到App)


title: “小程序分享至群群消息小结(包括分享到App)”
date: 2018-09-15 22:05:28
tags:

以下是18年3月底在公司内部的分享,虽然小程序对于分享回调有所限制(下文会说明),但是整体方案依然是可行的

去年做过小程序群成员相关的信息展示需求,后续常有同事来问细节。
因此把去年做完后的梳理的小结发出来供参考。

微信文档现在相较去年也有所更新完善,但大致流程不变。

小程序分享获得群信息小结

  • 官方文档有,但是较分散,所以对这块知识作一个小结,能快速了解小程序分享至群获得群信息的流程。
  • 包括前后端需要做的事情(并不是前端直接获取群信息的)
  • 无法直接获取群内成员信息,小程序只能通过用户发起分享或点击分享,自行收集用户与群之间的关系网

最终目的

获取用户分享相关的群信息,与用户id进行绑定。
三种途径:

  • 用户分享至群 获取群信息
  • 群成员点击分享信息时,获取对应群信息
  • app分享到微信,点开至小程序 (18.03.29补充)

整体流程图

用户分享至群获取转发对象

最近,微信小程序已经无法正常获取成功or失败的回调,这对此功能的影响是无法在用户分享成功的第一时间建立群关系

但是,整体上的群关系依然是能建立的,只是时间滞后了。

path:参数带上分享用户的uid,当点击用户进入后,即可获取两个用户id,一并建立群关系。(18.09.15补充)

Page中
  • 目前已无法获取成功失败回调
//在转发成功回调中获取
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
})
获取转发对象shareTicket

onShareAppMessage success的回调中可以拿到shareTickets,一个数组,其对应一个shareTicket

shareTicket:转发对象

获取群相关敏感信息的加密数据
虽然,看起来好像很简单,拿到两个数据解密,就能得到最终的。然而,最终获取还是需要一定的过程。
解密

官方说明中的解密算法:

(解密示例代码可直接在官方文档搜索:加密数据解密算法)
目标密文encryptedData,和解密算法初始向量iv已经在getShareInfo的成功回调中获取

还缺一个密钥session_key
session_key是本次登陆的会话密钥

session_key
这是微信官方给出的`登陆时序图`,获得`session_key`,需要获取三个信息`appid+appsecret+code` 前两者可以在公众号平台中查看。
code:登陆凭证

可以通过wx:login(OBJECT)接口获得,用于换取用户登录态信息,包括用户的唯一标志openid及本次登陆的会话密钥session_key

注意:
  • 如登陆时序图所展示,前端获取code之后,传给后端,解密的工作应在后端进行。session_key不可作为数据在前后端进行传输
  • code有效期5min。换取session_keysession_key生命周期到下一次调用login,引发登录态刷新时。
获得session_key

后端通过以下接口获得

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,以及时间戳都已有
其他参数什么意思,可以参考官方文档,本文不再累述

群成员点击分享信息

  • 前者需要前端进行的工作,都可以在当前Page内完成
  • 而,群成员点击分享信息,shareTicket的获取,在App级别
  • App()onLaunch(),和onShow()里面获取。
获取转发对象
App({
    onLaunch: function (options) {
        if (options && options.shareTicket) {
            //获取shareTicket
        }
    },
    onShow: function (options) {
        if (options && options.shareTicket) {
            //获取shareTicket
        }
    },
});
  • onLaunch全局只调一次,所以写在onShow里面最好
  • 将option中获得的shareTicket,存cache(可以用其他方式),后续在对应页面获得,处理

App分享至微信,点开到小程序获取群信息

小程序后端

  • 由于appsecret,是可以重新生成的,如果变动影响较大。因此,咱们登陆后端已经对从code获取session_key的流程,进行了处理。

  • 后续,如果有需求需要涉及这方面,可以直接找登录业务的同事。

  • 登录时获取的session_key可以从xxx-api(公司内部服务)服务中获取

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值