Jump to content

[Résolu] Bug du module Prestashop Ogone 2.0 - unknown order/1/s/


amerigeau

Recommended Posts

Salut à tous,

Le bug a été constaté sur une boutique en version 1.3.7 de Prestashop et le module Ogone en question est le 2.0.

Pas mal de monde a fait remonter un bug au niveau du module Ogone et de la clé SHA-IN qui font apparaitre le message d'erreur suivant sur la page de paiement : unknown order/1/s/

Ce bug est causé selon les nombreux posts par la ligne 161 du fichier ogone.php :

...J’ai résolu ce problème en transformant la ligne 161 de ogone.php
de: $ogoneParams[‘paramplus’] = ‘secure_key=’.$params[‘cart’]->secure_key;
en: $ogoneParams[‘PARAMPLUS’] = ‘secure_key=’.$params[‘cart’]->secure_key;
(juste une mise en majuscule de la clé.).


Seulement voilà, dans la version 2.0 du module Ogone, le fichier ogone.php ne contient pas la ligne 161 (!!). Voilà la fin du fichier ogone.php :
public function hookPayment($params)
   {
       global $smarty;

       $currency = new Currency(intval($params['cart']->id_currency));
       $lang = new Language(intval($params['cart']->id_lang));
       $customer = new Customer(intval($params['cart']->id_customer));
       $address = new Address(intval($params['cart']->id_address_invoice));
       $country = new Country(intval($address->id_country), intval($params['cart']->id_lang));

       $ogoneParams = array();
       $ogoneParams['PSPID'] = Configuration::get('OGONE_PSPID');
       $ogoneParams['OPERATION'] = 'SAL';
       $ogoneParams['ORDERID'] = intval($params['cart']->id);
       $ogoneParams['AMOUNT'] = number_format(Tools::convertPrice(floatval(number_format($params['cart']->getOrderTotal(true, 3), 2, '.', '')), $currency), 2, '.', '') * 100;
       $ogoneParams['CURRENCY'] = $currency->iso_code;
       $ogoneParams['LANGUAGE'] = $lang->iso_code.'_'.strtoupper($lang->iso_code);
       $ogoneParams['CN'] = $customer->lastname;
       $ogoneParams['EMAIL'] = $customer->email;
       $ogoneParams['OWNERZIP'] = $address->postcode;
       $ogoneParams['OWNERADDRESS'] = ($address->address1);
       $ogoneParams['OWNERCTY'] = $country->iso_code;
       $ogoneParams['OWNERTOWN'] = $address->city;
       if (!empty($address->phone))
           $ogoneParams['OWNERTELNO'] = $address->phone;

       ksort($ogoneParams);
       $shasign = '';
       foreach ($ogoneParams as $key => $value)
           $shasign .= strtoupper($key).'='.$value.Configuration::get('OGONE_SHA_IN');
       $ogoneParams['SHASign'] = strtoupper(sha1($shasign));

       $smarty->assign('ogone_params', $ogoneParams);
       $smarty->assign('OGONE_MODE', Configuration::get('OGONE_MODE'));

       return $this->display(__FILE__, 'ogone.tpl');
   }

   public function hookOrderConfirmation($params)
   {
       global $smarty, $cookie;

       if ($params['objOrder']->module != $this->name)
           return;

       if ($params['objOrder']->valid)
           $smarty->assign(array('status' => 'ok', 'id_order' => $params['objOrder']->id));
       else
           $smarty->assign('status', 'failed');
       return $this->display(__FILE__, 'hookorderconfirmation.tpl');
   }
}

?>



Merci de votre aide pour résoudre cette erreur unknown order/1/s/

Link to comment
Share on other sites

  • 3 weeks later...
Problème résolu pour moi !
J'ai appelé Ogone et apparemment dans l'onglet "Contrôle de données et d'origine" du BO Ogone j'avais fais une erreur d'url.
Il fallait uniquement écrire www.mondomaine.com


Bon je vais tester avec ton fichier et je repost ici après.
Link to comment
Share on other sites

Ok j'attends de tes nouvelles.

J'ai entre-temps fais un petit test avec ma carte de crédit, Et devine quoi, nouveau problème :-)

