小程序消息推送接入:服务器配置与微信验证教程

  新闻资讯     |      2026-03-04 02:31

将微信小程序消息推送接入进来,最为让人头疼的便是配置这一关卡。许多人处于第一步就受阻,填好了URL和Token之后便不清楚接下来该如何进行验证了,实际上弄明白原理以后是非常简单的,无非就是服务器与微信进行一次握手,在确认身份之后便能够实现接收用户消息了。

开发者服务器接收消息推送

第一步填写服务器配置

于微信公众平台小程序后台之中,寻觅开发管理里之开发设置,往下方牵扯便可瞅见消息推送选项。于此地需管理员扫描二维码方可启用,所填写之URL务必是公网能够予以访问之地址,不可运用本地localhost地址。Token能够自行随意设定一个字符串,然而要牢记后面代码里需运用同样之值。

加解密消息的方式存在三种可供选择的情况,明文模式具有最为直接的特性,消息的内容是不进行加密处理的,这种模式适合处于调试的阶段。兼容模式以及安全模式,均会在报文当中多出好几个关于加密的相关字段。数据存在格式化可以选择用 XML 或者 JSON 的情况,现今有众多的开发者是比较喜欢使用 JSON 的,因为 JSON 解析起来相较于 XML 要方便许多一些。

第二步验证消息来源

等到配置提交完毕之后,微信服务器会朝着你所填写的URL发送一个GET请求,这个请求会携带signature、timestamp、nonce这几个参数。你所要进行的操作便是,把token以及你收收到的timestamp、nonce组合到一块儿,先开展排序操作,接着再进行拼接,随后做SHA1加密处理,查看最终结果跟signature是否保持一致。

要是验证得以通过,那就直接将echostr参数按照原样去返回来便可以了,此步骤须特别加以留意,所返回的必然得是echostr的内容,而非true或者success这类的字符串,我头一回做的时候就犯了此等差错,返回了个1,结果一直验证是失败的,折腾了整整一下午。

第三步接收消息和事件

private function checkSignature()
{
    $signature = $_GET["signature"];
    $timestamp = $_GET["timestamp"];
    $nonce = $_GET["nonce"];
    $token = TOKEN;
    $tmpArr = array($token, $timestamp, $nonce);
    sort($tmpArr, SORT_STRING);
    $tmpStr = implode( $tmpArr );
    $tmpStr = sha1( $tmpStr );
    if ($tmpStr == $signature ) {
        return true;
    } else {
        return false;
    }
}

若验证得以通过,那么当用户于小程序之中向客服发送消息之际,或者触发某些特定的 events 之时,微信服务器便会运用 POST 请求将数据推送至你的 URL 之上。数据表现形成取决于你在此之前所选用的模式,其间涵盖了用户的 openid、消息详细之内容、消息所属之类型等诸多信息。

这里存在一个必须予以留意的坑,你的服务器需要在5秒之内进行回复,不然微信将会进行三次重试。要是超过五次都未能成功,用户那边便会看见提示表明客服暂时没办法提供服务。我提议在代码当中把消息处理逻辑以及回复逻辑予以分开,先迅速回复一个空串告知微信已收到,接着再缓缓处理业务逻辑。

云函数接收消息推送

配置云函数推送文件

要是你运用的是云开发,那么事情便会简便许多。无需自行搭建服务器,直接于项目根目录创建一个temp-cloud-base-message.json文件,对云函数名称以及触发条件予以配置。在写完之后,右键点击文件选择上传配置,这些配置便会被同步至云端。

这种方式具备相当显著的优势,无需对服务器运维予以考量,云开发能够自动进行扩缩容。然而当前暂时仅支持客服消息推送,其他种类的消息当下还无法得以运用。配置文件的格式呈现出固定的状态,依照官方文档抄写一遍便可,要留意env_id需填写你自身的环境ID。

编写云函数处理逻辑

在云函数被触发这个时候,event 参数当中所包含的便是微信推送过来的数据,并且这些数据统一呈现为 JSON 格式。你能够如同编写普通云函数那样去处理这些消息,像是按照用户所发送的关键词回归不一样的内容。要是想要回复消息,那就需要调用微信的客服消息接口,要是采用云调用的方式,连 access_token 都无需自己去维护。

给你做个示例,当用户发送“你好”时,你能够直接return {"content":"收到" } ,然而更为规范的做法是调用cloud.openapi.customerServiceMessage.send这个接口。云函数具备另一个好处,即代码能够进行热更新 ,修改完成后直接上传 ,这与传统服务器不同 ,传统服务器还需要重启。

{
  "enable": true,
  "callbacks": [
    {
      "msgType": 1,
      "functionName": "云函数名",
      "env": "环境ID"
    }
  ]
}

两种接入方式讲完,我想问你,实际开发里,你是更倾向于亲手搭建服务器从而完完全全进行掌控呢,还是乐意采用云开发以便省心又省力?欢迎于评论区分享你的备选,以及曾走过的弯路,同时点赞收藏此篇文章,到下次配置消息推送之时,直接依照其进行操作便可。