PHP 实现微信小程序订阅消息推送:Access Token 自动获取与缓存刷新

星野
星野
发布时间:2026-10-13 | 1人浏览过
原创

小程序订阅消息是开发者与用户建立长期沟通的重要渠道,支持个性化内容推送且用户体验更佳。在通过 PHP 调用接口发送消息前,核心难点在于妥善管理接口所需的 access_token,确保其在有效期内并自动更新。

准备工作

在编写代码之前,需要准备好以下信息:

  • 小程序 AppID 和 AppSecret:用于向微信服务器申请 access_token。
  • 消息模板 ID:在微信公众平台后台配置好的订阅消息模板 ID。
  • 接收用户的 OpenID:指定接收消息的小程序用户唯一标识。
  • 服务器环境:需要支持 PHP cURL 扩展,且服务器能够访问外网 API。

核心实现逻辑

由于 access_token 的全局有效时长为 2 小时(7200 秒),直接每次请求都去拉取会触发频率限制。因此,最佳实践是将 token 保存到本地文件中,并在过期前自动重新获取。

第1步:构建封装类

将获取 Token、缓存管理及发送消息的逻辑封装为静态方法,便于在其他业务中调用。我们需要一个配置文件路径来存储 token 数据。

<?php
namespace MyWeChat;
class WeChatApi
{
    // ... (此处省略私有工具方法的详细代码块以节省空间,见完整代码部分)
}

第2步:获取与刷新 Access Token

核心流程判断是否存在有效的缓存文件。若不存在或已过期,则发起新的 HTTP 请求。请注意,为了保证稳定性,我们通常会在有效期结束前 60 秒进行替换。

具体判断逻辑如下:

  1. 读取 access_token.php 中的 expires_at。
  2. 如果当前时间小于 expires_at,直接使用缓存的值。
  3. 否则,调用刷新接口:https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=$appid&secret=$appsecret。
  4. 将新拿到的 access_token 和有效期写入本地文件。

第3步:组装并提交订阅消息请求

使用正确的 access_token,按照 JSON 格式组装消息体,并通过 cURL 的 POST 方式发送至微信接口。sendDyxx.php 中的配置与调用方式如下:

<?php
// 假设上述 WeChatApi 类已在该文件中定义...

$APPID = '你的AppID';
$APPSECRET = '你的AppSecret';
$template_id = '你的订阅消息模板ID';
$openid = 'o9usm0bhIkcbAyxM0RzDXi9tjHhM'; // 测试用 OpenID

$data_template = [
    "character_string1" => ["value" => "2023-08-03"],
    "thing4" => ["value" => "开发测试"]
];

// 执行静态方法
WeChatApi::sendMessageWithAccessToken($APPID, $APPSECRET, $template_id, $openid, $data_template);
?>

常见问题排错

如果在测试过程中遇到发送失败的情况,请依次检查:

  • Template ID 是否正确:确认使用了当前有效的模板 ID,且字段名(如 thing4)与模板后台设置完全一致。
  • OpenID 来源:确保 touser 对应的 OpenID 确实是授权登录过该小程序的用户。
  • cURL 报错信息:打印 curl_error($ch) 查看网络错误或 JSON 语法错误,确保 json_encode 转换无误。
  • Token 权限:如果报 40001 或 40003,通常是 Token 失效或被覆盖,检查文件读写权限及并发情况。

技术拓展

对于日常业务,单个或少量推送可以直接如上操作。但如果拥有海量用户需要进行订阅消息群发,频繁的文件读写可能导致阻塞。此时建议引入 Redis 异步消息队列(如 Redis List 或 Topic),将任务下发给后台 Cron Job 或常驻进程进行处理,以实现高并发下的稳定推送。

总结

通过上述 PHP 类,我们实现了 access_token 的自动化生命周期管理,解决了手动刷新麻烦且易出错的痛点。这种模块化设计不仅保证了代码的可移植性,也为后续接入更多微信能力(如客服消息等)奠定了基础。

以上就是 PHP 实现微信小程序订阅消息推送及 Access Token 自动缓存刷新的详细内容。更多关于小程序开发与 PHP 实战的资料,请关注本站其它相关文章!

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表