「小程序下发统一消息接口」收回后,如何适配?
前言
目前「小程序下发统一消息接口」已经收回,开发者无法通过该接口下发公众号模板消息,如有消息推送需要,可使用「公众号模板消息」接口,具体可参考公告:小程序与公众号下发统一消息接口调整通知。
来看下两个接口区别
「小程序下发统一消息接口」与「公众号模板消息接口」区别如下:
小程序下发统一消息接口(已收回) | 公众号模板消息接口 | |
---|---|---|
接口请求地址 | POST https://api.weixin.qq.com/cgi-bin/message/wxopen/template/uniform_send?access_token=ACCESS_TOKEN | POST https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=ACCESS_TOKEN |
接口调用凭证 | 小程序 access_token |
公众号 access_token |
接收者 openid |
小程序 openid 或 公众号 openid |
公众号 openid |
也就是说,现在需要下发公众号模板消息只能使用「公众号模板消息接口」:
- 需要使用公众号
access_token
调用该接口。 - 需要使用公众号
openid
下发公众号模板消息。
那应该如何适配呢?
一、如果你有公众号openid
按照「公众号模板消息接口」文档适配,使用公众号的openid
即可。
注意:更换接口后,请求包json格式也要根据文档进行修改。
二、如果你只有小程序openid
,没有公众号openid
我想到了以下几种方式,可以获取用户公众号openid
。
(一)通过unionid
区分同一用户
小程序与公众号绑定在同一开放平台下:
-
小程序内可通过「
wx.login
」和「code2Session
」接口获取到用户的unionid
和openid
,保存到数据库。 -
公众号可以调用「获取已关注用户列表接口」拿到所有已关注用户的
openid
,可调用「获取用户基本信息接口」查询unionid
,保存到数据库。 -
对于新关注公众号的用户,关注事件推送里面会有
openid
,可调用「获取用户基本信息接口」查询unionid
,保存到数据库。
注:接口有每日调用次数限制。
将用户在公众号与小程序下的openid
和unionid
保存到数据库里面,可以参考:
(1) 如果在一个表
id | unionid | offiaccount_openid | miniprogram_openid |
---|
下发模板消息时候,可通过小程序openid
查询到公众号openid
。
(2)如果是分开的表
公众号用户表
id | unionid | openid |
---|
小程序用户表
id | unionid | openid |
---|
下发模板消息的时候,通过unionid
去查询对应用户公众号openid
。
(二)网页授权
制作一个网页授权H5页面,可以获取到用户公众号openid
,当scope
为snsapi_userinfo
时可以获取到unionid
(公众号绑定到微信开放平台账号才会返回)。
(三)公众号关键词回复
用户在公众号回复关键词,开发者动态下发小程序链接,链接内带有公众号openid
参数,用户点击跳转到小程序,完成绑定操作。
哎,微信真的是没事找事,是又缺钱了吗,美其名曰 为了优化开发体验,避免多个同一功能接口对开发者造成困扰,你把这个接口回收才是最大的困扰
哎,微信真的是没事找事,是又缺钱了吗,美其名曰 为了优化开发体验,避免多个同一功能接口对开发者造成困扰,你把这个接口回收才是最大的困扰,让我发愁了好几天
关注事件推送 需要开启开发者模式吗?
小程序可以强制关注关联的公众号吗
官方每次的操作都让人无语。美其名曰 为了优化开发体验,避免多个同一功能接口对开发者造成困扰
第一种方式实现起来会不会有些奇怪,为了一个公众号openId,先获取所有的,然后在一个一个去获取unionid,在比较
要注意的是:更换接口后,请求包json格式不要忘记根据文档修改。
使用【公众号关键词回复】的方式获取openId,试了下,不可行啊。这个具体怎么实现呢
如果一个小程序对应多个公众号,通过小程序openid查 unionid就会得到多个公众号的openid。那怎么才能找到想发送消息的公众号呢。
如果之前就没绑定开放平台,没有存储 unionid ,这种旧的用户信息 只有一个小程序的 openid 的怎么获取公众号的 openid 呢。