首页 > 解决方案 > 此 PaymentMethod 之前使用过但未附加到客户或已与客户分离,并且可能不会再次使用

问题描述

这里有一个奇怪的问题。按照文档,我将 PaymentMethod 附加到现有客户,但它不起作用。粗略地说,我:

  1. 创建客户
  2. 与客户创建付款意图
  3. 创建一个带有支付意图的卡片元素
  4. 客户输入卡信息
  5. 确认支付成功并将意图发送回后端
  6. 如果意图成功并且客户选择保存他们的卡,则使用意图方法和客户创建付款方式
  7. 得到错误

编码:

  1. Python:stripe.Customer.create(email=user.email, name=user.full_name)
  2. Python:stripe.PaymentIntent.create(amount=amount, currency="aud", customer=user.stripe_customer_id)
  3. js:Stripe('{{ stripe_publishable_key }}').elements().create("card");
  4. 用户:输入卡信息
  5. js: stripe.confirmCardPayment('{{ clientSecret }}', { payment_method: { card: card, billing_details: { // name: 'Jenny Rosen' }, } }).then(function (result) { if (result.error) { // Show error to your customer (e.g., insufficient funds) console.log(result.error.message); var displayError = document.getElementById('card-errors'); displayError.textContent = result.error.message; } else { // The payment has been processed! if (result.paymentIntent.status === 'succeeded') { // Show a success message to your customer // There's a risk of the customer closing the window before callback // execution. Set up a webhook or plugin to listen for the // payment_intent.succeeded event that handles any business critical // post-payment actions. $('#fake-submit').click(); } } });
  6. Python:stripe.PaymentMethod.attach(stripe.PaymentIntent.retrieve(intent_id).payment_method, customer=user.stripe_customer_id)
  7. 错误:Request req_request_id: This PaymentMethod was previously used without being attached to a Customer or was detached from a Customer, and may not be used again.

标签: javascriptpythonstripe-payments

解决方案


Stripe 文档似乎存在问题。

https://stripe.com/docs/payments/save-after-payment#web-collect-card-details他们有:

    setup_future_usage: 'off_session'

但是在https://stripe.com/docs/payments/save-and-reuse#web-collect-card-details他们错过了这条关键线。

但是在您的情况下,用户是否选择是否要将卡保存在前端?然后您不需要将卡保存在后端,可以将其保存在confirmCardPayment调用中:https ://stripe.com/docs/js/payment_intents/confirm_card_payment#stripe_confirm_card_payment-data-save_payment_method :

save_payment_method布尔值

如果PaymentIntent与客户关联并且此参数设置为true,则提供的付款方式将附加到客户。默认为false


推荐阅读