Open oranocha opened 8 years ago
Hi, I am facing exactly the same problem. Did you find a solution ? Also PrestaShop 1.6 with Ingenico.
Bonjour,
Pas encore de retour du développeur du module donc j'ai du "hacker" le code pour résoudre le problème.
Voici ce que j'ai fait :
// BOF HACK FROM ORA
if (!$this->context->customer->isLogged()) {
$query = 'SELECT id_customer FROM ' . _DB_PREFIX_ . 'orders WHERE id_cart = ' . (int) $id_cart . ' AND secure_key = "' . Tools::getValue('secure_key') . '"';
$id_customer = Db::getInstance()->getValue($query);
if (!$id_customer) {
die('error!');
}
$customer = new Customer($id_customer);
$this->context->cookie->id_compare = isset($this->context->cookie->id_compare) ? $this->context->cookie->id_compare: CompareProduct::getIdCompareByIdCustomer($customer->id);
$this->context->cookie->id_customer = (int)($customer->id);
$this->context->cookie->customer_lastname = $customer->lastname;
$this->context->cookie->customer_firstname = $customer->firstname;
$this->context->cookie->logged = 1;
$customer->logged = 1;
$this->context->cookie->is_guest = $customer->isGuest();
$this->context->cookie->passwd = $customer->passwd;
$this->context->cookie->email = $customer->email;
// Add customer to the context
$this->context->customer = $customer;
if (Configuration::get('PS_CART_FOLLOWING') && (empty($this->context->cookie->id_cart) || Cart::getNbProducts($this->context->cookie->id_cart) == 0) && $idCart = (int)Cart::lastNoneOrderedCart($this->context->customer->id)) {
$this->context->cart = new Cart($idCart);
} else {
$id_carrier = (int)$this->context->cart->id_carrier;
$this->context->cart->id_carrier = 0;
$this->context->cart->setDeliveryOption(null);
$this->context->cart->id_address_delivery = (int)Address::getFirstCustomerAddressId((int)($customer->id));
$this->context->cart->id_address_invoice = (int)Address::getFirstCustomerAddressId((int)($customer->id));
}
$this->context->cart->id_customer = (int)$customer->id;
$this->context->cart->secure_key = $customer->secure_key;
$this->context->cookie->write();
}
// EOF HACK FROM ORA
Ceci est à placer dans le fichier /modules/ogone/controllers/front/confirmation.php
Olivier
Grand merci pour ces infos. Donc, tu n'as pas compris pourquoi l'utilisateur était déconnecté ? De mon côté, je suspecte un passage par une adresse HTTP au lieu de HTTPS. Je continue à chercher et te tiens au courant de la solution (si je trouve ...)
C'est également ce que je suspectais mais sans vraiment trouver donc j'ai préféré "hacker" le système pour que cela fonctionne.
Le ven. 24 juin 2016 à 08:54, Peterkenne notifications@github.com a écrit :
Grand merci pour ces infos. Donc, tu n'as pas compris pourquoi l'utilisateur était déconnecté ? De mon côté, je suspecte un passage par une adresse HTTP au lieu de HTTPS. Je continue à chercher et te tiens au courant de la solution (si je trouve ...)
— You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub https://github.com/PrestaShop/ogone/issues/7#issuecomment-228271543, or mute the thread https://github.com/notifications/unsubscribe/AKT_hL0EWxKWNc1hcY56-QalX8l42Lo-ks5qO38xgaJpZM4Ih6cb .
Olivier Ranocha Youonweb - Directeur
Recevez GRATUITEMENT ma formation sur les 7 habitudes des gens efficaces ( http://www.ranochaolivier.com)
Web : http://www.youonweb.be Web solutions serving Business performance
Téléphone : 0032 65 980173 Skype : oranocha
J'ai trouvé chez moi. Je pense que c'est un bug du module ogone : dans la classe ogone.php, la méthode getconfirmationUrl appelle getPtotocol, mais sans argument, ce qui force le protocole à HTTP. Donc, dans le formulaire caché d'Ogone, l'adresse de confrmation est en HTTP, ce qui fait que le user est déconnecté au retour d'Ogone. On n'a donc plus accès à son cookie, utilisé pour aller récupérer la secure-key au cours du checkwaitingorder qui cherrche simplement à vérifier que l'ordre a été créé. donc, la page de confirmation tourne en boucle ...
@oranocha there is a security issue on the SQL request of your code. You must escape the secure_key variable using the pSQL() function to prevent SQL injections.
We use Prestashop 1.6. When customer make payment with Ingenico, the return is done on confirmation.php (so, after, module use confirmation's controller).
The page continue loading because when we come back on the page, the user is disconnected. So, nothing is present in $this->context and script is in error.
Can you help me to understand why user is disconnected from his session when we come back from Ingenico?
Olivier