通过 Stripe(网页)成功交易后,Apple Pay/Google Pay 付款表不会消失和超时

问题描述 投票:0回答:1

我遇到一个奇怪的问题,我的 Apple Pay 和 Google Pay 付款单没有收到通过 Stripe 的交易结果。我有警报记录代码中发生的情况,并且交易按预期立即成功,但付款单对此没有反应并最终超时。这是支付按钮的 JS:(假设我的代码有我实际可发布的条带密钥)

function initializePaymentButton(businessId, basePrice) {
            const stripe = Stripe('pk_test_XXXXXXXXXXXXXXXXXXXXXXXX');
            const elements = stripe.elements();

            const paymentRequest = stripe.paymentRequest({
                country: 'US',
                currency: 'usd',
                total: {
                    label: 'Total',
                    amount: Math.round(basePrice * 100), 
                },
                requestPayerName: true,
                requestPayerEmail: true,
            });

            paymentRequest.canMakePayment().then(function(result) {
                if (result) {
                    const paymentButton = elements.create('paymentRequestButton', {
                        paymentRequest: paymentRequest,
                    });
                    paymentButton.mount(`#pay-button-container-${businessId}`);

                    paymentRequest.on('paymentmethod', async (ev) => {
                        const createPaymentIntent = httpsCallable(functions, 'createPaymentIntent');
                        const response = await createPaymentIntent({ businessId });

                        if (response.data.clientSecret) {
                            const { error, paymentIntent } = await stripe.confirmCardPayment(response.data.clientSecret, {
                                payment_method: ev.paymentMethod.id,
                            });

                            if (error) {
                                alert(`Payment failed: ${error.message}`);
                            } else {
                                alert(`Payment successful: PaymentIntent ID: ${paymentIntent.id}`);
                            }
                        } else {
                            alert("Failed to create PaymentIntent.");
                        }
                    });
                } else {
                    alert('Google/Apple Pay is not available');
                }
            }).catch((error) => {
                alert('Error checking payment availability: ' + error.message);
            });
        }

iPhone 上的结果图如下: 超时后显示“付款未完成”,后面有购买成功提示

我添加了支持的网络:

   supportedNetworks: ['visa', 'mastercard', 'amex', 'discover'], 
但这并没有什么区别。我检查了服务器上的 paymentIntent 函数日志和 Stripe 上的交易活动,没有发现任何异常。我猜我错过了客户端的一些基本内容,但我就是找不到它。我在 Android 上对此进行了测试,得到了相同的结果,尽管 Google Pay 需要更长的时间才能超时。在这两种情况下,交易都会在后台按预期进行,从技术上讲,除了接收结果的付款单之外,一切正常。

javascript stripe-payments
1个回答
0
投票

通常,工作表应在进入paymentRequest.on('paymentmethod'..处理程序之前关闭

。但是,您可以尝试以下一些方法:

    将创建 PaymentIntent 的逻辑移至
  1. paymentRequest.on('paymentmethod'..
     之外。理想情况下,您预先创建 PaymentIntent 并检索 
    client_secret
    ,然后在该处理程序中,只需立即使用它来 
    confirmCardPayment
  2. 放置断点和日志来验证处理程序中运行了哪些行。
  3. 将与 PaymentIntent Id 和可公开访问的 URL 集成的可重现示例发送给 Stripe 支持人员,他们将帮助您进一步排除故障。
© www.soinside.com 2019 - 2024. All rights reserved.