ThinkPHP微信生态集成需分层适配公众号、小程序、支付等模块,核心是配置一致性、请求生命周期控制和加密协议合规性。

ThinkPHP 微信生态集成不是“装个 SDK 就能跑”,而是围绕公众号、小程序、开放平台、支付、JSSDK、消息服务等模块,按项目阶段和框架版本做分层适配。关键不在代码量,而在配置一致性、请求生命周期控制、加密协议合规性这三点上。
公众号消息与事件处理:按 TP 版本选加载路径
TP6 项目直接用 EasyWeChat 6.x + Facade,配置写在 config/wechat.php,控制器中调用 $app->server->serve()->send() 后必须终止脚本——多一个换行或 warning 都会导致微信验签失败。TP5.1 则推荐手动校验 signature:从 $_GET 取 timestamp/nonce/signature/echostr,用本地 token 拼接排序后 sha1 对比,通过才 echo $echostr 并 exit。TP5.0 若无法升级,可用 uctoo/think-easywechat 适配包,它内嵌了 illuminate/container,补全了 Facade 调用能力,避免自己写 Loader 类。
小程序登录与用户态打通:JWT + code2Session 联动
小程序端调 wx.login() 获取 code,后端用该 code 向微信接口 https://api.weixin.qq.com/sns/jscode2session 换取 openid 和 session_key。注意两点:一是 session_key 必须加密存储且不返回给前端;二是建议用 JWT 生成自定义 token,把 openid、unionid(如需)、过期时间打包签名,后续所有接口用该 token 鉴权。ThinkPHP6 可结合 middleware 做全局 token 解析与绑定 User 模型,TP5.1 则适合在 BaseController 的 _initialize() 中统一处理。
微信支付接入:Yansongda/pay 是当前最稳选择
放弃官方 SDK 或零散封装,直接用 yansongda/pay。它抽象了微信 JSAPI、APP、扫码、小程序等全部支付方式,且对 ThinkPHP6 支持开箱即用。配置项(如 mch_id、key、证书路径)统一放在 config/pay.php 或 .env,调用时只需:
立即学习“PHP免费学习笔记(深入)”;
-
Pay::wechat()->mp($params)生成小程序支付参数 -
Pay::wechat()->scan($params)返回扫码支付链接 - 回调地址必须是 HTTPS,接收 XML 后先验证签名,再解析数据,成功处理后返回
<xml><return_code>SUCCESS</return_code><return_msg>OK</return_msg></xml>
别漏掉日志记录和异步查单兜底——微信通知可能丢失,需定时轮询未终态订单。
JSSDK 签名注入:前端页面自动带签名,不手算
不要在前端用 JS 算 signature。后端 Controller 中实例化 JSSDK(推荐用 overtrue/wechat 的 JsSdk 组件),传入当前页面完整 URL($_SERVER['REQUEST_SCHEME'] . '://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']),调用 getSignPackage() 获取 appId/timestamp/nonceStr/signature,再 assign 给模板。特别注意:jsapi_ticket 和 access_token 必须缓存并自动刷新,不能每次请求都重拉——否则调用量超标会触发微信限流。



















