Jump to content

Problème envoi de mail après paiement Paypal [résolu]


Recommended Posts

Bonjour,

 

Je viens vers vous car notre dernier client qui a payé sa commande avec paypal n'a pas reçu de mail de confirmation de paiement. Je suis donc allée sur sa fiche et j'ai cliqué sur "renvoyer le mail", ce qui m'a généré une erreur TCPDF. En pièce jointe, je vous ai mis ce qui est affiché en mode debug. ça n'était jamais arrivé avant avec ce module et c'est arrivé du jour au lendemain... 

post-1218924-0-56533800-1479907722_thumb.png

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

Pas évident comme ça, mais vous devez avoir le problème pour tous les mails en fait, car ce n'est pas le module qui envoie le mail mais Prestashop.

Apparemment il n'arrive pas à charger l'image du logo.

 

Avez-vous effectué des modifications récemment (mises à jour de modules ou autre) ?

Link to comment
Share on other sites

Oui, je l'ai trouvé! Voici ce qu'il m'indique:

<?php
class Tools extends ToolsCore
{
	/**
	* Get meta tages for a given page
	*
	* @param integer $id_lang Language id
	* @return array Meta tags
	*/
	public static function getMetaTags($id_lang, $page_name, $title = '')
	{
		global $maintenance;

		if (!(isset($maintenance) AND (!in_array(self::getRemoteAddr(), explode(',', Configuration::get('PS_MAINTENANCE_IP'))))))
		{
		 	/* Products specifics meta tags */
			if ($id_product = self::getValue('id_product'))
			{
				$row = Db::getInstance(_PS_USE_SQL_SLAVE_)->getRow('
				SELECT `name`, `meta_title`, `meta_description`, `meta_keywords`, `description_short`
				FROM `'._DB_PREFIX_.'product` p
				LEFT JOIN `'._DB_PREFIX_.'product_lang` pl ON (pl.`id_product` = p.`id_product`)
				WHERE pl.id_lang = '.(int)($id_lang).' AND pl.id_product = '.(int)($id_product).' AND p.active = 1');
				if ($row)
				{
					if (empty($row['meta_description']))
						$row['meta_description'] = strip_tags($row['description_short']);
					return self::completeMetaTags($row, $row['name']);
				}
			}

			/* Categories specifics meta tags */
			elseif ($id_category = self::getValue('id_category'))
			{
				if (!empty($title))
					$title = ' - '.$title;
				$page_number = (int)self::getValue('p');
				$row = Db::getInstance(_PS_USE_SQL_SLAVE_)->getRow('
				SELECT `name`, `meta_title`, `meta_description`, `meta_keywords`, `description`
				FROM `'._DB_PREFIX_.'category_lang`
				WHERE id_lang = '.(int)($id_lang).' AND id_category = '.(int)($id_category));
				if ($row)
				{
					if (empty($row['meta_description']))
						$row['meta_description'] = strip_tags($row['description']);

					// Paginate title
					if (!empty($row['meta_title']))
						$row['meta_title'] = $title.$row['meta_title'].(!empty($page_number) ? ' ('.$page_number.')' : '');
					else
						$row['meta_title'] = $row['name'].(!empty($page_number) ? ' ('.$page_number.')' : '');
					
					if (!empty($title))
						$row['meta_title'] = $title.(!empty($page_number) ? ' ('.$page_number.')' : '');
						
					return self::completeMetaTags($row, $row['name']);
				}
			}

			/* Manufacturers specifics meta tags */
			elseif ($id_manufacturer = self::getValue('id_manufacturer'))
			{
				$page_number = (int)self::getValue('p');
				$row = Db::getInstance(_PS_USE_SQL_SLAVE_)->getRow('
				SELECT `name`, `meta_title`, `meta_description`, `meta_keywords`
				FROM `'._DB_PREFIX_.'manufacturer_lang` ml
				LEFT JOIN `'._DB_PREFIX_.'manufacturer` m ON (ml.`id_manufacturer` = m.`id_manufacturer`)
				WHERE ml.id_lang = '.(int)($id_lang).' AND ml.id_manufacturer = '.(int)($id_manufacturer));
				if ($row)
				{
					if (empty($row['meta_description']))
						$row['meta_description'] = strip_tags($row['meta_description']);
					$row['meta_title'] .= $row['name'] . (!empty($page_number) ? ' ('.$page_number.')' : '');
					return self::completeMetaTags($row, $row['meta_title']);
				}
			}

			/* Suppliers specifics meta tags */
			elseif ($id_supplier = self::getValue('id_supplier'))
			{
				$row = Db::getInstance(_PS_USE_SQL_SLAVE_)->getRow('
				SELECT `name`, `meta_title`, `meta_description`, `meta_keywords`
				FROM `'._DB_PREFIX_.'supplier_lang` sl
				LEFT JOIN `'._DB_PREFIX_.'supplier` s ON (sl.`id_supplier` = s.`id_supplier`)
				WHERE sl.id_lang = '.(int)($id_lang).' AND sl.id_supplier = '.(int)($id_supplier));

				if ($row)
				{
					if (empty($row['meta_description']))
						$row['meta_description'] = strip_tags($row['meta_description']);
					if (!empty($row['meta_title']))
						$row['meta_title'] = $row['meta_title'];
					return self::completeMetaTags($row, $row['name']);
				}
			}

			/* CMS specifics meta tags */
			elseif ($id_cms = self::getValue('id_cms'))
			{
				$row = Db::getInstance(_PS_USE_SQL_SLAVE_)->getRow('
				SELECT `meta_title`, `meta_description`, `meta_keywords`
				FROM `'._DB_PREFIX_.'cms_lang`
				WHERE id_lang = '.(int)($id_lang).' AND id_cms = '.(int)($id_cms));
				if ($row)
				{
					$row['meta_title'] = $row['meta_title'];
					return self::completeMetaTags($row, $row['meta_title']);
				}
			}

			/* CMS category specifics meta tags */
			elseif ($id_cms = self::getValue('id_cms_category'))
			{
				$row = Db::getInstance(_PS_USE_SQL_SLAVE_)->getRow('
				SELECT `meta_title`, `meta_description`, `meta_keywords`
				FROM `'._DB_PREFIX_.'cms_category_lang`
				WHERE id_lang = '.(int)($id_lang).' AND id_cms_category = '.(int)($id_cms));
				if ($row)
				{
					$row['meta_title'] = $row['meta_title'];
					return self::completeMetaTags($row, $row['meta_title']);
				}
			}
		}

		/* Default meta tags */
		return self::getHomeMetaTags($id_lang, $page_name);
	}

	/**
	* Get meta tags for a given page
	*
	* @param integer $id_lang Language id
	* @return array Meta tags
	*/
	public static function getHomeMetaTags($id_lang, $page_name)
	{
		/* Metas-tags */
		$metas = Meta::getMetaByPage($page_name, $id_lang);
		$ret['meta_title'] = (isset($metas['title']) AND $metas['title']) ? $metas['title'] : "";
		$ret['meta_description'] = (isset($metas['description']) AND $metas['description']) ? $metas['description'] : '';
		$ret['meta_keywords'] = (isset($metas['keywords']) AND $metas['keywords']) ? $metas['keywords'] :  '';
		return $ret;
	}


	public static function completeMetaTags($metaTags, $defaultValue)
	{
		global $cookie;

		if (empty($metaTags['meta_title']))
			$metaTags['meta_title'] = $defaultValue;
		if (empty($metaTags['meta_description']))
			$metaTags['meta_description'] = Configuration::get('PS_META_DESCRIPTION', (int)($cookie->id_lang)) ? Configuration::get('PS_META_DESCRIPTION', (int)($cookie->id_lang)) : '';
		if (empty($metaTags['meta_keywords']))
			$metaTags['meta_keywords'] = Configuration::get('PS_META_KEYWORDS', (int)($cookie->id_lang)) ? Configuration::get('PS_META_KEYWORDS', (int)($cookie->id_lang)) : '';
		return $metaTags;
	}
}
?>
Link to comment
Share on other sites

Ok, si tu regardes la même méthode dans le fichier "d'origine" elle attend 3 arguments et se comporte différemment.

    public static function completeMetaTags($meta_tags, $default_value, Context $context = null)
    {
        Tools::displayAsDeprecated();
        return Meta::completeMetaTags($meta_tags, $default_value, $context);
    }

Donc je pense que tu dois regarder de ce côté là.

 

Sais tu quel module aurait pu ajouter ce fichier d'override ?

Link to comment
Share on other sites

Non mais l'override (et la notice qui n'est qu'une notice) n'a rien à voir avec l'erreur.

Le problème vient de la classe TCPDF qui n'arrive pas à récupérer le logo.

 

Ce problème est curieux car le fichier existe bien.

Vous n'auriez pas modifié quelque chose lié au protocole (https) ?

 

L'envoi du mail ne se fait pas parce que la génération de la facture (en pdf) échoue

Link to comment
Share on other sites

Désactiver les modules ne changera rien. Le fichier d'override a été déposé là par ... quelque chose ou quelqu'un.

En général ils sont créés par un module ou ... par toi (ou une autre personne qui aurait développé ton site).

 

Mon idée était de déterminer quel module avait pu le créer et si ce module n'est pas important/vital de le supprimer puis de supprimer le fichier overridé (dans ce cas il faudra aussi régénérer le fichier cache/class_index.php).

Link to comment
Share on other sites

Encore un bon point pour Eolia, la 1ère erreur n'est qu'une notice. Il n'y a pas forcément de rapport avec ton problème. Donc je t'envoie peut-être sur une mauvaise piste.

 

En revanche un test très simple serait de modifier le logo des factures depuis le menu "Préférences > Themes" (ensuite tu vas dans l 'onglet "Logos pour les e-mails et factures").

 

Tu peux aussi jeter un oeil à ce topic (la soluce est un peu sale mais elle a le mérite de fonctionner).

 

Une autre piste serait les droits sur le répertoire des images.

Link to comment
Share on other sites

Dès la mise en ligne du site il y a quelques mois le site était en https et je n'y ais pas retouché depuis. BeComWeb comment faites-vous pour savoir quel module peut créer ce problème? J'ai désinstallé le module de rétractation qui n'a pas servi pour l'instant et j'ai toujours la même erreur qui est générée donc j'imagine que ce n'est pas lui qui est en cause. 

 

Je vais voir les autres pistes que vous me conseillez et je vous tiens au courant

Edited by astrid2776 (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...