From 0c6c6e0ea67b9699a4f35459da3eaebecff9020b Mon Sep 17 00:00:00 2001 From: erio Date: Fri, 6 Mar 2026 22:34:57 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E5=BE=AE=E4=BF=A1=20H5=20=E6=94=AF?= =?UTF-8?q?=E4=BB=98=E6=9C=AA=E5=BC=80=E9=80=9A=E6=97=B6=20fallback=20?= =?UTF-8?q?=E5=88=B0=20Native=20=E6=89=AB=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 移动端尝试 H5 下单失败时自动降级为 Native 二维码模式, 避免因 H5 权限未开通导致支付不可用。 Co-Authored-By: Claude Opus 4.6 --- src/lib/wxpay/provider.ts | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/src/lib/wxpay/provider.ts b/src/lib/wxpay/provider.ts index 82decfb..e27b990 100644 --- a/src/lib/wxpay/provider.ts +++ b/src/lib/wxpay/provider.ts @@ -35,18 +35,19 @@ export class WxpayProvider implements PaymentProvider { throw new Error('WXPAY_NOTIFY_URL is required'); } - if (request.isMobile) { - if (!request.clientIp) { - throw new Error('clientIp is required for H5 payment'); + if (request.isMobile && request.clientIp) { + try { + const h5Url = await createH5Order({ + out_trade_no: request.orderId, + description: request.subject, + notify_url: notifyUrl, + amount: request.amount, + payer_client_ip: request.clientIp, + }); + return { tradeNo: request.orderId, payUrl: h5Url }; + } catch { + // H5 未开通,fallback 到 Native 扫码 } - const h5Url = await createH5Order({ - out_trade_no: request.orderId, - description: request.subject, - notify_url: notifyUrl, - amount: request.amount, - payer_client_ip: request.clientIp, - }); - return { tradeNo: request.orderId, payUrl: h5Url }; } const codeUrl = await createPcOrder({