Ошибка при использовании ActiveMerchant::Billing::AuthorizeNetCimGateway с opaqueData от Authorize.Net
8 февраля 2018 г.
Мое приложение Ruby on Rails успешно использует ActiveMerchant::Billing::AuthorizeNetCimGateway
с типом оплаты :credit_card
для создания профиля клиента со встроенным платежным профилем.
Сейчас я нахожусь в процессе перехода на файл Accept.js от Authorize.Net, который принимает информацию о кредитной карте, отправленную непосредственно из их размещенной формы оплаты, и возвращает платежное имя типа COMMON.ACCEPT.INAPP.PAYMENT
которые можно использовать один раз для создания платежной транзакции, профиля клиента и т. д.
Я построил payment_profile
хэш с :opaque_data
на месте :credit_card
, Например:
> payment_profile
=> {:payment=>
{:opaque_data=>
{:data_descriptor=>"COMMON.ACCEPT.INAPP.PAYMENT",
:data_value=> "eyJjb2RlIjoiNTBfMl8wNjAwMDUzNjBDMzAwOUQ3OEUzOUQ1MDk4QTYxMjFGNzlCQ0Y3RDRGQUE4NTNCMEU3MkYyMUJBNTI3NUE0NjQ2Q0ZFQTVFNzMxMDI2Qjg5ODJGNjBFRUE2RDZFMTZCMUY5NzQ4NUJFIiwidG9rZW4iOiI5NTE4MDc3Njg5NDA4MTAwOTAzNTAyIiwidiI6IjEuMSJ9"}},
:bill_to=>{:first_name=>"Firstname", :last_name=>"Lastname", :address=>nil, :city=>nil, :state=>nil, :zip=>nil, :country=>nil, :phone_number=>"(012) 234-5678"}}
Затем я попытался создать профиль клиента с существующим кодом, подобным следующему:
response = @gateway.create_customer_profile profile: {
email: client.email,
description: client.name,
merchant_customer_id: client.id,
payment_profiles: payment_profile
}
Тем не менее, я получил ответ, который имел result_code
из Error
и жаловался на "неполное содержание" для элемента payment
следующее:
> response
=> #<ActiveMerchant::Billing::Response:0x007f9827d14900
@authorization=nil,
@avs_result={"code"=>nil, "message"=>nil, "street_match"=>nil, "postal_match"=>nil},
@cvv_result={"code"=>nil, "message"=>nil},
@emv_authorization=nil,
@error_code="E00003",
@fraud_review=nil,
@message=
"The element 'payment' in namespace 'AnetApi/xml/v1/schema/AnetApiSchema.xsd' has incomplete content. List of possible elements expected: 'creditCard, bankAccount, trackData, encryptedTrackData, payPal, opaqueData, emv' in namespace 'AnetApi/xml/v1/schema/AnetApiSchema.xsd'.",
@params=
{"messages"=>
{"result_code"=>"Error",
"message"=>
{"code"=>"E00003",
"text"=>
"The element 'payment' in namespace 'AnetApi/xml/v1/schema/AnetApiSchema.xsd' has incomplete content. List of possible elements expected: 'creditCard, bankAccount, trackData, encryptedTrackData, payPal, opaqueData, emv' in namespace 'AnetApi/xml/v1/schema/AnetApiSchema.xsd'."}}},
@success=false,
@test=true>
У меня есть несколько вопросов в моей голове:
Есть ли
ActiveMerchant::Billing::AuthorizeNetCimGateway
даже поддержать Accept.js:opaque_data
на месте:credit_card
?Если
ActiveMerchant::Billing::AuthorizeNetCimGateway
поддерживает:opaque_data
что может быть не так с вышесказаннымpayment_profile
и какой другой контент мне нужно предоставитьpayment
элемент?
Буду признателен за любую помощь в решении этой проблемы.
1 ответ
Хотя этому вопросу уже более 4 лет, и я предполагаю, что вы либо нашли решение, либо отказались от своих усилий, недавно я столкнулся с этой же проблемой и подумал, что было бы полезно добавить мои выводы на случай, если кто-то еще столкнется с этим .
в
AuthorizeNetCimGateway
в настоящее время не поддерживает Accept.js.
opaqueData
. Глядя на исходный код для драгоценного камня active_merchant, особенно в /lib/active_merchant/billing/gateways/authorize_net_cim.rb , в конечном счете, есть метод
add_payment_profile
что вызывается. В этом методе, а именно в строках 759-761, вы можете видеть, что доступны следующие варианты: credit_card, bank_account или drivers_license. Токенизированный платеж в настоящее время не поддерживается.
При этом существует открытый PR#2422 , который добавляет поддержку для этого. На момент написания этой статьи казалось, что он не соответствует некоторым спецификациям rubocop, но, надеюсь, его можно будет развернуть в ближайшем будущем!