En effet, après le paiement je reviens sur le site et j'ai ce message d'erreur : "Aucun gabarit trouvé pour le module confirmation"

J'ai vérifier dans le BO et j'ai bien ma commande mais j'ai le message : "erreur de paiement"

Voici un topic qui en parle.... Moi qui pensait qua ça allait fonctionner du premier coup

http://www.prestashop.com/forums/viewthread/107771/rapports_de_bugs/bug_module_ogone_prestashop_1_dot_4_dot_1_dot_0

Link to comment
Share on other sites

bonjour,
je réponds au post car je pense que se sera utile, j'ai remplacé le fichier ogone.php par le tien, aucun résultat et après j'ai remarqué que prestashop a ajouté ses mentions en commentaire dans le début du fichier, après ajout de ceux-ci, le fichier comporte bien la ligne avec le PARMAPLUS à la ligne 161
et pour faire disparaitre l'erreur, je suis passé en production et les moyens de paiement fonctionnent à présent.
a bientôt

Link to comment
Share on other sites

Content que ça fonctionne de ton côté également!

Depuis jeudi j'ai mis en ligne le site sur lequel je travaillais. Et soulagé que la partie technique fonctionne parfaitement.

Tu peux donner ton avis si tu as le temps ;) : www.toutou.be

A bientôt


Vraiment sympa la boutique et j'aime bien le chiwawa !
Sinon, juste 2/3 trucs que j'ai noté, les boutons précédent/suivant du slide sont pas trop visibles, le bouton facebook sur le côté avec un petit écran vient se superposer sur la boutique. Ah aussi, mais peut être plus un goût perso, j'aurais encadré les blocs produits en bas de la page accueil pour plus de clarté aussi, car j'ai mis un petit moment avant de bien tout situé ;)
A bientôt
Link to comment
Share on other sites

Content que ça fonctionne de ton côté également!

Depuis jeudi j'ai mis en ligne le site sur lequel je travaillais. Et soulagé que la partie technique fonctionne parfaitement.

Tu peux donner ton avis si tu as le temps ;) : www.toutou.be

A bientôt


Vraiment sympa la boutique et j'aime bien le chiwawa !
Sinon, juste 2/3 trucs que j'ai noté, les boutons précédent/suivant du slide sont pas trop visibles, le bouton facebook sur le côté avec un petit écran vient se superposer sur la boutique. Ah aussi, mais peut être plus un goût perso, j'aurais encadré les blocs produits en bas de la page accueil pour plus de clarté aussi, car j'ai mis un petit moment avant de bien tout situé ;)
A bientôt


Merci d'avoir pris le temps d'analyser tout ça ! Je vais faire un test un cadre autour des produits, mais pour facebook je ne saurais faire autrement. Mais comme il est a gauche je pense que cela ne gêne pas la visite du site...

A tout hasard : Tu sais comment modifier le cadre qui s'affiche lorsqu'on clique sur un magasin dans la map. ( trouver une boutique). Car l'heure d'ouverture est mal indiqué et puis je voudrais quelque chose de plus complet...
Link to comment
Share on other sites

Content que ça fonctionne de ton côté également!

Depuis jeudi j'ai mis en ligne le site sur lequel je travaillais. Et soulagé que la partie technique fonctionne parfaitement.

Tu peux donner ton avis si tu as le temps ;) : www.toutou.be

A bientôt


Vraiment sympa la boutique et j'aime bien le chiwawa !
Sinon, juste 2/3 trucs que j'ai noté, les boutons précédent/suivant du slide sont pas trop visibles, le bouton facebook sur le côté avec un petit écran vient se superposer sur la boutique. Ah aussi, mais peut être plus un goût perso, j'aurais encadré les blocs produits en bas de la page accueil pour plus de clarté aussi, car j'ai mis un petit moment avant de bien tout situé ;)
A bientôt


Merci d'avoir pris le temps d'analyser tout ça ! Je vais faire un test un cadre autour des produits, mais pour facebook je ne saurais faire autrement. Mais comme il est a gauche je pense que cela ne gêne pas la visite du site...

