MadW Posted April 16, 2012 Share Posted April 16, 2012 (edited) Bonjour à tous. Je ne sais si je poste au bon endroit, amis modérateurs s'il faut que je poste ailleurs faites moi signe. J'ai ici une boutique en ligne pour un de mes clients, tournant sur Prestashop 1.4.5.1, dotée du module Paybox. Mon client a contacté sa banque, le Crédit Agricole, et a souscrit un contrat pour leur module e-transaction. Module reçus, tests effectués, PV de recette envoyé, les paiements par carte bancaire ont donc bien lieu. Paybox est bien en mode Production, les informations sont bien remplies, et le paiement est bien reçu. Cependant, un gros problème s'impose : Lors du paiement par carte bancaire via Paybox - et UNIQUEMENT via Paybox - le panier n'est pas considéré comme "commande en cours de traitement". Le panier est toujours plein, et la commande n'apparait pas dans la liste de commande - alors que le traitement au niveau de la banque est bien validé. Pourriez vous me donner quelques indications à ce sujet, si vous avez été déjà confronté à ce genre de problème ? Merci de votre attention. MadW EDIT : Nous avions aussi transféré l'hébergement du site sur un serveur pouvant exécuter les scripts CGI-BIN. Au vu du fait que le traitement "paiement du montant" est fait, l'on estime que ces scripts fonctionneraient correctement - je contacte l'hébergeur dans quelques instants pour connaître son avis. Edited June 6, 2012 by MadW (see edit history) Link to comment Share on other sites More sharing options...
Paul MONFILS Posted April 16, 2012 Share Posted April 16, 2012 Quels droits sont mis sur le module ? 1 Link to comment Share on other sites More sharing options...
MadW Posted May 11, 2012 Author Share Posted May 11, 2012 (edited) Navré de répondre si tard. En fait, le souci posé par le module Paybox vient du fait qu'il y'a un appel à un cryptage html des caractères (celui, basique, transformant é -> é et une bonne floppée de caractères) lors de l'envoi des informations à la plateforme bancaire, sur la version PAYBOX précédant celle qui est actuellement à disposition. Ce cryptage avait surtout lieu pour le champ "adresse de confirmation/retour à la boutique". La plateforme bancaire essayait donc de joindre l'adresse de confirmation du module paybox, cryptée de cette manière, ce qui revenait à pointer le néant. Donc aucune confirmation reçue et traitée par le module. C'est après avoir fait plusieurs appels vers l'hébergeur, vers le service de la plateforme bancaire, puis vers le service Prestashop Addons que nous avons pu trouver la faille et la corriger par nous même. Edit : Correction ci-dessus : Version Paybox précédente, non Prestashop. Edited May 11, 2012 by MadW (see edit history) Link to comment Share on other sites More sharing options...
MadW Posted June 6, 2012 Author Share Posted June 6, 2012 (edited) Puisque l'on vient de me contacter pour apporter plus d'informations sur ce bug ci, pour mémoire - et n'ayant pas le fichier original sous les yeux, seulement le modifié - il s'agissait en fait de l'appel en trop d'une fonction nommée 'url_encode' dans le fichier paybox.php. Je vais essayer de trouver une ancienne version du paybox que j'avais (version précédente) pour confirmer tout ça. EDIT : url_encode est sans doute appelée proche de la variable $pbx_retour, puisque la variable $pbx_retour est utilisée pour stocker et transmettre l'URL de retour à la boutique en ligne. Edited June 6, 2012 by MadW (see edit history) Link to comment Share on other sites More sharing options...
JC_ Posted June 6, 2012 Share Posted June 6, 2012 MadW Merci pour ta réponse, j'ai trouvé cette partie : 'url_ok' => $pbx_urlhttp ? 'http://'.htmlspecialchars($_SERVER['HTTP_HOST'], ENT_COMPAT, 'UTF-8').__PS_BASE_URI__.'history.php' : 'http://'.htmlspecialchars($_SERVER['HTTP_HOST'], ENT_COMPAT, 'UTF-8').__PS_BASE_URI__.'modules/paybox/validation.php', 'url_cancel' => 'http://'.htmlspecialchars($_SERVER['HTTP_HOST'], ENT_COMPAT, 'UTF-8').__PS_BASE_URI__.'order.php', 'return_format' => 'pbx_amount:M;ref:R;pbx_auth:A;pbx_trans:T;pbx_error:E;pbx_sign:K', 'url_ko' => $pbx_urlhttp ? 'http://'.htmlspecialchars($_SERVER['HTTP_HOST'], ENT_COMPAT, 'UTF-8').__PS_BASE_URI__.'order.php' : 'http://'.htmlspecialchars($_SERVER['HTTP_HOST'], ENT_COMPAT, 'UTF-8').__PS_BASE_URI__.'modules/paybox/validation.php' Doit-on modifier en $pbx_urlhttp ? 'http://'.$_SERVER['HTTP_HOST'].__PS_BASE_URI ... Merci de ton aide. Link to comment Share on other sites More sharing options...
MadW Posted June 6, 2012 Author Share Posted June 6, 2012 Je ne crois pas non. Je n'ai pas les compétences de l'équipe Prestashop, ma modification a été des plus simples, et ne portait que sur la version Paybox datant de décembre 2011. Il s'agissait simplement de retirer l'appel à la fonction "url_encode", liée à $pbx_return. Link to comment Share on other sites More sharing options...
MadW Posted June 6, 2012 Author Share Posted June 6, 2012 (edited) Je l'ai ! Bug eu sur Paybox 2.9 (n'est plus en vente depuis ce début d'année, mise à jour 3.0 ayant semble t'il réglé le problème). Appel à la fonction 'url_encode' non souhaité pour les variables stockant les URL utilisées par le module. A savoir : Ligne 194 : $pbx_confurl = urlencode('http://'.$_SERVER['HTTP_HOST'].__PS_BASE_URI__.'order-confirmation.php?id_cart='.$cart->id.'&id_module='.$this->id.'&key='.$customer->secure_key); Ligne 197 : $pbx_cancelurl = urlencode('http://'.$_SERVER['HTTP_HOST'].__PS_BASE_URI__.'order.php?step=3'); Ligne 223 : 'PBX_REPONDRE_A' => urlencode('http://'.$_SERVER['HTTP_HOST'].__PS_BASE_URI__.'modules/'.$this->name.'/validation.php') Je vérifie si j'ai retiré les 3 appels à urlencode sur la version utilisée par la boutique en ligne... Edited June 6, 2012 by MadW (see edit history) Link to comment Share on other sites More sharing options...
MadW Posted June 6, 2012 Author Share Posted June 6, 2012 Je confirme donc, j'avais retiré les trois appels donnés ci-dessus à la fonction url_encode. Il va sans dire que - j'imagine - cela dépend de la plateforme bancaire en face. Concernant la boutique en ligne utilisée, il s'agissait de la plateforme e-transaction. D'autres plateforme peuvent bien entendu nécessiter l'appel à la fonction "url_encode". Il va sans dire, de plus, que je ne peux pas garantir que ça arrangera votre problème, ni même que cela arrangera quoique ce soit sur les autres versions de paybox ! Je ne fais QUE indiquer la modification que j'ai dû apporter dans MON cas, ce n'est en RIEN une solution générale. Qu'on se comprenne bien. Link to comment Share on other sites More sharing options...
JC_ Posted June 6, 2012 Share Posted June 6, 2012 Bonjour, ok, moi j'utilise le paybox de varod, il utilise htmlspecialchars mais ça reste la même fonction. Je suis un peu perdu du coup. Cordialement, JC Link to comment Share on other sites More sharing options...
MadW Posted June 6, 2012 Author Share Posted June 6, 2012 (edited) Bah demandez lui s'il s'agit du module Paybox3.0, et si oui, soit contactez le support technique de votre plateforme bancaire, soit demandez à varod si des modifications avaient été faites - et si oui lesquelles. De toute manière, je n'ai pu identifier ce problème que grâce au support technique de la plateforme bancaire (me signalant qu'ils recevaient des champs au contenu inattendu, à savoir tous les '/' et les caractères accentués/spéciaux étaient échappés ou modifiés en version html), et grâce à Prestashop Addons que j'ai pu avoir, pour deux trois conseils. Peut être que votre problème est provoqué par autre chose, sachant qu'il ne faut pas oublier que certaines plateformes bancaires exigent de recevoir un procès-verbal de recette signé de votre main et faxé, attestant que vous avez effectué quelques tests, avant que le retour ne soit possible. EDIT : En connaissant htmlspecialchars et url_encode, deux fonctions pourtant différentes mais remplaçant des caractères en les échappant et/ou en les modifiant, ça ne serait pas impossible que la panne vienne aussi de là. Mais là encore, ce n'est qu'une supposition. Je vous conseillerai plutôt de rester en phase de TEST, de sauvegarder votre paybox.php original et de le garder préciseusement, puis de retirer l'appel à htmlspecialchars sur la ligne concernant l'url de retour. A tester, en phase test, il ne devrait pas y'avoir d'effet de bord indésirable. Edited June 6, 2012 by MadW (see edit history) Link to comment Share on other sites More sharing options...
JC_ Posted June 6, 2012 Share Posted June 6, 2012 Oui c'est bien la 0.3, je discute avec varod à ce sujet. La plateforme paybox est pleinement fonctionnelle, le site tournait avant sous oscommerce et cette solution de paiement. Merci de ton aide Cordialement, JC Link to comment Share on other sites More sharing options...
MadW Posted June 6, 2012 Author Share Posted June 6, 2012 (edited) Ok, en espérant avoir pu aider. Essayez les modifications proposées dans l'édition de mon post précédent (concernant la dernière ligne) - peut être même avec l'accord de varod, sans nul doute est il plus compétent que moi en la matière. Edited June 6, 2012 by MadW (see edit history) Link to comment Share on other sites More sharing options...
JC_ Posted June 7, 2012 Share Posted June 7, 2012 MadW, suivant tes conseils je me suis rapproché de Paybox est le souci est qu'ils ne reçoivent pas la variable PBX_RETOUR_A, en la mettant sur l'interface en dur ils l'ont et tout fonctionne. Le souci est que j'ai ce contrat pour 2 sites internet, donc besoin de passer cette variable en dynamique. a++ JC Link to comment Share on other sites More sharing options...
MadW Posted June 13, 2012 Author Share Posted June 13, 2012 (edited) Désolé pour la réponse en retard : Je ne vois pas ce que vous essayez de me dire par "passer cette variable en dynamique", mais je vous conseillerai de faire comme moi, cité plus tôt, SI - et seulement si - vous voyez les mêmes choses aux lignes indiquées. SI - et seulement si - oui, en ce cas : 'PBX_REPONDRE_A' => urlencode('http://'.$_SERVER['HTTP_HOST'].__PS_BASE_URI__.'modules/'.$this->name.'/validation.php') Il vous faudra pour chacune des lignes retirer l'appel 'urlencode()'. C'est à dire, pour chaque ligne, retirer "urlencode(" et la parenthèse fermante à la fin. Ne supprimez aucun autre caractère. Concernant 'PBX_REPONDRE_A' vous devriez avoir quelque chose comme : 'PBX_REPONDRE_A' => 'http://'.$_SERVER['HTTP_HOST'].__PS_BASE_URI__.'modules/'.$this->name.'/validation.php' (Ne faites pas un vulgaire copier coller de cette ligne, l'appel pourrait être légèrement différent. Faites la modification par vous même.) EDIT : Vous avez donc ces TROIS éditions à faire, sur chaque fichier paybox.php présent chacun sur un de vos contrat/boutique. ET SURTOUT gardez une copie de vos fichiers AVANT l'édition. Edited June 13, 2012 by MadW (see edit history) Link to comment Share on other sites More sharing options...
Recommended Posts