微信公众号与小程序数据互通

背景

 

最近做了一个有意思的功能《官网内容订阅》,用户在官网扫码后可以订阅官网栏目,订阅栏目后发送模版消息提醒用户订阅成功,模版消息关联了小程序,然后做了一个小程序来管理用户订阅的栏目,小程序提供订阅和新闻列表阅读功能。

实现技术调研分析

通过背景描述我们知道需要实现两块登录:

1、官网扫码二维码登录;

2、用户直接进小程序实现登录。

要实现两块登录且要求用户从任意一个入口登录都需要确定为同一个用户,所以需要打通公众号与小程序的用户数据。幸运的是微信公众平台提供了unionid机制:

如果开发者拥有多个移动应用、网站应用、和公众帐号(包括小程序),可通过unionid来区分用户的唯一性,因为只要是同一个微信开放平台帐号下的移动应用、网站应用和公众帐号(包括小程序),用户的unionid是唯一的。换句话说,同一用户,对同一个微信开放平台下的不同应用,unionid是相同的。

因此,第一步需要申请微信开放平台的开发者资质,成为开发者资质之后,可以在微信开放平台绑定需要打通数据的公众号和小程序,让他们拥有相同的unionid,那么接下来的工作就是实现扫码登录与小程序登录后数据互通。

扫码登录实现

用户扫码登录状态时序图,用户在浏览游戏官网时发现自己喜欢的栏目,

1. 用户点击点阅栏目时;

2. 浏览器将请求微管家服务器获取二维码,同时轮询服务器用户的扫码状态

3. 微管家服务器通过前端给的网站域名查询对应的公众号信息

4. 微管家服务器去微信后台请求场景值二维码

5. 微信服务器返回场景码给为浏览器

6. 浏览器展示给用户二维码

7. 浏览器一直在轮询用户扫码状态

8. 用户扫码二维码后,用户手机浏览器(通常是微信内置浏览器)发送二维码请求到服务器

9. 服务器会获取用户的个人信息,

10. 并将用户信息和扫码状态告知浏览器,同时种下浏览器cookie

此时相当面用户已经用微信登录且获取微信昵称和头像信息,用户可以去订阅其他栏目。

具体流程请参考下图。需要注意的时候用户扫码登录之后,要使用用户的unionid作为用户的唯一标识,方便下一步关联的小程序登录。

 

小程序登录实现

小程序登录请查考小程序官网文档,需要注意两个点:

1、维护用户的登录状态;

2、用户同意登录授权后需要获取用户个加密个人信息(unionid)。

第一步的用户登录状态维护时序图如下,第二步非常重要,在用户授权同时请求第三方服务器来进行登录获取session时,需要将用户的encryptedData数据数据传回第三方服务器,解密出用户unionid,通过服务器配置的小程序与公众号关联关系,同步用户数据。

总结

通过上面两步登录设计开发即可打通该功能的两种用户数据,然后可以根据用户订阅扫码情况发送模版消息直接打开小程序,用户在pc浏览器页面所订阅的栏目与小程序的订阅数据一致。  这里面的关键点就是用户unionid机制,通过该机制可以打通多个公众号、小程序之间的用户数据,上面的案例只是一个小小的应用场景,还有更多的想象空间,结合场景值二维码和模版消息的应用,收集用户信息与用户行文,后期可以考虑对用户提供精准的推送服务。

  • 2
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论
小程序可以通过与微信公众号绑定来接收公众号消息。首先,需要将小程序公众号绑定到同一个开放平台下。如果是新的公众号没有任何用户关注的话,可以直接在后端监控关注事件然后去数据库对比。如果是已经有公众号用户了,就需要先拉取一遍公众号的用户存入数据库然后再进行比对。公众号服务器配置需要是80端口或者443端口才能提交,token也要和后端对应,否则会提示参数错误之类的。小程序公众号的关联都是通过unionid来联系的,这里一个用户表一个公众号表,小程序用户登录后得到unionid,然后存入数据库,公众号用户关注后获取unionid和openid,之后根据小程序的unionid去查询公众号的unionid得到openid之后就可以直接推送消息了。\[1\]\[2\] #### 引用[.reference_title] - *1* *2* [小程序关联公众号推送公众号消息](https://blog.csdn.net/u013050839/article/details/121875117)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [微信小程序公众号收到消息之后根据情况进行回复](https://blog.csdn.net/qq_41640218/article/details/127256525)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

竹二木

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值