EasyWeChat 需配置公众号参数、公网可访问HTTPS回调地址及正确处理GET/POST请求才能对接微信接口;仅composer require无法直接运行,须确保token、AppId等与后台一致且PHP开启openssl/curl扩展。

EasyWeChat 不是通过 composer “安装”就能直接对接微信接口的——它只是个 SDK,真正能跑起来,得先配好公众号/开放平台配置、拿到有效凭证、处理好服务器校验和回调逻辑。
为什么 composer require "overtrue/wechat" 后还是 404 或 signature invalid
常见错误现象:网页访问你的回调地址返回 404;微信服务器推送事件时提示 signature invalid;用 easywechat 实例调 server->serve() 却没响应。
- 微信校验和后续回调都依赖你服务器能正确响应 GET/POST 请求,且 URL 必须是公网可访问的(本地
localhost或内网 IP 直接失败) -
AppId、secret、token、aes_key(如果启用消息加密)必须和公众号后台“基本配置”里填的一致,一个字符错都会signature invalid - 别漏掉
token—— 它不是 AppSecret,而是你在公众号后台手动设置的字符串,用于生成签名,SDK 会自动参与计算 - PHP 要开启
openssl和curl扩展,否则AccessToken拉不下来,后续所有接口都报错
怎么写最简可用的服务器验证和事件接收代码
使用场景:刚注册完公众号,想快速验证服务器是否接入成功,并收到用户发来的文本消息。
- 入口文件(如
index.php)需放在 Web 根目录下,URL 形如https://yourdomain.com/index.php,并在公众号后台填这个完整地址 - 确保 Web 服务器(Nginx/Apache)已将
.php文件交由 PHP 解析,且没拦截 POST 请求体(比如 Nginx 的client_max_body_size太小会导致消息收不到) - 示例代码只需三步:配置 → 实例化 → serve
$config = [
'app_id' => 'wx1234567890abcdef',
'secret' => 'your_app_secret_here',
'token' => 'your_token_here',
'aes_key' => '', // 可为空,未开启消息加密时留空
];
$app = \EasyWeChat\Factory::officialAccount($config);
$response = $app->server->serve(); // 这行会自动处理 GET(验证)和 POST(事件/消息)
$response->send(); // 输出响应,别漏掉
为什么 server->serve() 不触发事件处理逻辑
常见错误现象:服务器验证通过了,但用户发消息后没日志、没回复、也没进你写的 handle 回调。
-
serve()默认只做基础路由分发,你要自己注册事件处理器,比如:$app->server->push(function ($message) { return "收到"; }); - 别在
serve()之前或之后 echo/print_r 任何内容——HTTP 响应体开头不能有空格或输出,否则 XML 签名验证失败 - 微信发送的是 XML,但 EasyWeChat 已帮你转成数组或对象,直接用
$message['MsgType']判断类型即可,不用再解析 XML - 如果你用了 Swoole 或 Hyperf 等常驻进程框架,
serve()不适用——它基于传统 CGI/FPM 生命周期设计,得换用EasyWeChat\Kernel\Http\Server或自行解析请求
开发阶段怎么绕过域名和 HTTPS 强制要求
使用场景:本地调试、CI 测试、内网环境,不想买域名配 SSL。
- 微信官方不提供真·本地调试方案,但你可以用
ngrok或localtunnel映射本地端口到公网 HTTPS 地址(如https://xxx.ngrok.io),填到公众号后台即可 - 别用
http://—— 微信从 2021 年起强制要求回调 URL 必须是 HTTPS,且证书有效,自签名证书也不行 - 测试时关闭公众号后台的“消息加解密”,用明文模式,避免因
aes_key配错导致整个流程静默失败 - 可以用
EasyWeChat\Kernel\Support\XML类手动构造测试 XML 请求,用curl -X POST发给自己的接口,跳过微信服务器环节
最难的其实不是装包或写几行代码,而是搞清哪一步该由微信做、哪一步该由你服务器做、哪一步 SDK 已经默默帮你做了——比如签名生成是 SDK 做的,但 token 必须和后台一致;比如消息解密是 SDK 做的,但你得确保 aes_key 没多空格。这些细节卡住时,翻 overtrue/wechat 的 src/Server/ 和 src/Kernel/ 目录比看文档更快。











