GOOGLE ADS

jeudi 28 avril 2022

Erreur lors de l'utilisation d'ActiveMerchant::Billing::AuthorizeNetCimGateway avec opaqueData d'Authorize.Net

8 février 2018

Mon application Ruby on Rails a été utilisée avec succès ActiveMerchant::Billing::AuthorizeNetCimGatewayavec le type de paiement :credit_cardpour créer un profil client avec un profil de paiement intégré.

Je suis maintenant en train de migrer vers Accept.js d'Authorize.Net qui accepte les informations de carte de crédit directement envoyées depuis leur formulaire de paiement hébergé et renvoie une annonce de paiement de type COMMON.ACCEPT.INAPP.PAYMENTqui peut être utilisée une fois pour créer une transaction de paiement, profil client, etc.

J'ai construit un payment_profilehachage avec :opaque_dataà la place de :credit_card. Par example:

> 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"}}

J'ai ensuite essayé de créer un profil client avec un code existant similaire au suivant :

response = @gateway.create_customer_profile profile: {
email: client.email,
description: client.name,
merchant_customer_id: client.id,
payment_profiles: payment_profile
}

Cependant, j'ai reçu une réponse qui comportait un result_codeof Erroret me plaignait d'un "contenu incomplet" pour l'élément paymentcomme suit :

> 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>

J'ai quelques questions en tête:

  • Prend-il même en charge Accept.js ActiveMerchant::Billing::AuthorizeNetCimGateway' :opaque_dataà la place de :credit_card?


  • Si ActiveMerchant::Billing::AuthorizeNetCimGatewayprend en charge :opaque_data, qu'est-ce qui ne va pas avec ce qui précède payment_profileet quel autre contenu devrais-je fournir pour l' paymentélément?


  • J'apprécierais toute aide pour résoudre ce problème.


    Solution of the problem

    Bien que cette question ait plus de 4 ans et que je suppose que vous avez trouvé une solution ou abandonné vos efforts, j'ai rencontré ce même problème récemment et j'ai pensé qu'il serait utile d'ajouter mes conclusions au cas où quelqu'un d'autre se heurterait à ce problème..

    le AuthorizeNetCimGatewayne prend pas actuellement en charge Accept.js' opaqueData. En regardant le code source de la gemme active_merchant, en particulier dans /lib/active_merchant/billing/gateways/authorize_net_cim.rb, il y a finalement une méthode add_payment_profilequi est appelée. Dans cette méthode, en particulier aux lignes 759 à 761, vous pouvez voir que les options sont soit credit_card, bank_account ou drivers_license. Un paiement tokenisé n'est actuellement pas pris en charge.

    That being said, there is an open PR#2422 that adds support for this. At the time of writing this, it appears to be failing some rubocop specs, but hopefully it can get deployed in the near future!

    Aucun commentaire:

    Enregistrer un commentaire

    Comment utiliseriez-vous .reduce() sur des arguments au lieu d'un tableau ou d'un objet spécifique&nbsp;?

    Je veux définir une fonction.flatten qui aplatit plusieurs éléments en un seul tableau. Je sais que ce qui suit n'est pas possible, mais...