mirror of
https://github.com/Wei-Shaw/sub2api.git
synced 2026-10-14 12:02:27 +08:00
createAPIPayment 把上游 mapi.php 返回的 payurl/payurl2/qrcode 原样落库。 EasyPay 兼容上游对该字段并不统一:部分实现回站点根相对路径(如 `/api/pay/toapp/<order>`)而非完整地址。而链路上没有任何一层修复它—— sanitizeCreatePaymentResponseDetails 只剥 NUL 字节就写进 pay_url/qr_code, 前端 PaymentQRCodeView.renderQR 又把 qr_code 直接喂给 QRCode.toCanvas。 结果二维码的载荷是一段裸路径:微信扫出来是文本,pay_url 则落到网关自己的 域名下 404,用户无法进入上游收银台。 同文件的 createRedirectPayment 本就自行拼绝对地址(apiBase + "/submit.php?"), 只有 mapi.php 这一支透传;Alipay provider 也早已写明「Setting it as QRCode would let the frontend render an unscannable image」并拒绝产出不可扫的值。 本提交让 EasyPay 与这两处对齐:按实例配置的 apiBase 解析上游回传的引用。 仅补全以 "/" 开头的引用。带 scheme 的一律原样返回,覆盖绝对 https:// 收银台 地址与 weixin:// / wxp:// / alipays:// 等 app 深链;无前导斜杠的引用同样不动, 因为二维码载荷常是不透明 token,把 "OrderToken123" 改写成 "<apiBase>/OrderToken123" 会毁掉一个当前可用的载荷,比本 bug 更糟。 payurl2 优先于 payurl 的选择语义保持不变。 Fixes #6292