为何Payhere支付通知无法接收,Moodle沙箱付款成功却未触发学生入学
Moodle Payhere沙箱回调异常解决方案
1. 放行Payhere沙箱回调IP段
- Payhere沙箱回调IP与生产环境不一致,服务器安全组、WAF、CDN防火墙默认会拦截未知IP的POST请求,Postman请求来自你本地/自用IP因此无拦截
- 操作方案:将Payhere官方沙箱回调IP段全部加入服务器防火墙、WAF、CDN的放行规则,同时检查
iptables/ufw规则是否放行了对应IP的80/443端口访问 - 排查命令:支付后执行
tail -f /var/log/nginx/access.log(Nginx环境)或tail -f /var/log/apache2/access.log(Apache环境),确认是否有Payhere的IP访问记录
2. 修正回调地址配置
Payhere沙箱默认不向HTTP地址发送回调,且不会跟随3xx重定向跳转,需确认两处配置完全一致:
- Payhere沙箱后台填写的notify回调地址
- Moodle Payhere支付插件中配置的回调地址
- 排查要点:确认地址为HTTPS协议、无多余重定向(如带/不带www、末尾是否带斜杠的差异),否则Payhere回调会直接终止,而Postman默认开启重定向跟随因此请求正常
3. 校验沙箱密钥配置
- 检查Moodle插件中填写的沙箱商户ID、商户密钥与Payhere沙箱后台参数完全一致,Payhere回调携带的签名如果校验不通过,Moodle会直接丢弃请求且不会生成业务日志,Postman请求参数正确因此校验通过
- 排查方案:可临时在Moodle Payhere插件的回调入口代码中增加请求参数打印逻辑,确认是否有回调请求到达应用层
4. 解除回调路径访问限制
- 检查Moodle的
.htaccess、Nginx重写规则、安全插件配置,部分安全规则会拦截无用户Session的POST请求,而Payhere回调属于无Session的服务端请求,需将回调路径设置为无需登录即可访问
内容的提问来源于stack exchange,提问作者Vikum Sanjeewa
相关产品推荐
相关产品推荐

