CRMEB 是开源商城系统,PHP + ThinkPHP 6,支持小程序、H5、PC、APP。
部署本身不难,但支付回调这一步很多人卡住。订单显示已付款,后台却没收到,或者用户付了钱但没发货。
回调的三个环节
用户下单 → 微信/支付宝 → 回调 notify.php → 改订单状态
任何一环断了,都表现为「钱付了,货没发」。
排查顺序要从回调有没有收到请求开始,而不是从代码开始看。
第一步:确认回调有没有进来
CRMEB 后台有支付日志,看有没有对应记录。一条都没有,说明请求根本没到服务器。
用 Nginx 日志确认:
tail -f /www/wwwlogs/你的域名.log | grep -i "notify"
然后去微信支付后台点「重新通知」,观察日志。
没有日志,就是这两个原因:
| 原因 | 表现 |
|---|---|
| 回调地址填错 | 微信显示「回调地址不合法」 |
| 域名没备案 / 端口不对 | 后台能保存,但从不回调 |
第二步:回调地址的坑
微信支付要求回调地址:
- 必须是 HTTPS
- 必须是 80/443 端口
- 域名必须已备案
- 不能带任何查询参数
常见的错误写法:
http://xxx.com/notify <- 没 HTTPS
https://xxx.com:8080/notify <- 带端口
https://xxx.com/notify?x=1 <- 带参数
http://127.0.0.1/notify <- 本地地址
四种微信都会拒绝,但后台保存时不一定报错,所以很难发现。
第三步:有请求但不改状态
说明回调进来了,但处理逻辑挂了。三个常见原因:
① 验签失败
证书路径写错。CRMEB 的支付证书放在:
/public/cert/wechat/apiclient_cert.pem
/public/cert/wechat/apiclient_key.pem
两个文件都要有,权限 644,属主 www。
② 金额校验不通过
代码会对比「微信通知的金额」和「订单表里的金额」。如果用户用了优惠券、积分抵扣而代码没处理,就会不一致,直接返回失败。
③ 伪静态规则错
CRMEB 是 ThinkPHP,伪静态要用专门的规则:
location / {
if (!-e $request_filename) {
rewrite ^(.*)$ /index.php?s=$1 last;
}
}
不能用 WordPress 那套规则。 用错了首页能打开,但所有接口都 404。
第四步:证书和密钥
微信支付配置项有四个:
| 项 | 从哪来 |
|---|---|
| APPID | 微信公众平台 |
| 商户号 mch_id | 微信支付商户平台 |
| API 密钥 APIv3 | 商户平台 → 账户中心 → API 安全 |
| 证书 apiclient | 商户平台下载 |
最容易错的是 API 密钥——它和「APIv2 密钥」不是一个东西,位置也不一样。
验证清单
- 微信支付后台能保存回调地址(不报错)
- 用 1 分钱的测试商品下单
- 付款后 5 秒内,Nginx 日志出现
/notify请求 - CRMEB 支付日志出现记录,状态「成功」
- 后台订单状态变成「已付款」
- 自动发货或加积分
六项全过,回调就是通的。
一个建议
先用 1 分钱的商品测,别用正式价格。 调试过程中会反复下单、退款,用真实价格容易乱账。
1、本站所有资源均收集于互联网,分享目的仅限学习与参考。如有侵权,请联系 1685698671@qq.com 及时删除!
2、本站资源不保证完整性和安全性,下载后请自行检测。使用过程中出现的任何问题均与本站无关,敬请自行处理。
3、本站资源仅限个人学习研究使用,严禁用于任何违法违纪用途。因使用者违规使用产生的一切后果,由使用者自行承担,本站不承担任何责任。



评论(0)