Développer avec RBS Change : Problème de validation d'une commande
-
26/12/2011 17:07
Bonjour,
Nous avons eu un problème sur la validation d'une commande d'un client. Il semble que la commande a été annulé alors que le paiement a été validé (CB).
Dans le log des paiement j'ai :2011-12-17 09:14:16 CYBERMUT BANKING ****** 2011-12-17 09:14:16 CYBERMUT BANKING RAW CODE : **************** 2011-12-17 09:14:16 CYBERMUT BANKING MAC : ********** 2011-12-17 09:18:23 BANKING CYBERMUT LISTENER from [****** : /payment/cybermutListenerResponse.php] BEGIN 2011-12-17 09:18:23 DECODED DATA : date : , lang : , order : ###### orderId : ####, amout : 6.20EUR, transactionId : ANNULATION-####, transaction : Paiement par carte bancaire refusé. 2011-12-17 09:18:23 BANKING CYBERMUT LISTENER from [********* : /payment/cybermutListenerResponse.php] END 2011-12-17 09:23:50 BANKING CYBERMUT LISTENER from [******* : /payment/cybermutListenerResponse.php] BEGIN 2011-12-17 09:23:50 DECODED DATA : date : 2011-12-17 09:23:50, lang : , order :######, orderId : ####, amout : 6.20EUR, transactionId : PAIEMENT-####, transaction : Paiement par carte bancaire accépté. 2011-12-17 09:23:50 BANKING CYBERMUT LISTENER from [******* : /payment/cybermutListenerResponse.php] END
Il n'y a pas d'autre information entre les "2011-12-17 09:18:23" et "2011-12-17 09:23:50". Je ne sais pas vraiment ce que le client a fait, mais dans tout les cas, la commande reste sur le status "annulé" avec un paiement validé (onglet paiement/factures)
Je n'ai pas trouvé le moyen de valider manuellement cette commande....
Est-ce un bug ? Au final la commande aurait du être validée.
Nous utilisons la version 3.5.1. -
De prime abord, le scénario plausible serait :
1) première tentative de paiement avec annulation sur le formulaire de la banque
2) seconde tentative de paiement, cette fois avec succès mais avec une erreur côté Change qui fait que la commande ne passe pas en statut "in_progress" lors du paiement de la facture
3) la tâche planifié en tâche de fond tombe sur la commande qui est toujours en statut "initiated" depuis plus de 60 minutes et l'annule
Reste à savoir ce qui s'est mal passé en étape 2...
Vous dites bien que la facture est indiquée comme payée dans l'onglet paiement ?
De plus, vous avec masqué les numéros dans le log mais pouvez-vous dire si le paramètre "orderId" est le même dans les deux cas (annulation et paiement accepté) ou pas ?
Enfin, est-ce que vous avez des erreurs ou exceptions qui remontent dans le fichier application.log pour cette heure-là ? (si vous l'avez encore... sans cela ça risque d'être plus difficile à diagnostiquer précisément) -
Bonjour,
Merci pour votre réponse. J'ai toujours le log de ce jour et n'y a pas d'exception dans cette tranche horaire. Il y a juste un avertissement :2011-12-17 09:18:23 (type 8,line 218) Undefined index: numauto in file (/home/sites/****/subdomains/www/html/repository/modules/payment/payment-3.5.1/lib/services/CybermutconnectorService.class.php)
Par contre, je pense que le serveur à subit un scan agressif de recherche de faille (beaucoup de log sur des pages inexistantes de différents logiciels : awstats, phpAlbum...).
Il y a bien un paiement enregistré pour la commande (par CB) et le numéro orderId est le même dans le log que j'ai mis. De plus, j'ai mis un cron en place pour relancer le traitement des tâches de RBS.
Nous n'avons pour le moment pas eu de nouveau ce problème, je vous informerais s'il se reproduit. -
Ce message d'erreur vient en fait simplement du fait que si le client annule son paiement sur le formulaire de la banque, la réponse de la banque ne contient pas de numéro d'autorisation (c'est logique vu qu'il n'y a pas d'autorisation) mais que le connecteur Change recherche ce champ dans le tableau de résultat sans vérifier qu'il existe.
C'est juste un warning sans conséquence mais j'ai fait un ticket (Warning dans les logs en cas d'annulation de paiement cybermut) afin qu'on l'élimine (pour faciliter les diagnostiques, il vaut mieux corriger tout ce qui peut faire des warnings parasites dans les logs).
Par contre là avec les éléments que j'ai, je ne vois pas d'explication sur ce qui a pu se produire... Le scénario que j'ai donné plus haut reste le plus probable mais je ne vois pas ce qui a pu planter.
Juste une dernière question : quelle est la date de création de la commande ? (potentiellement, elle pourrait avoir été créée assez tôt pour que la tâche qui l'annule soit passée presque en même temps que le retour de la banque... si le problème vient de là, il y aurait quelque chose à revoir dans le processus pour éviter que ça se reproduise) -
Bonjour,
J'ai eu de nouveau le cas le 2 Janvier, je voudrais vous transmettre toutes les informations nécessaires mais par un canal plus privé si possible. Merci de m'indiquer les données qu'il vous faut.
Pour rappel, j'aivais modifier le temps de rafraichissement de la tâche de traitement des commandes (toutes les minutes). Au vu de votre dernier message, je l'ai mis à 5min.
Pour ce qui est de la date de commande, il n'y pas a de différence notable avec les autres commandes, en générale, le paiement intervient 1 à 2 minutes après la création de la commande.
Merci pour votre aide -
Concernant la fréquence d'exécution de la tâche ça ne devrait pas poser problème de la laisser toutes les minutes car la requête pour annuler les commandes trop anciennes et non-payées ne prend que les commandes de plus d'une heure, donc vous n'avez pas besoin de modifier cela.
Sinon, effectivement, je vais vous contacter par email afin de voir les choses plus en détail dans la mesure où on touche à des infos qui peuvent être sensibles. -
18/01/2012 09:18
Suite à investigation, j'ai créé le ticket suivant pour éviter que cela ne se reproduise : Commande annulées alors que le paiement est validé -
Bonjour,
Merci pour votre intervention.
Il semble que le correctif ne soit pas présent dans le git publique, est-il possible d'avoir le code ?
Merci -
Pour une meilleure réponse, pensez à indiquer la version sur laquelle vous rencontrez des difficultés, ainsi que son type (CMS ou eCommerce core).
Pour tout problème d'installation indiquez le nom de l'hébergeur et s'il s'agit d'un serveur mutualisé ou dédié.
Merci de prendre connaissance et de respecter les règles des forums.