微信公众号与小程序数据互通
背景
最近做了一个有意思的功能《官网内容订阅》,用户在官网扫码后可以订阅官网栏目,订阅栏目后发送模版消息提醒用户订阅成功,模版消息关联了小程序,然后做了一个小程序来管理用户订阅的栏目,小程序提供订阅和新闻列表阅读功能。
实现技术调研分析
通过背景描述我们知道需要实现两块登录:1、官网扫码二维码登录;2、用户直接进小程序实现登录。要实现两块登录且要求用户从任意一个入口登录都需要确定为同一个用户,所以需要打通公众号与小程序的用户数据。幸运的是微信公众平台提供了unionid机制:
如果开发者拥有多个移动应用、网站应用、和公众帐号(包括小程序),可通过unionid来区分用户的唯一性,因为只要是同一个微信开放平台帐号下的移动应用、网站应用和公众帐号(包括小程序),用户的unionid是唯一的。换句话说,同一用户,对同一个微信开放平台下的不同应用,unionid是相同的。
因此,第一步需要申请微信开放平台的开发者资质,成为开发者资质之后,可以在微信开放平台绑定需要打通数据的公众号和小程序,让他们拥有相同的unionid,那么接下来的工作就是实现扫码登录与小程序登录后数据互通。
扫码登录实现
用户扫码登录状态时序图,用户在浏览游戏官网时发现自己喜欢的栏目,点击点阅栏目时,浏览器将请求微管家服务器获取二维码,同时轮询服务器用户的扫码状态,第三方服务器通过前端给的网站域名查询对应的公众号信息,去微信后台请求场景值二维码,并返回给浏览器, 浏览器展示给用户二维码,用户扫码二维码后,服务器会获取用户的个人信息,并将用户信息和扫码状态告知浏览器(浏览器一直在轮询用户扫码状态),同时种下浏览器cookie,此时相当面用户已经用微信登录且获取微信昵称和头像信息,用户可以去订阅其他栏目。具体流程请参考下图。需要注意的时候用户扫码登录之后,要使用用户的unionid作为用户的唯一标识,方便下一步关联的小程序登录。
小程序登录实现
小程序登录请查考小程序官网文档,需要注意两个点:1、维护用户的登录状态;2、用户同意登录授权后需要获取用户个加密个人信息(unionid)。第一步的用户登录状态维护时序图如下,第二步非常重要,在用户授权同时请求第三方服务器来进行登录获取session时,需要将用户的encryptedData数据数据传回第三方服务器,解密出用户unionid,通过服务器配置的小程序与公众号关联关系,同步用户数据。
总结
通过上面两步登录设计开发即可打通该功能的两种用户数据,然后可以根据用户订阅扫码情况发送模版消息直接打开小程序,用户在pc浏览器页面所订阅的栏目与小程序的订阅数据一致。 这里面的关键点就是用户unionid机制,通过该机制可以打通多个公众号、小程序之间的用户数据,上面的案例只是一个小小的应用场景,还有更多的想象空间,结合场景值二维码和模版消息的应用,收集用户信息与用户行文,后期可以考虑对用户提供精准的推送服务。