我遇到一个奇怪的问题,我的 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 需要更长的时间才能超时。在这两种情况下,交易都会在后台按预期进行,从技术上讲,除了接收结果的付款单之外,一切正常。
通常,工作表应在进入paymentRequest.on('paymentmethod'..
处理程序之前关闭
。但是,您可以尝试以下一些方法:
paymentRequest.on('paymentmethod'..
之外。理想情况下,您预先创建 PaymentIntent 并检索
client_secret
,然后在该处理程序中,只需立即使用它来
confirmCardPayment
。