1 回答

TA貢獻1811條經驗 獲得超5個贊
這里需要考慮以下幾點:
/payment/create
通過掛鉤調用useEffect
,您將在每次組件更新時創建一個新的 PaymentIntent。這是非常低效的,并且會給您留下許多未使用的 PaymentIntents,使您的 Stripe 帳戶變得混亂。相反,您應該只在用戶打算購買某物時創建 PaymentIntent,例如當他們單擊“購買”按鈕時。您正在傳遞要從客戶那里收取的總金額。這意味著惡意用戶將許多東西添加到他們的購物車然后編輯該請求以確保他們被收取的費用比您預期的少得多是微不足道的。所有與計算總金額有關的邏輯都應該在服務器上完成,而不是客戶端。
您的服務器日志沒有顯示任何實際付款失敗。由于您是在客戶端進行確認,因此您可能在那里遇到錯誤,但在看到錯誤之前進行了重定向。您應該監聽錯誤對象而不是立即重定向:
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
添加回答
舉報