Halo商业版商城“易支付”无法使用 #168
Unanswered
cloudsummer
asked this question in
Q&A
Replies: 2 comments 6 replies
-
|
搞了3个通宵,难受死了 |
Beta Was this translation helpful? Give feedback.
4 replies
-
|
另外再反应一个bug,就是自动发货后台”卡密“设置界面下面的”X条/页“设置后不能立即生效,比如设置成”100条/页“要点一下别的再跳转回来才能生效,而且过一下就又会失效还是显示20条/页,你们检查一下 |
Beta Was this translation helpful? Give feedback.
2 replies
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment


Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
-
环境信息
• Halo商业版:[2.23.1]
• 部署方式:Docker
• 易支付平台:ZPAY(https://zpayz.cn/ ZPAY后台是支付方式:微信支付)
问题现象
在Halo后台配置“易支付”后,前台下单进入支付页,选择对应支付方式,右侧始终提示:
暂无支付信息,请联系管理员
浏览器Network中,initiate-payment接口返回200,但响应内容为:
{
"sessionCode": "026524970218b5bc80b0fc741b2aaf42",
"paymentProvider": "EASY_PAY",
"paymentScene": "PC_WEB",
"payload": {
"success": false,
"errorMessage": "Empty response from payment gateway"
}
}
后台配置
Halo后台易支付配置如下:
• 网关地址:
• 商户号:ZPAY提供的PID
• 商户私钥:ZPAY提供的KEY
• 支付方式:微信
• 支付渠道ID:微信通道对应的cid
在宿主机和Halo容器内,手工按ZPAY文档规则组参并POST到网关,均能成功返回:
{"code":1,"msg":"success",...,"payurl":"...","qrcode":"...","img":"..."}说明:
• ZPAY商户配置正常
• 通道正常
• PID/KEY/cid正常
• 网络链路正常
ZPAY的mapi.php返回体虽然是JSON,但响应头是:
content-type: text/html; charset=utf-8为了排除这个影响,我在OpenResty里加了适配层:
• 请求:https://我域名/__zpay/mapi.php
• 转发到:https://zpayz.cn/mapi.php
• 强制把响应头改为:
application/json; charset=utf-8并已验证:
curl -sS -D- -o /dev/null https://我域名/__zpay/mapi.php返回头确认为:
content-type: application/json; charset=utf-8在Halo容器内执行:
curl -sS -D- -o /dev/null https://我域名/__zpay/mapi.php同样返回:
content-type: application/json; charset=utf-8说明:
• Halo容器到适配层链路正常
• 不是FRP/反向代理/证书问题
4. 同一Halo容器内,手工POST到适配层也能成功
在Halo容器内执行:
可成功返回:
{"code":1,"msg":"success",...}这说明:
• 适配层没问题
• 网关没问题
• 容器网络没问题
问题已经基本可以定位为:
Halo商业版内置“易支付”实现,在请求ZPAY这类易支付接口时,构造的参数/签名/字段处理与该平台不兼容
即:
• 不是部署环境问题
• 不是FRP/OpenResty问题
• 不是网关地址问题
• 不是商户号/密钥/渠道ID问题
• 而是Halo程序自身发给网关的请求,与手工成功请求存在差异
建议开发者重点检查以下内容:
1. 易支付请求的签名规则是否与常见易支付实现一致
• sign、sign_type、空值是否参与签名
• 参数排序规则是否正确
• 是否进行了不该有的URL编码
2. 是否传入了ZPAY不接受的字段或字段格式
• clientip
• notify_url
• return_url
• device
• param
• cid
3. 对失败响应的处理是否过于严格
• 如果上游失败时返回格式稍有差异,Halo是否直接吞掉并统一包装成
Empty response from payment gateway
4. 是否可增加调试日志
希望能打印:
• 实际POST到易支付网关的表单参数(可打码敏感字段)
• 上游原始响应体
这样用户可自行排查兼容性问题
Beta Was this translation helpful? Give feedback.
All reactions