如何在 Stripe 中更新客户默认支付方式?

sni*_*guu 9 java stripe-payments

假设我们已经创建了一种付款方式 - pm_xxx。当我们创建客户时,我们可以通过java代码将此方法作为默认付款方式附加到客户:

CustomerCreateParams.Builder customerCreateParamsBuilder = CustomerCreateParams.builder()
                    .setEmail(email)
                    .setPaymentMethod('pm_xxx');       
Customer.create(customerCreateParamsBuilder.build());
Run Code Online (Sandbox Code Playgroud)

不幸的是,更新客户的相应 api 不可用。所以问题是在 Stripe 中更新客户默认付款方式的首选方式是什么?

编辑:基于@karllekko 的回答,因为我的用例是定期付款,所以我结合了 2 个操作:将客户附加到付款方式:

paymentMethod.attach(PaymentMethodAttachParams.builder().setCustomer(customer.getId()).build());            
Run Code Online (Sandbox Code Playgroud)

并为客户发票设置默认付款方式:

customer.update(CustomerUpdateParams.builder().setInvoiceSettings(CustomerUpdateParams.InvoiceSettings.builder().setDefaultPaymentMethod(token).build()).build());
Run Code Online (Sandbox Code Playgroud)

kar*_*kko 14

需要注意的重要一点是,在 PaymentMethods API 上,没有客户级别的默认 PaymentMethod 概念。(0) 如果对已保存的客户进行一次性付款,则在进行 API 调用以创建该付款的 PaymentIntent 时,必须提供客户的 ID所选 PaymentMethod的 ID 。(1)

payment_method创建客户时的设置(如您的示例 Java 代码)是一个方便的函数,可在客户创建时将 PaymentMethod 附加到客户。没有更新客户的等价物 - 相反,您只需将 PaymentMethod 保存给他们,作为付款的一部分(save_payment_method使用 PaymentIntent 时),或者使用 /v1/payment_methods 的附加端点:(2)

PaymentMethod pm = PaymentMethod.retrieve("pm_1ErMlwJoUivz182DfXf7OlWQ");
pm.attach(PaymentMethodAttachParams.builder().setCustomer(cus.getId()).build());
Run Code Online (Sandbox Code Playgroud)

(0) - 使用 Stripe Billing 进行定期付款有一个例外 - 在这里,您可以设置客户的发票设置,或特定订阅的default_payment_method

(1) - https://stripe.com/docs/payments/payment-intents/off-session#create-payment-intent

(2) - https://stripe.com/docs/payments/payment-methods/saving


小智 12

PaymentMethod.attach 文档页面 (1) 是这样说的:

要将此 PaymentMethod 用作发票或订阅付款的默认值,请将客户上的 invoice_settings.default_payment_method 设置为 PaymentMethod 的 ID。

因此,您可以使用 Customer.update API 路由 (2) 并填充该invoice_settings属性。

(1) - https://stripe.com/docs/api/payment_methods/attach

(2) - https://stripe.com/docs/api/customers/update#update_customer-invoice_settings