首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用Stripe API将支付方法附加到支付意图

如何使用Stripe API将支付方法附加到支付意图
EN

Stack Overflow用户
提问于 2022-06-07 23:51:43
回答 1查看 715关注 0票数 1

我已经阅读了许多关于“为什么”我的Stripe支付意图被保留在“客户尚未进入支付方法”状态的文档,以及“我们建议您显式地提供未来的payment_method”的文档,但是我不知道如何做到这一点(提供payment_method)。

当我初始化支付意向对象时,我启用了"AutomaticPaymentMethods“。我只有一个支付方法启用在我的条带仪表板(卡片)。

(此外,我正在使用Blazor和JS互操作来实现这个-如果这是相关的.)

代码语言:javascript
运行
复制
        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调用中设置它?(不管是哪种方式,我是如何获得这种付款方式的?)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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对象上。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72538642

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档