1 回答

TA貢獻(xiàn)1811條經(jīng)驗(yàn) 獲得超5個(gè)贊
這里需要考慮以下幾點(diǎn):
/payment/create
通過掛鉤調(diào)用useEffect
,您將在每次組件更新時(shí)創(chuàng)建一個(gè)新的 PaymentIntent。這是非常低效的,并且會(huì)給您留下許多未使用的 PaymentIntents,使您的 Stripe 帳戶變得混亂。相反,您應(yīng)該只在用戶打算購(gòu)買某物時(shí)創(chuàng)建 PaymentIntent,例如當(dāng)他們單擊“購(gòu)買”按鈕時(shí)。您正在傳遞要從客戶那里收取的總金額。這意味著惡意用戶將許多東西添加到他們的購(gòu)物車然后編輯該請(qǐng)求以確保他們被收取的費(fèi)用比您預(yù)期的少得多是微不足道的。所有與計(jì)算總金額有關(guān)的邏輯都應(yīng)該在服務(wù)器上完成,而不是客戶端。
您的服務(wù)器日志沒有顯示任何實(shí)際付款失敗。由于您是在客戶端進(jìn)行確認(rèn),因此您可能在那里遇到錯(cuò)誤,但在看到錯(cuò)誤之前進(jìn)行了重定向。您應(yīng)該監(jiān)聽錯(cuò)誤對(duì)象而不是立即重定向:
stripe.confirmCardPayment(clientSecret, {
payment_method: {
card: elements.getElement(CardElement)
}
}).then((result) => {
if (result.error) {
// payment failed, do something with the error
console.log(result.error.message);
} else {
setSucceeded(true);
setError(null)
setProcessing(false)
history.replace('/order')
});
您還可以通過查看儀表板來檢查您的 Stripe 日志:https://dashboard.stripe.com/test/logs
添加回答
舉報(bào)