dansmaculotte / monetico-php

PHP SDK for Monetico Payment Service
MIT License
13 stars 17 forks source link

hash and seal different since 5 days #31

Closed nicolasdekaise closed 2 years ago

nicolasdekaise commented 2 years ago

Hello there,

The return functions worked great for at least six months, then the 26th of june, they're not working anymore, without any modification on my side.

So the payments are working on Monetico's side, but the validateSeal function return false because the hash and seal are different (obviously) But I can't pinpoint why.

Do you know of any modifications on Monetico's side ?

Thanks

rtouze commented 2 years ago

Hi, As you may have noticed, I made modifications recently for this specific issue. Monetico was noticing me for invalid seal computation on failed payments. Are you facing this for every payment or only for failed ones (like invalid 3DSecure challenge result or another reason)? Did you update to latest release (v2.0.4 ou v2.0.5)?

nicolasdekaise commented 2 years ago

Hi, Every payment, the money is transfered, all is ok but the seal don't match

I took the last version here on github 2.x branch, is it the correct one ?

rtouze commented 2 years ago

Yes, I'm currently using https://github.com/dansmaculotte/monetico-php/commit/409ca19a045927646ed867005cbf70493f43a373 in production.

Can you paste the request payload sent by Monetico (after edition for privacy, of course)?

nicolasdekaise commented 2 years ago

Okay to be sure I tried with this one, still not working ^^' What do I need to edit for privacy ? (To be sure :-P)

rtouze commented 2 years ago

You can change TPE, reference, ipclient, authentication fields. Actually, I need all the field names that are sent, not the values.

nicolasdekaise commented 2 years ago

Here you are :

DansMaCulotte\Monetico\Responses\PurchaseResponse::__set_state(array( 'eptCode' => 'xxx', 'dateTime' => DateTime::__set_state(array( 'date' => '2022-07-01 13:34:28.000000', 'timezone_type' => 3, 'timezone' => 'Europe/Paris', )), 'amount' => '1EUR', 'seal' => 'xxx', 'cardVerificationStatus' => 'oui', 'cardExpirationDate' => 'xx', 'cardBrand' => 'xx', 'cardCountry' => 'xx', 'cardBIN' => 'xxxx', 'cardHash' => 'xxx', 'cardSaved' => NULL, 'cardMask' => NULL, 'rejectReason' => NULL, 'authorisationRejectReason' => NULL, 'authNumber' => 'xxxx', 'clientIp' => '91.86.56.233', 'transactionCountry' => 'BEL', 'paymentMethod' => 'xx', 'commitmentAmount' => NULL, 'filteredReason' => NULL, 'filteredValue' => NULL, 'filteredStatus' => NULL, 'authentication' => DansMaCulotte\Monetico\Resources\AuthenticationResource::__set_state(array( 'details' => array ( ), 'protocol' => '3DSecure', 'version' => '1.0.2', 'status' => 'authenticated', )), 'authenticationHash' => 'xxx', 'cardType' => 'xx', 'accountType' => 'xx', 'virtualCard' => 'xx', 'returnCode' => 'xx', 'description' => '',

rtouze commented 2 years ago

Sorry, I have not been clear enough. I need the actual payload sent you by monetico, in order to check if the code miss a parameter in the seal computation. You can find it in the emails that monetico sends to notify you for the payment failure.

nicolasdekaise commented 2 years ago

So the mail received on the admin side ? And just to be sure : The payment is not a failure, the payment is going through and the money is on the bank account, but the script can't verify it

rtouze commented 2 years ago

Yes I need the payload sent by Monetico after payment confirmation, before it's translated to a PurchaseResponse. Don't worry, I have understood that the error is in the seal computation :sweat_smile:

nicolasdekaise commented 2 years ago

Okay no problem ^^' Sorry I just wanted to be sure :)

Here is the payload : TPE=xxx&date=01%2F07%2F2022_a_13%3A34%3A28&montant=1EUR&reference=xxx&texte-libre=&code-retour=paiement&cvx=oui&vld=xx&brand=VI&numauto=xxx&usage=debit&typecompte=particulier&ecard=non&originecb=BEL&bincb=xxx&hpancb=xxx&ipclient=xxx&originetr=BEL&cbmasquee=xxxx&modepaiement=CB&authentification=xxxx&MAC=xxxxxx

nicolasdekaise commented 2 years ago

Hi, Is it the data you needed ? Thanks :)

rtouze commented 2 years ago

The data are OK, I cannot see where the problem is yet.

nicolasdekaise commented 2 years ago

Hi, I've got an answer for monetico about a recent change (in french, but I think you spoke french?) :

"Depuis fin mai, la norme ISO qui règlemente la numérotation des cartes et l'enregistrement des BIN à évolué. Le BIN est passé de 6 à 8 positions.

Par conséquence, dans le formulaire retour nous vous envoyons le champ cbmasque. De ce fait le format de votre accusé de réception est version=2 cdr1 au lieu de version 2 cdr0.

Nous vous envoyons ci-joint la documentation relative à l'évolution des BIN ainsi que la documentation technique afin de vous aider à la résolution du problème d'interface retour."

Can this help you ?

rtouze commented 2 years ago

Hi. Thank you for the update. Unfortunately, the field cbmasquee is taken into account while processing the response.

nicolasdekaise commented 2 years ago

Hi, In the end it was very simple and your code is not the problem, I didn't use cbmasquee before, and it worked like a charm, and then it worked no more, I just added the field and now it's working again. ^^' Thanks for your help and sorry for the lost time ^^'

rtouze commented 2 years ago

Great! I guess I can close the issue.