From dc78a419121641ed8dc3f52fb6423aab04a45c25 Mon Sep 17 00:00:00 2001 From: erio Date: Fri, 6 Mar 2026 16:32:50 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20alipay=5Fdirect=20=E6=A1=8C=E9=9D=A2?= =?UTF-8?q?=E7=AB=AF=E8=B7=B3=E8=BD=AC=E5=88=B0=E6=94=AF=E4=BB=98=E5=AE=9D?= =?UTF-8?q?=E6=94=B6=E9=93=B6=E5=8F=B0=E8=80=8C=E9=9D=9E=E6=98=BE=E7=A4=BA?= =?UTF-8?q?=E4=BA=8C=E7=BB=B4=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit alipay.trade.page.pay 返回的 payUrl 是跳转链接,不应作为 二维码内容展示。改为显示"前往支付宝收银台"按钮,在新标签页 打开支付宝收银台页面。 Co-Authored-By: Claude Opus 4.6 --- src/components/PaymentQRCode.tsx | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/src/components/PaymentQRCode.tsx b/src/components/PaymentQRCode.tsx index 3ae1655..27650de 100644 --- a/src/components/PaymentQRCode.tsx +++ b/src/components/PaymentQRCode.tsx @@ -71,9 +71,11 @@ export default function PaymentQRCode({ const paymentMethodListenerAdded = useRef(false); const qrPayload = useMemo(() => { + // alipay_direct 的 payUrl 是跳转链接,不应生成二维码 + if (isAlipayDirect && !qrCode) return ''; const value = (qrCode || payUrl || '').trim(); return value; - }, [qrCode, payUrl]); + }, [qrCode, payUrl, isAlipayDirect]); useEffect(() => { let cancelled = false; @@ -314,6 +316,8 @@ export default function PaymentQRCode({ }; const isWx = paymentType?.startsWith('wxpay'); + // alipay_direct 使用电脑网站支付,payUrl 是跳转链接不是二维码内容 + const isAlipayDirect = paymentType === 'alipay_direct'; const iconSrc = isStripe ? '' : isWx ? '/icons/wxpay.svg' : '/icons/alipay.svg'; const channelLabel = isStripe ? 'Stripe' : isWx ? '\u5FAE\u4FE1' : '\u652F\u4ED8\u5B9D'; const iconBgClass = isStripe ? 'bg-[#635bff]' : isWx ? 'bg-[#07C160]' : 'bg-[#1677FF]'; @@ -452,6 +456,21 @@ export default function PaymentQRCode({ {TEXT_H5_HINT}

+ ) : isAlipayDirect && payUrl ? ( + <> + + {channelLabel} + 前往支付宝收银台 + +

+ {TEXT_H5_HINT} +

+ ) : ( <> {qrDataUrl && (