A tout hasard : Tu sais comment modifier le cadre qui s'affiche lorsqu'on clique sur un magasin dans la map. ( trouver une boutique). Car l'heure d'ouverture est mal indiqué et puis je voudrais quelque chose de plus complet...


Très bonne question, je viens de regarder, il faut se tourner sur la personnalisation des cartes google là :)
a bientôt
Link to comment
Share on other sites

Bonjour à tous, suite du problème...

J'ai donc ajouté la ligne 161 manquante au fichier Ogone.php et suivi le tuto suivant (http://www.prestashop.com/forums/viewthread/107771/rapports_de_bugs/bug_module_ogone_prestashop_1_dot_4_dot_1_dot_0)...

Voici le constat :
- on choisi le paiement par Ogone
- la page de choix entre CB et PayPal sur Ogone s'affiche
- la page de saisie des numéros de CB s'affiche
- une fois validée, la commande redirige vers la boutique sans aboutir (le client reçois un mail de Ogone, mais aucun de la part de la boutique prestashop et aucune commande ne s'affiche dans le BO)

En PJ, la capture de la redirection vers la boutique.

Merci d'avance à tous :)

48391_BsxC6rhRWcUIcSPLLAS6_t

Link to comment
Share on other sites

Hello a tous et merci pour vos retours.

Concernant l'erreur de gabarit, ca m'est déjà arrivé et j'avais corrigé le problèmes pour la version d'ogone disponible sur le SVN et en 1.4.3 (1.4.2.5 aussi me semble). Mais vous avez a priori la meme version donc je vais vous demander de faire ce changement et d'essayer :

Ligne 181 et 197, remplacer le

dirname(__FILE__)

par

__FILE__

.

Pour les Payment, c'est assez embêtant car ogone change leur façon de générer leur clé mais ne préviennes pas les développeurs de leurs changements, Il faut savoir qu'il y a deux façon de le faire et suivant comment est configuré votre compte chez Ogone, ceci fonctionnera ou pas :/
En faite je vous conseille d'appeler directement Ogone afin de vérifier que la configuration du compte est bien faite (bon suivant sur qui on tombe on a pas la meme réponse / conseil) ^^.

Sachez que la méthode de validation du sha1 utilise la dernière mise en place par Ogone.

N'hésitez pas à me faire un retour :)

Link to comment
Share on other sites

Mais vous avez a priori la meme version donc je vais vous demander de faire ce changement et d'essayer :

Ligne 181 et 197, remplacer le (__FILE__) par __FILE__


Bonjour et merci pour la piste,
Juste une question, de quel fichier parles-tu pour le changement des lignes ?
Merci :)
Link to comment
Share on other sites

Re, voici le contenu du fichier Ogone.php téléchargé sur prestashop, il n'y a pas de ligne 197... mais je pense qu'il s'agit des lignes 174 et 188 dans le fichier ci-dessous auxquelles il faut enlever les parenthèses, non ?

ça devrait donner ça donc pour les deux lignes ?
return $this->display__FILE__, 'ogone.tpl';
return $this->display__FILE__, 'hookorderconfirmation.tpl';

