Как я могу предоставить платежные данные для соответствия SCA, используя Stripe Payment Intents? - PullRequest
0 голосов
/ 17 апреля 2019

Я использую Stripe Payment Intents, следуя инструкциям в Payment Intents Quickstart . Как отмечают документы:

Чтобы гарантировать, что ваша интеграция готова к SCA, обязательно укажите имя клиента, адрес электронной почты, адрес для выставления счета и адрес доставки (если имеется) для вызова stripe.handleCardPayment.

const stripe = Stripe('pk_test_lolnothisisnotreal', {
  betas: ['payment_intent_beta_3']
})

За документ handleCardPayment в ссылке , я предоставляю платежные реквизиты в указанном формате :

// https://stripe.com/docs/stripe-js/reference#stripe-handle-card-payment
const {paymentIntent, error} = await stripe.handleCardPayment(clientSecret, cardElement, {
  // https://stripe.com/docs/api/payment_methods/create#create_payment_method-billing_details
  payment_method_data: {
    billing_details: {
      address: {
        line1: cardholderAddressLine1.value,
        line2: cardholderAddressLine2.value,
        city: cardholderAddressCity.value,
        state: cardholderAddressState.value,
        country: cardholderAddressCountry.value,
        postal_code: cardholderAddressPostalCode
      },
      name: cardholderName.value,
      email: cardholderEmail.value,
      phone: cardholderPhone.value
    }
  }
})

Однако handleCardPayment() возвращает:

Received unknown parameter: source_data[billing_details]

Как предоставить платежные реквизиты для соответствия требованиям SCA с помощью Stripe Payment Intents?

1 Ответ

2 голосов
/ 17 апреля 2019

Код передает payment_method_data[billing_details], и именно так вы предоставляете такие данные, как платежный адрес держателя карты, чтобы связать его с созданным ресурсом PaymentMethod.

Однако проблема заключается в том, что это работает, только есливы не инициализировали Stripe.js со старым бета-флагом, где handleCardPayment создаст объект Source (src_123) за кулисами вместо PaymentMethod (pm_123).

Когда вы это сделаете,библиотека преобразует payment_method_data в source_data, а затем отправляет source_data[billing_details], но серверная часть API отклоняет его, поскольку это недопустимый параметр на стороне сервера.

Чтобы избежать этой ошибки,вам нужно убедиться, что вы инициализируете Stripe.js без флага betas.Так что превратите

const stripe = Stripe('pk_test_123', {   betas: ['payment_intent_beta_3'] });

в:

const stripe = Stripe('pk_test_123');
...