Этот PaymentMethod ранее использовался без привязки к Клиенту или был отделен от Клиента и не может быть использован снова - PullRequest
5 голосов
/ 21 февраля 2020

Странная проблема здесь. Следуя документации, я присоединяю 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.

Ответы [ 2 ]

2 голосов
/ 22 февраля 2020

Похоже, что есть проблема с документацией Stripe.

Вкл. https://stripe.com/docs/payments/save-after-payment#web -собрать данные карты они имеют:

    setup_future_usage: 'off_session'

Но на https://stripe.com/docs/payments/save-and-reuse#web -собрать данные карты они пропускают эту критическую строку.

Но в вашем случае, выбирает ли пользователь, хотят ли они сохранить свою карту на внешнем интерфейсе? Тогда вам не нужно сохранять карту на бэкэнде, и вы можете сохранить ее в вызове 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.

0 голосов
/ 21 февраля 2020

Вероятно, вы справитесь с шагом 4. Вот что вам нужно сделать: https://stripe.com/docs/payments/save-after-payment

...