近期处理了一个需求,具体是需要在小程序首页展示一个“去关注”公众号的按钮(如下图),并跳转到公众号去关注;这里其实比较好处理,直接用<web-view/>内嵌到公众号就可以了。
但是产品又提出:当用户已经关注了公众号后,就不要展示这个组件了。
这就让人犯了难。翻阅了大量资料,基本上都是两种办法:
第一种是加用户跳转获取code,然后再用code获取access_token,再获取公众号的open_id,最后才能拿到带有是否关注标识的用户信息;
第二种是用公众号的api获取关注open_id列表,然后遍历获取union_id,并于当前用户union_id做比对。
这也太麻烦了些,需要绑定开放平台,以及开发者认证等等。有没有简单点的办法呢?
🈶️!
我突然想到这里有用到小程序-公众号统一服务消息,详见:微信小程序的统一服务消息 uniformMessage.send_享受挑战的博客-CSDN博客
这里是通过小程序的open_id直接发送公众号模版消息,前提是用户已关注该公众号。那么我们就可以利用这个捷径来实现我们想要的功能。
具体的思路是:向用户发送一个不存在的模版(这样用户肯定不会收到任何通知),通过返回的错误码来判断是否有关注:
这个是模版id错误的异常:{"errcode":40037,"errmsg":"invalid template_id rid: *******"}
这个是用户未关注的异常:{"errcode":43004,"errmsg":"require subscribe rid: ******"}
看到这里就很明晰了,统一服务消息接口会先校验是否有关注,再校验模版的正确性。所以我们只需判断errcode是否为43004,若是则未关注,否则已关注。