From 5253bc8d35929a18357c37c7b0f2c8dfe240aa02 Mon Sep 17 00:00:00 2001 From: erio Date: Fri, 6 Mar 2026 22:40:09 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E6=94=AF=E4=BB=98=E5=AE=9D=20H5=20?= =?UTF-8?q?=E4=B8=8B=E5=8D=95=E5=A4=B1=E8=B4=A5=E6=97=B6=20fallback=20?= =?UTF-8?q?=E5=88=B0=20PC=20=E9=A1=B5=E9=9D=A2=E6=94=AF=E4=BB=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 与微信支付保持一致的 fallback 策略。 Co-Authored-By: Claude Opus 4.6 --- src/lib/alipay/provider.ts | 49 ++++++++++++++++++++++---------------- 1 file changed, 29 insertions(+), 20 deletions(-) diff --git a/src/lib/alipay/provider.ts b/src/lib/alipay/provider.ts index df4e06a..f43d23e 100644 --- a/src/lib/alipay/provider.ts +++ b/src/lib/alipay/provider.ts @@ -22,27 +22,36 @@ export class AlipayProvider implements PaymentProvider { }; async createPayment(request: CreatePaymentRequest): Promise { - const method = request.isMobile ? 'alipay.trade.wap.pay' : 'alipay.trade.page.pay'; - const productCode = request.isMobile ? 'QUICK_WAP_WAY' : 'FAST_INSTANT_TRADE_PAY'; - - const url = pageExecute( - { - out_trade_no: request.orderId, - product_code: productCode, - total_amount: request.amount.toFixed(2), - subject: request.subject, - }, - { - notifyUrl: request.notifyUrl, - returnUrl: request.returnUrl, - method, - }, - ); - - return { - tradeNo: request.orderId, - payUrl: url, + const buildPayUrl = (mobile: boolean) => { + const method = mobile ? 'alipay.trade.wap.pay' : 'alipay.trade.page.pay'; + const productCode = mobile ? 'QUICK_WAP_WAY' : 'FAST_INSTANT_TRADE_PAY'; + return pageExecute( + { + out_trade_no: request.orderId, + product_code: productCode, + total_amount: request.amount.toFixed(2), + subject: request.subject, + }, + { + notifyUrl: request.notifyUrl, + returnUrl: request.returnUrl, + method, + }, + ); }; + + let url: string; + if (request.isMobile) { + try { + url = buildPayUrl(true); + } catch { + url = buildPayUrl(false); + } + } else { + url = buildPayUrl(false); + } + + return { tradeNo: request.orderId, payUrl: url }; } async queryOrder(tradeNo: string): Promise {