前言

       总所周知,微信生态下不同的公众号以及不同的小程序里用户的openid也是各不相同,哪怕同一个企业同一个主体,做什么绑定都是一样,openid并不能统一起来。由于这个问题导致同一个公司下的不同公众号以及小程序的用户很难打通。尽管微信提供了微信开放平台,可以将不同的公众号小程序绑定到同一个开放平台上,这样每个用户可以获得一个unioinid,相同微信在各个公众号小程序里就能有一个统一的unioinid。
       但是这样依旧有一些局限性,比如初期企业并没有使用微信开放平台,导致初期粉丝都没有unioinid,而且微信好像并没有提供根据unioinid反查openid的接口(至少我没找到),所以我已知unioinid时要找到对应的openid,可能需要遍历所有粉丝把unioinid补起来,如果已经有上千万粉丝了,这种方案就比较离谱了。

一、面对的问题

       我们公司有一个小程序,用户在小程序上登陆,登陆后有一些消息需要使用公众号的模版消息推送通知(虽然小程序有订阅消息功能但是实在难用),但是公众号模版消息推送需要使用公众号openid,但是小程序只能获取到小程序的openid,两边不一致没法建立关联关系推送,就算现在去申请一个微信开放平台账号,也会面临我上面说的问题。

二、解决思路

1.公众号网页授权

       我的思路就是如果能在小程序里获取到公众号的appid就好了,自然就想到了网页授权,详细见官方文档: https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/Wechat_webpage_authorization.html,小程序里如果可以跳转公众号授权链接,授权链接回调后不就拿到公众号的openid了

2.小程序web-view

       经过调研,小程序中虽然不能像H5页面那样直接跳转外链,但是有一个组件叫web-view,可以直接跳转web-view页面,页面指向公众号授权链接应该就可以跳转到授权地址
<view>
  <web-view src="https://open.weixin.qq.com/connect/oauth2/authorize?appid={{appid}}&redirect_uri=https%3A%2F%2Fxxxxxxxxxxxx%2Fapi%2Fwechat%2Fcallback&response_type=code&scope=snsapi_base&state={{tel}}#wechat_redirect"></web-view>
</view>
然后然后微信回调到我们后端服务就能拿到公众号openid了。

3.时序图

在这里插入图片描述

最后在H5页面里可以放一些推荐关注公号的文案什么的,或者直接自动退回小程序,这样可以做到近乎没有什么用户感知的绑定小程序用户和公众号用户

总结

        以上方案已经落地实施,确实可行。
        如果只是需要用小程序appid发送公众号模版消息,有新的解决方案,小程序服务端接口有一个接口叫:统一服务消息发送,https://api.weixin.qq.com/cgi-bin/message/wxopen/template/uniform_send?access_token=ACCESS_TOKEN,可以直接用小程序的appid给与小程序有绑定且同主体的公众号用户发送模版消息(2023年09月20日,这个统一消息发送接口被腾讯收回不能用了)

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