Брэйнтри отклоняет карты Discover при последовательных транзакциях

Фон

Мы выполняем описанный ниже метод, чтобы взимать плату с пользователя и хранить его / ее информацию в хранилище Braintree:

def store_in_vault
  Braintree::Transaction.sale(:amount => amount,
  :credit_card => {
    :cardholder_name => cardholder_name,
    :number => credit_card_number,
    :expiration_date => "#{credit_card_expiration_month}/#{credit_card_expiration_year}",
    :cvv => credit_card_cvv
  },
  :customer => {
    :id => user.id,
    :first_name => user.first_name,
    :last_name => user.last_name,
    :email => user.email,
    :phone => user.phone_main
  },
  :billing => {
    :first_name => user.first_name,
    :last_name => user.last_name,
    :street_address => street_address,
    :extended_address => extended_address,
    :locality => city,
    :region => state,
    :postal_code => zip,
    :country_code_numeric => country
  },
  :options => {
    :submit_for_settlement => false,
    :store_in_vault_on_success => true
  })
end

Позже мы также приостановили кредитную карту пользователя в качестве гарантийного депозита.

Все работает хорошо для большинства кредитных карт. Однако, когда мы пытаемся установить такой контроль безопасности на картах Discover, наша транзакция отклоняется с ошибкой "Processor Declined" или "Declined". Обратите внимание, что первоначальная транзакция, указанная выше для хранения учетной записи пользователя в хранилище и кредитной карты, выполняется успешно. Только более поздняя транзакция удержания безопасности будет отклонена.

Вопросы

Почему такое поведение происходит только с картами Discover? Как это исправить?

1 ответ

Решение

Это как-то связано с процессом проверки карт Discover. Они требуют, чтобы CVV и почтовый индекс были включены в транзакцию.

В соответствии с поддержкой Braintree: параметры в вышеупомянутом запросе должны включать:add_billing_address_to_payment_method => true как следующее:

:options => {
  :submit_for_settlement => false,
  :store_in_vault_on_success => true,
  :add_billing_address_to_payment_method => true
}

Кроме того, при запросе замены кредитной карты (если требуется) необходимо добавить:billing_address information:

Braintree::CreditCard.create(
  :customer_id => "#{user_id}",
  :number => cc_number,
  :expiration_date => "#{expiration_month}/#{expiration_year}",
  :cardholder_name => cardholder_name,
  :cvv => cvv,
  :billing_address => {
    :street_address => street_address,
    :extended_address => extended_address,
    :locality => city,
    :region => state,
    :postal_code => zip
  },
  :options => {
    :make_default => true
  }
)
Другие вопросы по тегам