消息推送是开放平台推出的一种主动推送服务,基于该推送服务,开发者可以及时获取开放平台的相关信息,无需调用API。
目前提供三种方式接入:
- 开发者服务器接收消息推送
- 云函数接收消息推送
- 微信云托管服务接收消息推送
开发者服务器接收消息推送
总数据链路如图所示:
消息推送服务器配置
消息推送服务于微信小程序、公众号、小游戏、视频号小店、第三方平台,这里介绍微信小程序平台的配置。
填写相关信息
登录微信小程序管理后台,在「开发」-「开发管理」-「消息推送配置」中,需要填写以下信息:
- URL服务器地址:开发者用来接收微信消息和事件的接口 URL,必须以 http:// 或 https:// 开头,分别支持 80 端口和 443 端口。
- Token令牌:用于签名处理,下文会介绍相关流程。
- EncodingAESKey:将用作消息体加解密密钥。
- 消息加解密方式:
- 明文模式:不使用消息加解密,明文发送,安全系数较低,不建议使用。
- 兼容模式:明文和密文共存,不建议使用。
- 安全模式:使用消息加解密,纯密文,安全系数高,强烈推荐使用。
- 数据格式:消息体的格式,可以选择 XML 或 JSON。

发起验证
点击“提交”后,微信服务器会对开发者服务器发起验证,请在提交前按以下方式开发:
微信服务器将发送 GET 请求到填写的服务器地址 URL 上,GET 请求携带的参数如下表所示:
| 参数 | 描述 |
| signature | 签名 |
| timestamp | 时间戳 |
| nonce | 随机数 |
| echostr | 随机字符串 |
其中,signature 签名的生成方式是:
- 将 Token、timestamp、nonce 三个参数进行字典序排序。
- 将三个参数字符串拼接成一个字符串,然后进行 sha1 计算签名,即可获得 signature。
开发者需要校验 signature 是否正确,以判断请求是否来自微信服务器,验签通过后,请原样返回 echostr 字符串。
举例:假设填写的 URL=”https://www.qq.com/revice”,Token=”AAAAA”。
- 推送的 URL 链接:https://www.qq.com/revice?signature=f464b24fc39322e44b38aa78f5edd27bd1441696&echostr=4375120948345356249×tamp=1714036504&nonce=1514711492
- 将 token、timestamp、nonce 三个参数进行字典序排序,排序后结果为:[“1514711492″,”1714036504″,”AAAAA”]。
- 将三个参数字符串拼接成一个字符串:”15147114921714036504AAAAA”
- 进行 sha1 计算签名:f464b24fc39322e44b38aa78f5edd27bd1441696
- 与 URL 链接中的 signature 参数进行对比,相等说明请求来自微信服务器,合法。
- 构造回包返回微信,回包消息体内容为 URL 链接中的 echostr 参数 4375120948345356249。
为了方便开发者调试,我们提供了 URL 验证工具供开发者使用。
开发者需要填写 AccessToken、URL 地址、Token,点击“检查参数并发起验证”后,调试工具会发送 GET 请求到 URL 所指的服务器,并返回相关调试信息。
接收消息推送
当特定消息或事件触发时,微信服务器会将消息(或事件)的数据包以 POST 请求发送到开发者配置的 URL,下面以“debug_demo”事件为例,详细介绍整个过程:
消息解密方式为明文模式
- 假设 URL 配置为 https://www.qq.com/revice,数据格式为 JSON,Token=”AAAAA”。
- 推送的 URL 链接:https://www.qq.com/recive?signature=899cf89e464efb63f54ddac96b0a0a235f53aa78×tamp=1714037059&nonce=486452656
- 推送的包体:
{
"ToUserName": "gh_97417a04a28d",
"FromUserName": "o9AgO5Kd5ggOC-bXrbNODIiE3bGY",
"CreateTime": 1714037059,
"MsgType": "event",
"Event": "debug_demo",
"debug_str": "hello world"
}
- 校验 signature 签名是否正确,以判断请求是否来自微信服务器。
- 将 token、timestamp(URL 参数中的)、nonce(URL 参数中的)三个参数进行字典序排序,排序后结果为:[“1714037059″,”486452656″,”AAAAA”]
- 将三个参数字符串拼接成一个字符串:”1714037059486452656AAAAA”
- 进行 sha1 计算签名:899cf89e464efb63f54ddac96b0a0a235f53aa78
- 与 URL 链接中的 signature 参数进行对比,相等说明请求来自微信服务器,合法。
- 回包给微信,具体回包内容取决于特定接口文档要求,如果没有特定要求,回复空串或者 success 即可。