Ошибка при использовании 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>

У меня есть несколько вопросов в моей голове:

  1. Есть ли ActiveMerchant::Billing::AuthorizeNetCimGateway даже поддержать Accept.js :opaque_data на месте :credit_card?

  2. Если 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, но, надеюсь, его можно будет развернуть в ближайшем будущем!

Другие вопросы по тегам