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
添加回答
举报