CRMEB 是开源商城系统,PHP + ThinkPHP 6,支持小程序、H5、PC、APP。

部署本身不难,但支付回调这一步很多人卡住。订单显示已付款,后台却没收到,或者用户付了钱但没发货。

回调的三个环节

代码块
用户下单 → 微信/支付宝 → 回调 notify.php → 改订单状态

任何一环断了,都表现为「钱付了,货没发」。

排查顺序要从回调有没有收到请求开始,而不是从代码开始看。

第一步:确认回调有没有进来

CRMEB 后台有支付日志,看有没有对应记录。一条都没有,说明请求根本没到服务器。

用 Nginx 日志确认:

bash
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. 微信支付后台能保存回调地址(不报错)
  2. 用 1 分钱的测试商品下单
  3. 付款后 5 秒内,Nginx 日志出现 /notify 请求
  4. CRMEB 支付日志出现记录,状态「成功」
  5. 后台订单状态变成「已付款」
  6. 自动发货或加积分

六项全过,回调就是通的。

一个建议

先用 1 分钱的商品测,别用正式价格。 调试过程中会反复下单、退款,用真实价格容易乱账。

俗人源码网免责声明:

1、本站所有资源均收集于互联网,分享目的仅限学习与参考。如有侵权,请联系 1685698671@qq.com 及时删除!

2、本站资源不保证完整性和安全性,下载后请自行检测。使用过程中出现的任何问题均与本站无关,敬请自行处理。

3、本站资源仅限个人学习研究使用,严禁用于任何违法违纪用途。因使用者违规使用产生的一切后果,由使用者自行承担,本站不承担任何责任。