如何在Stripe中更新客户默认的PaymentMethod?

时间:2019-07-01 07:27:03

标签: stripe-payments

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

CustomerCreateParams.Builder customerCreateParamsBuilder = CustomerCreateParams.builder()
                    .setEmail(email)
                    .setPaymentMethod('pm_xxx');       
Customer.create(customerCreateParamsBuilder.build());

很遗憾,更新客户对应的api不可用。 那么问题是,在Stripe中更新客户默认付款方式的首选方式是什么?

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

paymentMethod.attach(PaymentMethodAttachParams.builder().setCustomer(customer.getId()).build());            

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

customer.update(CustomerUpdateParams.builder().setInvoiceSettings(CustomerUpdateParams.InvoiceSettings.builder().setDefaultPaymentMethod(token).build()).build());

2 个答案:

答案 0 :(得分:3)

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

在创建客户时设置payment_method(就像您的示例Java代码一样)是一种便利功能,可在创建客户时将PaymentMethod附加到客户。没有更新客户的等效方法,而是您只需将PaymentMethod保存为他们,既可以作为付款的一部分(使用PaymentIntent时{save_payment_method),也可以使用/ v1 /的附加端点付款方式:(2)

PaymentMethod pm = PaymentMethod.retrieve("pm_1ErMlwJoUivz182DfXf7OlWQ");
pm.attach(PaymentMethodAttachParams.builder().setCustomer(cus.getId()).build());

(0)-使用“条带化计费”的定期付款有一个例外-在这里,您可以设置客户的invoice settings或特定订阅的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

答案 1 :(得分:2)

PaymentMethod.attach文档页面(1)表示:

  

将此付款方式用作发票或订阅的默认值   付款,在客户上设置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