Брэйнтри отклоняет карты 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
}
)