public function hookPayment($params)
   {
       global $smarty;

       $currency = new Currency(intval($params['cart']->id_currency));
       $lang = new Language(intval($params['cart']->id_lang));
       $customer = new Customer(intval($params['cart']->id_customer));
       $address = new Address(intval($params['cart']->id_address_invoice));
       $country = new Country(intval($address->id_country), intval($params['cart']->id_lang));

       $ogoneParams = array();
       $ogoneParams['PSPID'] = Configuration::get('OGONE_PSPID');
       $ogoneParams['OPERATION'] = 'SAL';
       $ogoneParams['ORDERID'] = intval($params['cart']->id);
       $ogoneParams['AMOUNT'] = number_format(Tools::convertPrice(floatval(number_format($params['cart']->getOrderTotal(true, 3), 2, '.', '')), $currency), 2, '.', '') * 100;
       $ogoneParams['CURRENCY'] = $currency->iso_code;
       $ogoneParams['LANGUAGE'] = $lang->iso_code.'_'.strtoupper($lang->iso_code);
       $ogoneParams['CN'] = $customer->lastname;
       $ogoneParams['EMAIL'] = $customer->email;
       $ogoneParams['OWNERZIP'] = $address->postcode;
       $ogoneParams['OWNERADDRESS'] = ($address->address1);
       $ogoneParams['OWNERCTY'] = $country->iso_code;
       $ogoneParams['OWNERTOWN'] = $address->city;
       $ogoneParams['PARAMPLUS'] = 'secure_key='.$params['cart']->secure_key;
       if (!empty($address->phone))
           $ogoneParams['OWNERTELNO'] = $address->phone;

       ksort($ogoneParams);
       $shasign = '';
       foreach ($ogoneParams as $key => $value)
           $shasign .= strtoupper($key).'='.$value.Configuration::get('OGONE_SHA_IN');
       $ogoneParams['SHASign'] = strtoupper(sha1($shasign));

       $smarty->assign('ogone_params', $ogoneParams);
       $smarty->assign('OGONE_MODE', Configuration::get('OGONE_MODE'));

       return $this->display(__FILE__, 'ogone.tpl');
   }

   public function hookOrderConfirmation($params)
   {
       global $smarty, $cookie;

       if ($params['objOrder']->module != $this->name)
           return;

       if ($params['objOrder']->valid)
           $smarty->assign(array('status' => 'ok', 'id_order' => $params['objOrder']->id));
       else
           $smarty->assign('status', 'failed');
       return $this->display(__FILE__, 'hookorderconfirmation.tpl');
   }
}

Link to comment
Share on other sites

Re,
Je viens de remplacer les fichiers que j'avais par ceux que tu as proposé mais voici le message d'erreur à la place de la page de choix du paiement (CB, chèque...) : Fatal error: Undefined class constant 'BOTH' in /homez.232/deguisez/www/modules/ogone/ogone.php on line 161

Voici le fichier ogone.php à partir de la ligne 147, la ligne 161 étant $ogoneParams['AMOUNT'] =...

    public function hookPayment($params)
   {
       global $smarty;

       $currency = new Currency((int)($params['cart']->id_currency));
       $lang = new Language((int)($params['cart']->id_lang));
       $customer = new Customer((int)($params['cart']->id_customer));
       $address = new Address((int)($params['cart']->id_address_invoice));
       $country = new Country((int)($address->id_country), (int)($params['cart']->id_lang));

       $ogoneParams = array();
       $ogoneParams['PSPID'] = Configuration::get('OGONE_PSPID');
       $ogoneParams['OPERATION'] = 'SAL';
       $ogoneParams['ORDERID'] = pSQL($params['cart']->id);
       $ogoneParams['AMOUNT'] = number_format(Tools::convertPrice((float)(number_format($params['cart']->getOrderTotal(true, Cart::BOTH), 2, '.', '')), $currency), 2, '.', '') * 100;
       $ogoneParams['CURRENCY'] = $currency->iso_code;
       $ogoneParams['LANGUAGE'] = $lang->iso_code.'_'.strtoupper($lang->iso_code);
       $ogoneParams['CN'] = $customer->lastname;
       $ogoneParams['EMAIL'] = $customer->email;
       $ogoneParams['OWNERZIP'] = $address->postcode;
       $ogoneParams['OWNERADDRESS'] = ($address->address1);
       $ogoneParams['OWNERCTY'] = $country->iso_code;
       $ogoneParams['OWNERTOWN'] = $address->city;
       $ogoneParams['PARAMPLUS'] = 'secure_key='.$params['cart']->secure_key;
       if (!empty($address->phone))
           $ogoneParams['OWNERTELNO'] = $address->phone;

       ksort($ogoneParams);
       $shasign = '';
       foreach ($ogoneParams as $key => $value)
           $shasign .= strtoupper($key).'='.$value.Configuration::get('OGONE_SHA_IN');
       $ogoneParams['SHASign'] = strtoupper(sha1($shasign));

       $smarty->assign('ogone_params', $ogoneParams);
       $smarty->assign('OGONE_MODE', Configuration::get('OGONE_MODE'));

       return $this->display(__FILE__, 'ogone.tpl');
   }

   public function hookOrderConfirmation($params)
   {
       global $smarty, $cookie;

       if ($params['objOrder']->module != $this->name)
           return;

       if ($params['objOrder']->valid)
           $smarty->assign(array('status' => 'ok', 'id_order' => $params['objOrder']->id));
       else
           $smarty->assign('status', 'failed');
       $link = new Link();
       $smarty->assign('ogone_link', (method_exists($link, 'getPageLink') ? $link->getPageLink('contact-form.php', true) : Tools::getHttpHost(true).'contact-form.php'));
       return $this->display(__FILE__, 'hookorderconfirmation.tpl');
   }

   public function validate($id_cart, $id_order_state, $amount, $message = '', $secure_key)
   {
       $this->validateOrder((int)$id_cart, $id_order_state, $amount, $this->displayName, $message, NULL, NULL, true, pSQL($secure_key));
       if ($amount > 0 AND class_exists('PaymentCC'))
       {
           $pcc = new PaymentCC();
           $order = Db::getInstance()->getRow('SELECT * FROM '._DB_PREFIX_.'orders WHERE id_cart = '.(int)$secure_cart[0]);
           $pcc->id_order = (int)$order['id_order'];
           $pcc->id_currency = (int)$order['id_currency'];
           $pcc->amount = $amount;
           $pcc->transaction_id = Tools::getValue('PAYID');
           $pcc->card_number = Tools::getValue('CARDNO');
           $pcc->card_brand = Tools::getValue('BRAND');
           $pcc->card_expiration = Tools::getValue('ED');
           $pcc->card_holder = Tools::getValue('CN');
           $pcc->add();
       }
   }
}

