Closed Axel29 closed 1 year ago
Merci Axel pour votre retour détaillé. Je pense que l'on va essayer de faire un qwick fix sur ce point en réalisant un retry mais ça ne sera pas magique.
La capture peut venir d'Hipay sans que la facture n'ait été initiée depuis Magento et c'est pour ça qu'il y a ce système de création auto.
Nous allons bientôt intégrer la gestion des notifications Hipay par le biais d'une CRON qui permettra de résoudre ce genre de problème de couplage temporel.
Merci pour votre retour. Pourriez-vous m'en faire un une fois le quick fix prêt svp pour que je puisse l'appliquer à mon projet ?
Merci d'avance.
Re @Axel29 !
Si jamais vous voulez tester/intégrer rapidement un fix voici le patch: https://github.com/hipay/hipay-fullservice-sdk-magento2/commit/6d2b26157b7efc88e24be01471638d35923f3263
Un check a été ajouté pour vérifier si la demande de capture a été initiée depuis Magento ou depuis la console HiPay. Si la demande est issu de Magento ( via la création d'invoice ), la notification est rejetée tant que l'invoice n'est pas reellement trouvé en DB. Hipay effectue des retry de notifications par la suite. Si la demande est issu d'Hipay, un invoice est créé.
Nous intégrons d'autres fix et évolutions, nous aurons une release la semaine prochaine.
Pré-conditions
hipay/hipay-fullservice-sdk-magento2
) dans sa dernière version (1.16.0 à date)Étapes pour reproduire
Résultat attendu
Résultat actuel
Informations complémentaires
Le soucis vient du fait que lorsque la facture est créée, la capture se fait immédiatement par HiPay, sans le moindre délai, mais la facture n'est pas encore totalement validée / créée côté Magento.
De ce fait, lorsque la méthode
\HiPay\FullserviceMagento\Model\Notify::_doTransactionCapture
est appelée (via le retour HiPay 117), la ligne$invoiceFromDB = $this->getInvoiceForTransactionId($this->_order, $payment->getTransactionId());
(ligne 1030 sur version 1.16.0) ne trouve pas la facture et en crée donc une nouvelle.Suite à un test assez basique en ayant mit un
sleep(5);
au début de la méthode\HiPay\FullserviceMagento\Controller\Notify\Index::execute
, le processus revient à la normale, ce qui montre bien que le retour HiPay "trop rapide" est la cause de ce bug.Le problème n'est pas reproduisible à 100% des tests puisqu'il faut vraiment que le retour HiPay se fasse extrêmement rapidement, avant même que Magento n'ait finalisé la sauvegarde de la facture.