L E O Posted September 19, 2016 Share Posted September 19, 2016 (edited) Bonjour, Le message "Frontcontroller::init - Cart cannot be loaded or an order has already been placed using this cart" apparait dans les logs pour toutes les commandes quelques soit leur moyen de paiement. Je suis en PS 1.6.1.1 depuis plus d'1 an en multiboutiques et cet incident persiste depuis la mise à jour vers cette version. J'ai trouvé un sujet traitant de ce problème sur le forum PS : https://www.prestashop.com/forums/topic/466782-cart-cannot-be-loaded-or-an-order-has-already-been-placed-using-this-cart/page-3 Est-ce que l'équipe Prestashop peut : Confirmer l'existence d'un bug qui se produit à l'issue de le confirmation de commande tel que décrit dans le post de kalle@makewebo : So the problem we found is that at the order-confirmation page the id_cart cookie was still set. So in FrontController init() it then checks if that cookie is set and then checks if the cart already been used for an order, which it then has. Then it will write out the error in the log. Valider le bon fonctionnement du correctif apporter pas kalle@makewebo et bellini13 dans le même Post : Just add the PaymentModule.php in /override/classes/ folder Votre réponse (Prestashop) est attendue par un très grand nombre d'utilisateurs et de développeurs. Si par hasard d'autres utilisateurs de PS ont rencontré ce problème et l'ont résolus , merci de nous faire par de la solution appliquée. Merci pour votre compréhension. Edited September 19, 2016 by L E O (see edit history) Link to comment Share on other sites More sharing options...
Eolia Posted September 19, 2016 Share Posted September 19, 2016 En fait la méthode init() complète doit être celle-là public function init() { parent::init(); $this->id_cart = (int)(Tools::getValue('id_cart', 0)); $is_guest = false; /* check if the cart has been made by a Guest customer, for redirect link */ if (Cart::isGuestCartByCartId($this->id_cart)) { $is_guest = true; $redirectLink = 'index.php?controller=guest-tracking'; } else { $redirectLink = 'index.php?controller=history'; } $this->id_module = (int)(Tools::getValue('id_module', 0)); $this->id_order = Order::getOrderByCartId((int)($this->id_cart)); if ($this->context->cookie->id_cart) { $this->context->cookie->__unset('id_cart'); } $this->secure_key = Tools::getValue('key', false); $order = new Order((int)($this->id_order)); if ($is_guest) { $customer = new Customer((int)$order->id_customer); $redirectLink .= '&id_order='.$order->reference.'&email='.urlencode($customer->email); } if (!$this->id_order || !$this->id_module || !$this->secure_key || empty($this->secure_key)) { Tools::redirect($redirectLink.(Tools::isSubmit('slowvalidation') ? '&slowvalidation' : '')); } $this->reference = $order->reference; if (!Validate::isLoadedObject($order) || $order->id_customer != $this->context->customer->id || $this->secure_key != $order->secure_key) { Tools::redirect($redirectLink); } $module = Module::getInstanceById((int)($this->id_module)); if ($order->module != $module->name) { Tools::redirect($redirectLink); } } 1 Link to comment Share on other sites More sharing options...
L E O Posted September 19, 2016 Author Share Posted September 19, 2016 Merci Eolia pour cette réponse SUPER rapide ! Questions subsidiaires : Je mets ça où, à la place de quoi ? Qu'est-ce que cela corrige ? Est-ce que je dois quand même appliquer le correctif proposé par kalle@makewebo ? Merci ;-) Link to comment Share on other sites More sharing options...
L E O Posted September 20, 2016 Author Share Posted September 20, 2016 (edited) Bonjour, En cherchant, j'ai trouvé une portion de code similaire dans le fichier controllers/front/OrderConfirmationController.php La différence se situe à la ligne 58 ou les lignes suivantes sont manquantes : if ($this->context->cookie->id_cart) { $this->context->cookie->__unset('id_cart'); } Est-ce qu'il s'agit du bon fichier ? Dois-je seulement ajouter ces lignes pour corriger le pb ? Voici le fichier OrderConfirmationController.php que j'obtiendrai après correction. Je rappelle que je suis sur PS 1.6.1.1. <?php/** 2007-2015 PrestaShop** NOTICE OF LICENSE** This source file is subject to the Open Software License (OSL 3.0)* that is bundled with this package in the file LICENSE.txt.* It is also available through the world-wide-web at this URL:* http://opensource.org/licenses/osl-3.0.php* If you did not receive a copy of the license and are unable to* obtain it through the world-wide-web, please send an email* to license@prestashop.com so we can send you a copy immediately.** DISCLAIMER** Do not edit or add to this file if you wish to upgrade PrestaShop to newer* versions in the future. If you wish to customize PrestaShop for your* needs please refer to http://www.prestashop.com for more information.** @author PrestaShop SA <contact@prestashop.com>* @copyright 2007-2015 PrestaShop SA* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)* International Registered Trademark & Property of PrestaShop SA*/class OrderConfirmationControllerCore extends FrontController{ public $ssl = true; public $php_self = 'order-confirmation'; public $id_cart; public $id_module; public $id_order; public $reference; public $secure_key; /** * Initialize order confirmation controller * @see FrontController::init() */ public function init() { parent::init(); $this->id_cart = (int)(Tools::getValue('id_cart', 0)); $is_guest = false; /* check if the cart has been made by a Guest customer, for redirect link */ if (Cart::isGuestCartByCartId($this->id_cart)) { $is_guest = true; $redirectLink = 'index.php?controller=guest-tracking'; } else { $redirectLink = 'index.php?controller=history'; } $this->id_module = (int)(Tools::getValue('id_module', 0)); $this->id_order = Order::getOrderByCartId((int)($this->id_cart)); if ($this->context->cookie->id_cart) { $this->context->cookie->__unset('id_cart'); } $this->secure_key = Tools::getValue('key', false); $order = new Order((int)($this->id_order)); if ($is_guest) { $customer = new Customer((int)$order->id_customer); $redirectLink .= '&id_order='.$order->reference.'&email='.urlencode($customer->email); } if (!$this->id_order || !$this->id_module || !$this->secure_key || empty($this->secure_key)) { Tools::redirect($redirectLink.(Tools::isSubmit('slowvalidation') ? '&slowvalidation' : '')); } $this->reference = $order->reference; if (!Validate::isLoadedObject($order) || $order->id_customer != $this->context->customer->id || $this->secure_key != $order->secure_key) { Tools::redirect($redirectLink); } $module = Module::getInstanceById((int)($this->id_module)); if ($order->module != $module->name) { Tools::redirect($redirectLink); } } /** * Assign template vars related to page content * @see FrontController::initContent() */ public function initContent() { parent::initContent(); $this->context->smarty->assign(array( 'is_guest' => $this->context->customer->is_guest, 'HOOK_ORDER_CONFIRMATION' => $this->displayOrderConfirmation(), 'HOOK_PAYMENT_RETURN' => $this->displayPaymentReturn() )); if ($this->context->customer->is_guest) { $this->context->smarty->assign(array( 'id_order' => $this->id_order, 'reference_order' => $this->reference, 'id_order_formatted' => sprintf('#%06d', $this->id_order), 'email' => $this->context->customer->email )); /* If guest we clear the cookie for security reason */ $this->context->customer->mylogout(); } $this->setTemplate(_PS_THEME_DIR_.'order-confirmation.tpl'); } /** * Execute the hook displayPaymentReturn */ public function displayPaymentReturn() { if (Validate::isUnsignedId($this->id_order) && Validate::isUnsignedId($this->id_module)) { $params = array(); $order = new Order($this->id_order); $currency = new Currency($order->id_currency); if (Validate::isLoadedObject($order)) { $params['total_to_pay'] = $order->getOrdersTotalPaid(); $params['currency'] = $currency->sign; $params['objOrder'] = $order; $params['currencyObj'] = $currency; return Hook::exec('displayPaymentReturn', $params, $this->id_module); } } return false; } /** * Execute the hook displayOrderConfirmation */ public function displayOrderConfirmation() { if (Validate::isUnsignedId($this->id_order)) { $params = array(); $order = new Order($this->id_order); $currency = new Currency($order->id_currency); if (Validate::isLoadedObject($order)) { $params['total_to_pay'] = $order->getOrdersTotalPaid(); $params['currency'] = $currency->sign; $params['objOrder'] = $order; $params['currencyObj'] = $currency; return Hook::exec('displayOrderConfirmation', $params); } } return false; }} Merci Edited September 20, 2016 by L E O (see edit history) Link to comment Share on other sites More sharing options...
L E O Posted September 20, 2016 Author Share Posted September 20, 2016 (edited) Malgré l'ajout de ces quelques lignes dans le script OrderConfirmationController.php, le problème persiste. Lors de la dernière commande enregistrée, j'ai encore le log : Frontcontroller::init - Cart cannot be loaded or an order has already been placed using this cart Que faire ? Est-ce qu'il faut vider un cache pour que les modifs soient effectives ou autres ? Edited September 20, 2016 by L E O (see edit history) Link to comment Share on other sites More sharing options...
jojocarofr Posted September 20, 2016 Share Posted September 20, 2016 Bonjour Meme probleme que toi , mais aucune solution actuellement , c'est juste chiant Quelqu'un a t il une solution Merci a tous Link to comment Share on other sites More sharing options...
Eolia Posted September 20, 2016 Share Posted September 20, 2016 (edited) Si ce ne sont que les logs qui vous ennuient, commentez la ligne 307 de FrontController.php: if (Validate::isLoadedObject($cart) && $cart->OrderExists()) { //$errorLog = Tools::displayError('Cart cannot be loaded or an order has already been placed using this cart', false); //PrestaShopLogger::addLog('Frontcontroller::init - '.$errorLog, 1, null, 'Cart', (int)$this->context->cookie->id_cart, true); unset($this->context->cookie->id_cart, $cart, $this->context->cookie->checkedTOS); $this->context->cookie->check_cgv = false; } Mais plus important, pour supprimer le die() débile où le client se retrouve avec une page blanche alors qu'il a juste fait un back avec son navigateur, ca se passe dans paymentmodule.php, vers la ligne 838, 2 lignes à commenter et rajouter les lignes suivantes: if (self::DEBUG_MODE) { PrestaShopLogger::addLog('PaymentModule::validateOrder - End of validateOrder', 1, null, 'Cart', (int)$id_cart, true); } unset($this->context->cookie->id_cart, $this->context->cart, $this->context->cookie->checkedTOS); $this->context->cookie->check_cgv = false; return true; } else { $error = Tools::displayError('Cart cannot be loaded or an order has already been placed using this cart'); //PrestaShopLogger::addLog($error, 4, '0000001', 'Cart', intval($this->context->cart->id)); //die($error); unset($this->context->cookie->id_cart, $this->context->cart, $this->context->cookie->checkedTOS); $this->context->cookie->check_cgv = false; Tools::redirect('index.php?controller=history'); } Edited September 20, 2016 by Eolia (see edit history) 1 Link to comment Share on other sites More sharing options...
L E O Posted September 21, 2016 Author Share Posted September 21, 2016 Merci Eolia pour ta réponse. Ce n'est pas le log qui me pose problème mais son origine que je cherche à corriger. Tu n'as pas répondu à ma question concernant la méthode init() : de quel fichier s'agit il ? Si c'est OrderConfirmationController.php alors la modification ne corrige rien apparemment (le log est toujours là donc le problème persiste). Je vais tester la suppression du die() effectivement débile, surtout en version de production. Si quelqu'un d'autre à des infos sur le sujet, nous sommes évidemment preneurs. Merci à vous. Link to comment Share on other sites More sharing options...
Eolia Posted September 21, 2016 Share Posted September 21, 2016 Heu... le log c'est une information qui a été rajouté dans ces versions, mais à part le die(), pour les autres cas c'est transparent pour le client puisque son cookie->cart est réinitialisé Ne vous prenez pas la tête pour rien, il y a des bugs beaucoup plus handicapants dans ces versions (arrondis, retours, stocks avancés, multi-boutique, etc...) Link to comment Share on other sites More sharing options...
L E O Posted September 21, 2016 Author Share Posted September 21, 2016 Je suis entièrement d'accord avec toi ! Prestashop est une mine de BUGS très handicapante pour qui veut travailler sérieusement au développement de e-business. Je me bats tous les jours avec ce monstre chronophage pour essayer de colmater les brèches de ses lacunes : multiboutiques, commandes erronées, arrondis, etc... Et je pense migrer vers une solution payante mais vraiment faite pour les pros et pas pour jouer à la dînette. Encore merci Eolia pour tes infos. Link to comment Share on other sites More sharing options...
jojocarofr Posted September 23, 2016 Share Posted September 23, 2016 Bonjour Moi j'ai un bug , ou les mails de confirmation de commande sont de temps en temps en dollars et de temps en temps en euros Sachant que j'ai sur Prest seulement l'euros comme devise Quelqu'un connait une solution ? Merci a tous C'est lié a la meme erreur : Frontcontroller::init - Cart cannot be loaded or an order has already been placed using this cart Link to comment Share on other sites More sharing options...
L E O Posted September 28, 2016 Author Share Posted September 28, 2016 Ouvrez un nouveau sujet pour votre demande. Link to comment Share on other sites More sharing options...
pepitalinux Posted February 18, 2017 Share Posted February 18, 2017 bonjour, je vous fait part de mon expérience aussi sur ce message d'erreur on ne sait jamais car il y a différentes raisons qui génère ce bug j'ai l'impression et le log est le même pour tout le monde..... Pour ma part je suis en prestashop 1.6.1.11 donc dernière version. J'ai fait une migration des datas (commande, clients, etc....car le site datait et les mises à jour successive avait rendu la base non conforme (oui oui le processus de mise à jour est comment dire a revoir ? , champ en trop, en moins etc..... J'avais donc déplacé toute les datas sans avoir déplacé les paniers. Du coup lors des tests je rencontrai en permanence l'erreur décrite : Frontcontroller::init - Cart cannot be loaded or an order has already been placed using this cart En faite après avoir fait une commande test, le panier se vidait coté front office mais il était bien visible depuis le backoffice. La numérotation des paniers ayant redémarrer à 0, il associait ce nouveau panier à une vieille commande en base. Après récupération des paniers depuis mon vieux site plus de soucis. Voila bonne journée ! Link to comment Share on other sites More sharing options...
DjoLaFrite Posted April 13, 2017 Share Posted April 13, 2017 Bonjour à tous , J'ai le même problème de log, mais le pire c'est que mes clients ne reçoivent pas de conformation de paiement. J'ai branché mon prestashop à un SMTP donc je vois passer les mails et donc seuls les mails de confirmation de paiement ne partent pas. C'est un peu embêtant de faire du ecommerce sans pouvoir prévenir son client que son paiement à été accepté ... ça génère de la déception et des clients qui s'en vont. Merci pour votre retour et votre aide Cordialement Link to comment Share on other sites More sharing options...
peach34 Posted May 5, 2017 Share Posted May 5, 2017 Meme probleme sur prestashop 1.6.11 Les produits commandés n'apparaissent pas dans la commande. Pas de statut pour la commande donc pas de confirmation pour le client et dans les logs Frontcontroller::init - Cart cannot be loaded or an order has already been placed using this cart Ca fait plusieurs mois que ca dure et c'est 1 commande sur 3/4 environ Meme problème avec paypal et payplug Quelqu'un à une solution Frontcontroller::init - Cart cannot be loaded or an order has already been placed using this cart Link to comment Share on other sites More sharing options...
Eolia Posted May 5, 2017 Share Posted May 5, 2017 Ne mélangez pas tout^^ Ce message, dans les logs, signifie que quelqu'un, après avoir passé commande a effectué un retour arrière ou a rafraichi la page (et donc renvoyé le formulaire) mais le panier a déjà été validé en commande donc c'est normal. Pour les commandes vides, c'est un problème sur un module hooké sur le validateorder, donc rien à voir avec le paiement. (S'il y avait un souci avec le paiement en retour, la commande ne serait pas créée) Regardez donc du côté des modules, il y en a au moins un qui doit générer une erreur dans le error.log d'Apache aux dates et heures des dites commandes. Link to comment Share on other sites More sharing options...
Manu-41 Posted June 20, 2017 Share Posted June 20, 2017 Bonjour, à tous, je rencontre un souci similaire, Un ajout au panier, et quand ont va sur le panier, il est indiqué panier vide. J'ai aussi ce message: Frontcontroller::init - Cart cannot be loaded or an order has already been placed using this cart J'ai migré en début d'année avec un module d'un prestashop vers un autre prestashop. Tous fonctionnait bien, mais depuis plusieurs jours j'ai ce problème. Mais un fois connecté, plus de problème. Cela peut-il venir des numéro de panier? Link to comment Share on other sites More sharing options...
SOURIRE DES SAVEURS Posted January 30, 2020 Share Posted January 30, 2020 On 6/20/2017 at 10:55 AM, Manu-shop said: Bonjour, à tous, je rencontre un souci similaire, Un ajout au panier, et quand ont va sur le panier, il est indiqué panier vide. J'ai aussi ce message: Frontcontroller::init - Cart cannot be loaded or an order has already been placed using this cart J'ai migré en début d'année avec un module d'un prestashop vers un autre prestashop. Tous fonctionnait bien, mais depuis plusieurs jours j'ai ce problème. Mais un fois connecté, plus de problème. Cela peut-il venir des numéro de panier? Expand Bonjour, j'ai le même problème, je n'arrive pas à savoir d'où ça vient. Quelqu'un peut il me guider ? En vous remerciant Link to comment Share on other sites More sharing options...
Eolia Posted January 30, 2020 Share Posted January 30, 2020 Cookie qui se vide Link to comment Share on other sites More sharing options...
SOURIRE DES SAVEURS Posted February 3, 2020 Share Posted February 3, 2020 On 1/30/2020 at 3:42 PM, Eolia said: Cookie qui se vide Expand Bonjour, et que dois-je faire ? Merci Link to comment Share on other sites More sharing options...
Eolia Posted February 3, 2020 Share Posted February 3, 2020 Trouver pourquoi^^ Ça peut être sa taille qui est trop grosse (classique avec le module "Produits déjà vus"), un module qui le réinitialise, un bug de code dans votre version, une mauvaise configuration de domaine... Il y a plein de raisons possibles. Link to comment Share on other sites More sharing options...
SOURIRE DES SAVEURS Posted February 3, 2020 Share Posted February 3, 2020 Bonjour et merci, est-ce que vous me parlez du cache de prestashop ? car je l'ai vidé, mais ça ne change rien Link to comment Share on other sites More sharing options...
Eolia Posted February 3, 2020 Share Posted February 3, 2020 Dans une autre dimension peut-être, mais là je ne crois pas avoir parlé de cache concernant votre problème. Link to comment Share on other sites More sharing options...
SOURIRE DES SAVEURS Posted February 3, 2020 Share Posted February 3, 2020 Bonjour et OK, je suis désolée, je ne suis pas experte et je ne sais pas où vider ce dossier cookie Merci Link to comment Share on other sites More sharing options...
Eolia Posted February 3, 2020 Share Posted February 3, 2020 Ben ce n'est pas un dossier mais un petit fichier envoyé dans le navigateur de chaque utilisateur et il ne faut pas le vider justement, c'est lui qui conserve l'historique du client, son identifiant de panier etc. Si vous n'y connaissez rien il faudrait demander à quelqu'un du métier car ça ne se debugue pas en 5 min ce genre de choses. Link to comment Share on other sites More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now