我已经阅读了许多关于“为什么”我的Stripe支付意图被保留在“客户尚未进入支付方法”状态的文档,以及“我们建议您显式地提供未来的payment_method”的文档,但是我不知道如何做到这一点(提供payment_method)。
当我初始化支付意向对象时,我启用了"AutomaticPaymentMethods“。我只有一个支付方法启用在我的条带仪表板(卡片)。
(此外,我正在使用Blazor和JS互操作来实现这个-如果这是相关的.)
string customerId = await getCustomer(); // fetch existing customer from Stripe API based on current user or create a new one
Stripe.PaymentMethodService pms = new PaymentMethodService();
Stripe.PaymentIntentCreateOptions options = new PaymentIntentCreateOptions
{
Amount = p.UnitAmount,
Currency = p.Currency,
Customer = customerId,
ReceiptEmail = "test@malinator.com",
Description = "Test Purchase",
StatementDescriptor = "Test Purchase",
AutomaticPaymentMethods = new PaymentIntentAutomaticPaymentMethodsOptions
{
Enabled = true,
},
};
Stripe.PaymentIntentService pis = new Stripe.PaymentIntentService();
Stripe.PaymentIntent pi = pis.Create(options);
return pi;
在结果的支付意图对象上,支付方法为空。
在我的HTML表单上的“payment”中完成了支付细节之后,它仍然是空的。
payment_method是我在创建支付意图对象时可以设置的东西(因为我现在只希望使用“卡”),还是需要在confirm_payment JS调用中设置它?(不管是哪种方式,我是如何获得这种付款方式的?)
发布于 2022-06-08 00:22:50
您的代码创建了一个PaymentIntent
服务器端,价格为10美元。这代表了对客户的总体支付的“状态机”。他们可能永远不付钱,也可能试图支付一次,得到一个失败或一个成功,或者他们可能会被拒绝,尝试另一张牌,看到一个成功。在API中,每个“支付尝试”都表示为Charge
对象,相应的支付方法细节被表示为PaymentMethod
。
现在,所有的“付款尝试”都发生在客户端,您收集支付方法的详细信息,并使用这些来“确认PaymentIntent”。
您提到您正在使用PaymentElement,这是Stripe的较新的UI库组件,用于收集支付方法的详细信息,并接受支付客户端。由于您只接受卡支付,PaymentElement将被初始化使用您的PaymentIntent的client_secret
和呈现卡的形式,以收集这些卡的细节。
这里您需要做的是有一个按钮来“支付”,当点击它时,您的Javascript代码应该从confirmPayment()
调用Stripe.js方法。这样做将使用客户输入的卡详细信息,并尝试确认特定金额和货币的PaymentIntent。这种支付可能会成功,在这种情况下,客户被重定向到您的return_url
,或者它可能被拒绝,在这种情况下,您可以通过处理错误来处理错误细节,从而完成承诺。
这里需要做的是查看客户端代码,确保按预期调用confirmPayment()
,并调试返回的响应,以帮助缩小响应范围。
在成功确认PaymentIntent并具有status: 'succeeded'
之后,它将具有payment_method: 'pm_123'
,即与成功确认相关联的PaymentMethod
对象的id。关于该卡的所有信息都将在payment_method_details
中与其关联的成功的payment_method_details
对象上。
https://stackoverflow.com/questions/72538642
复制相似问题