Link to comment
Share on other sites

Bonsoir,
Test effectué aujourd'hui, j'ai testé sur safari et chrome et il y a toujours après la page de paiement ogone le retour sur la boutique avec "Aucun gabarit trouvé", le mail ogone pour la commande mais aucune commande en back office prestashop !
Que faire ?
Merci d'avance :)

Link to comment
Share on other sites

Bonjour à tous,
Suite de l'affaire, on attendait de voir mais on a bien été débité de tous les achats sur la boutique.
C'est donc au niveau du panneau d'admin et de la redirection vers la boutique que se situe le problème.
Merci d'avance pour votre aide :)

Link to comment
Share on other sites

Bon le problème est enfin résolu, une erreur s'est glissé et à échappé à tout le monde. Dans la configuration du BO Ogone, le module Prestashop propose des images tuto pour les explications.

Dans l'image 4, l'erreur est la suivante : il faut cocher "always deferred" au lieu de "no request" car sinon la base de données de la boutique ne se met pas à jour.

Normalement c'est bon ainsi.
Merci à Prestashop pour le soutien ;)

48733_Tbk94RocJAqGcAFHa8L9_t

Link to comment
Share on other sites

  • 1 month later...

Bonjour à tous,

 

je cherche en vain à faire fonctionner le module ogone et à force je me suis rendu compte que le paiement était bien pris en compte mais qu'il n'y avait pas d'enregistrement dans la base de donnée de prestashop. Ce qui fait que lorsque je suis renvoyé sur la page confirmation.php, un loader ajax est visible et mouline. En effet, une requête est faite sur la table orders mais vu qu'il n'y a pas eu d'enregistrement.... je pense que c'est assez clair.

Comment se fait-il qu'il n'y ait pas d'enregistrement? J'ai pourtant vérifié et re-vérifié mes paramètres dans ogone, j'ai modifié plusieurs fois les fichiers ogone.php et validation.php que les utilisateurs partageaient et même pris la dernières version d'ogone sur prestashop.com mais rien à faire....

Quelqu'un aurait-il la solution

Link to comment
Share on other sites

J'ai réinstaller le module ogone en prenant la v2.0 mais aucun changement. J'ai pris les fichiers ogone.php et validation.php que Vincent Schoener a gentiment partagé et la l'erreur a changée.

Au lieu d'avoir le message qui me dit d'attendre, j'ai désormais l'erreur : "Aucun gabarit trouvé pour le module confirmation"

 

J'ai vérifié une dizaine de fois du côté d'ogone pour voir si tout était bien coché et c'est le cas. Je vois vraiment pas d'où l'erreur peut venir. Auriez-vous une idée?

Link to comment
Share on other sites

  • 1 month later...

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...