Jump to content

Erreur 404 lorsque les clients consultent leurs factures


Recommended Posts

Type d’install (nouvelle/MàJ) : Migration site
Version de PS : 1.6.1.24
URL du site concerné : https://boutique-mpack.com/
Thème (défaut/perso) : vp_perfume
Code (original/modifié) : juste un module de devis custom
Hébergement : plesk
Version de PHP : 5.6.40
Version de MySQL : 10.3.39-MariaDB-0ubuntu0.20.04.2
Navigateur(s) concerné(s) : Chrome

 

Bonjour,

 

J'ai un problème sur un site presta que l'on a repris récemment, la consultation des factures ne fonctionne pas côté front office (elle fonctionne très bien côté back office).

Lorsque l'on clique sur une facture de la page https://boutique-mpack.com/fr/historique-des-commandes, cela nous amène vers une page 404 : https://boutique-mpack.com/fr/index.php?controller=pdf-invoice&id_order=4

 

J'ai trouvé pas mal de problèmes similaires sur Internet, cela gravite souvent autour de l'écriture des URL et du mod_rewrite. Nous avons d'autres prestashops qui fonctionnent très bien sur ce même serveur et j'ai tenté de réinitialiser les liens, les regénérer, regénérer le htaccess et vider le cache, mais cela ne change rien.

Côté logs, je n'obtiens pas grand-chose, juste un 404 GET /fr/index.php?controller=pdf-invoice&id_order=4 HTTP/2.0.

Je ne sais pas si cela fonctionnait avant la migration, nous avons migré il y a quelques mois déjà.

 

Comment pourrais-je trouver l'origine du problème ?

 

Je vous remercie d'avance pour toute aide que vous pourriez m'apporter !

 

Link to comment
Share on other sites

Activer le mode debug pour avoir éventuellement plus d'infos.

Vérifier que le contrôleur PdfInvoiceController.php est bien présent dans /controllers/front/

Passer en PhenixSuite serait aussi une bonne idée ;) 

Link to comment
Share on other sites

Salut Eolia,

merci pour ta réponse.

J'ai passé la boutique en debug. C'est étrange, il n'y avait pas de ligne mode_dev dans le fichier defines.inc.php, du coup je l'ai rajoutée ici, après le disclaimer :

define('_PS_MODE_DEV_', true);
/* Debug only */
if (!defined('_PS_MODE_DEV_')) {
define('_PS_MODE_DEV_', false);
}

Par contre en 1.7 ou 1.8, le mode debug est visible dans le back office avec une ligne en bas de l'écran avec les temps de réponse et erreurs, et là ce n'est pas le cas, je n'ai pas l'impression que je soie réellement passé en mode debug, à moins que ce ne soit la 1.6 qui soit comme ça...

Mais du coup je n'ai pas plus de logs d'erreurs après avoir reproduit le problème.

 

J'ai vérifié le fichier PdfInvoicecontroller.php est bien présent au bon endroit. Ai-je moyen de placer une ligne de code quelque part, juste avant l'appel à l'URL en question pour debugger et voir pourquoi on arrive en 404 ? 

 

Du coup j'ai jeté un œil à phenix suite, ça permet de se maintenir à jour sans upgrader la version de PHP ? Le problème c'est qu'il y a un module de devis qui a été développé et cela représenterait pas mal de boulot pour l'adapter à la 1.8...

Link to comment
Share on other sites

J'ai oublié un détail très important !

Désolé c'était vendredi soir que j'avais commencé à regarder...

Lorsque je désactive l'URL simplifiée, cela fonctionne. Par contre on voit bien que le site a été fait pour fonctionner avec l'url simplifiée activée vu que plein d'autres pages ont des liens morts si je la désactive...

Link to comment
Share on other sites

Donc vous devez avoir des overrides qui fichent le bazar (sur PdfInvoiceController ou frontcontroller ou dispatcher ou hook ou link...)

PhenixSuite permet de rester en 1.6 avec la possibilité d'utiliser PHP 8 et plein de fonctionnalités en plus, inexistantes sur les 1.7+

Link to comment
Share on other sites

Je vais jeter un oeil à phenixsuite, ça peut être intéressant !

 

Alors j'ai regardé les override, il y a plein de dossiers vides, notamment dans controller/front, mais pas de fichier.

Le seul fichier c'est classes/order/OrderPayment.php

 

<?php

class OrderPayment extends OrderPaymentCore
{
/**
     * @see ObjectModel::$definition
     */
    public static $definition = array(
        'table' => 'order_payment',
        'primary' => 'id_order_payment',
        'fields' => array(
            'order_reference' =>     array('type' => self::TYPE_STRING, 'validate' => 'isAnything', 'size' => 100),
            'id_currency' =>         array('type' => self::TYPE_INT, 'validate' => 'isUnsignedId', 'required' => true),
            'amount' =>             array('type' => self::TYPE_FLOAT, 'validate' => 'isNegativePrice', 'required' => true),
            'payment_method' =>     array('type' => self::TYPE_STRING, 'validate' => 'isGenericName'),
            'conversion_rate' =>     array('type' => self::TYPE_INT, 'validate' => 'isFloat'),
            'transaction_id' =>     array('type' => self::TYPE_STRING, 'validate' => 'isAnything', 'size' => 254),
            'card_number' =>         array('type' => self::TYPE_STRING, 'validate' => 'isAnything', 'size' => 254),
            'card_brand' =>         array('type' => self::TYPE_STRING, 'validate' => 'isAnything', 'size' => 254),
            'card_expiration' =>     array('type' => self::TYPE_STRING, 'validate' => 'isAnything', 'size' => 254),
            'card_holder' =>         array('type' => self::TYPE_STRING, 'validate' => 'isAnything', 'size' => 254),
            'date_add' =>             array('type' => self::TYPE_DATE, 'validate' => 'isDate'),
        ),
    );
}

Link to comment
Share on other sites

Ça c'est l'URL qui pose problème :

 

<a href="{$link->getPageLink('pdf-invoice', true, NULL, "id_order={$order.id_order}")}" title="{l s='Invoice'}" target="_blank"><img src="{$img_dir}icon/pdf.gif" alt="{l s='Invoice'}" class="icon" /></a>

 

Ça c'est une URL de la même page qui fonctionne (retour au compte) :

<li><a href="{$link->getPageLink('my-account.php', true)}"><img src="{$img_dir}icon/my-account.gif" alt="" class="icon" /> {l s='Back to Your Account'}</a></li>

Link to comment
Share on other sites

J'ai essayé de remplacer par le history.tpl par défaut, mais ça ne fonctionne pas non plus.

J'ai regardé sur un autre presta, l'URL est bien <a target="_blank" href="domaine/index.php?controller=pdf-invoice?id_order=12">Téléchargez votre facture au format PDF</a>

Donc ça ne doit pas venir directement du fichier tpl...

Edited by David Simon (see edit history)
Link to comment
Share on other sites

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...