08 Mai 2020

[Prestashop 1.7] Paypal, la table ‘ps_paypal_order’ n’existe pas

Il n’y a pas longtemps, je me suis retrouvé face à un problème avec le module Paypal sur un Prestashop 1.7.6.4. Je ne pouvais pas configurer le module à cause d’une erreur dans la base de données. J’ai donc fait des recherches et j’ai trouvé comment corriger le problème !

Vérifier les tables en base de données

Pour commencer, si vous avez l’erreur “la table ‘ps_paypal_order’ n’existe pas” il faut voir si en base de données vous avez bien les tables. Dans mon cas, une fois connecté à PhpMyAdmin, j’avais toutes les tables liées à Paypal, mais dans mes recherches, j’ai pu voir que chez certaines personnes, cela n’installait même pas les tables en base.

Tables Paypal Prestashop 1.7

Si vous avez l’erreur et les données en base, vous pouvez les supprimer. Nous allons re-installer le module Paypal en faisant une modification d’un fichier plus bas dans cet article.

Avant toutes modifications en base de données, je conseil fortement de faire des sauvegardes de vos données.

Modifier le fichier DbTable.php dans le module Paypal

L’erreur arrive selon votre version de MySQL. Le fichier d’installation du module contient une ligne qui empêche la liaison du module à votre base de données et ce fichiers est Dbtable.php. Ce fichier est chargé à l’installation du module sur votre Prestashop. Il va falloir modifier une ligne particulière, le fichier se trouve dans le dossier : paypal > vendor > ppbtlib > src > Db

Ensuite rendez-vous à la ligne 97 pour trouver “COLLATE=$this->collation” :

/**
* Create table
* @return bool
*/
public function create()
{
$tableExists = $this->db->executeS("SHOW TABLES LIKE '$this->name'");
if ($tableExists == false) {
$keys = array();
foreach ($this->keys as $modelDef) {
if (strpos($modelDef, 'FOREIGN KEY') === 0) {
continue;
}
$keys[] = $modelDef;
}
$result = $this->db->execute("CREATE TABLE IF NOT EXISTS `$this->name` (".
implode(', ', array_merge($this->columns, $keys)).
") ENGINE=$this->engine CHARSET=$this->charset COLLATE=$this->collation;");
if ($result == true) {
$this->alterKeys();
}
return $result;
}
// table exists
$alter = $this->alterFields();

if (!empty($alter)) {
return $this->db->execute($alter);
}
$this->alterKeys();

return true;
}
Extrait du fichier Dbtable.php

COLLATE=$this->collation n’est pas reconnue sur certaines versions MySQL et donc il faut le supprimer, cela donne :

/**
* Create table
* @return bool
*/
public function create()
{
$tableExists = $this->db->executeS("SHOW TABLES LIKE '$this->name'");
if ($tableExists == false) {
$keys = array();
foreach ($this->keys as $modelDef) {
if (strpos($modelDef, 'FOREIGN KEY') === 0) {
continue;
}
$keys[] = $modelDef;
}
$result = $this->db->execute("CREATE TABLE IF NOT EXISTS `$this->name` (".
implode(', ', array_merge($this->columns, $keys)).
") ENGINE=$this->engine CHARSET=$this->charset;");
if ($result == true) {
$this->alterKeys();
}
return $result;
}
// table exists
$alter = $this->alterFields();

if (!empty($alter)) {
return $this->db->execute($alter);
}
$this->alterKeys();

return true;
}
Extrait du fichier Dbtable.php après modification

Ensuite il vous suffit de re-installer le module et cela va permettre au module Paypal la création des tables et la liaison avec votre site Prestashop.

Vous avez besoin d’aide pour installer Paypal sur votre Prestashop ?

– Installation du module
– Connexion avec votre compte Paypal
– Affichage du module dans votre tunnel d’achat

Vous pouvez prendre un ticket de support Prestashop pour que j’intervienne directement sur votre boutique en ligne.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *