Jump to content

Module Exit Popup - Le rendre compatible en HTTPS et semi https


Recommended Posts

Bonjour,

 

J'ai fait l'acquisition de l'addon exit popup il y a quelques mois.
Récemment, je me suis rendu compte qu'une partie des clients n'arrivaient pas à déclencher le code promo quand ils se trouvaient dans la partie HTTPS du site internet. (le panier, lors du processus de commande et etc...)

C'est très simple à comprendre: pour des raisons de sécurité, le navigateur refuse de "loader" l'élément qui n'est pas en https quand il se trouve en https et l'url loadée en ajax est en http simple.

Le console log me donne ce message-ci:

Mixed Content: The page at 'https://www.mywebsite.com/commande' was loaded over HTTPS, but requested an insecure XMLHttpRequest endpoint 'http://www.mywebsite.com/module/lemodulexitpopup/pdg'. This request has been blocked; the content must be served over HTTPS.

Ayant dépassé mes 3 mois de support et me demandant si une autre personne ayant eu le problème, je me permet de poser la question, à savoir si quelqu'un a su patcher son addon et si celui-ci veut-il bien me partager ou me donner une piste pour résoudre cela.

Pour information, mon site n'est qu'en partie en https.

Je vous donne la solution plus bas pour "patcher ce problème" si votre site est entièrement en HTTPS.
Il s'agit d'un "hardcodage" grossier, ne m'en voulez pas, je ne maitrise pas encore assez bien le code prestashop pour résoudre le problème proprement, mais j'ai su "hardcoder" la ligne qui posait problème et cela fonctionne parfaitement si vous utilisez le module avec un site en FULL HTTPS.
Je précise en FULL, car si vous mettez cette url et que votre boutique n'est qu'en partie en https (panier, compte client et etc... comme celle sur laquelle j'ai le bug actuellement), le problème se posera de manière inverse... le déclenchement ne se fera pas en http cette fois.

Commentez la ligne 339 du fichier lemodulexitpopup.php et rajoutez en une avec l'url de votre boutique:

Exemple:

            //$ajaxUrl = $this->context->link->getModuleLink('lemodulexitpopup', 'pdg');
            $ajaxUrl = "https://votreSiteInternetAvecOuSansWWW.com/module/lemodulexitpopup/pdg";

PS: j'ai volontairement changé le nom du module initial par le suivant lemodulexitpopup (en violet) dans mon explication.
! ! ! Dans le code, la couleur "violet" ne veut pas se mettre, mais il faut remplacer par le bon nom également. Faites attention :)
Ceux ayant le module connaissent le vrai nom et cela évitera également des attaques par footprint si le module pose des problèmes de sécurité à l'avenir.

Autant prévenir que guérir :)

Si quelqu'un a une piste pour rendre le module compatible en semi https comme je disais plus haut, qu'il n'hésite pas à partager !

Merci et bonne journée à tous.

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

Regardez le code de la classe link plutot que d'écrire en dur^^

public function getModuleLink($module, $controller = 'default', array $params = array(), $ssl = null, $id_lang = null, $id_shop = null, $relative_protocol = false)

Il y a un paramètre concernant le ssl.

Votre code devient

$ajaxUrl = $this->context->link->getModuleLink('lemodulexitpopup', 'pdg', null, true);
  • Like 1
Link to comment
Share on other sites

Bonjour, :)

Avant tout, merci pour vos réponses.

Cependant quand j'utilisais un code ou l'autre, j'obtenais une erreur, mais en combinant vos réponses, j'ai réussi à créer et utiliser le code exact qui me retourne bien le code en http (quand on est ds une page en http), et en https (quand on est ds une page en https).
La solution est juste en dessous.

Doekia, merci pour l'info du "Tools::usingSecureMode()" qui permet d'avoir une réponse de l'addon en fonction de l'utilisation de l'https et en non-https, il s'adapte grâce à ton code.

Eolia, merci pour l'information de la function getModuleLink (je n'ai pas encore l'habitude de remonter les sources, mais ça aide bien), cependant en forçant à true, l'addon ne me retournait que la réponse avec https, (utile si certains utilise leur boutique qu'en full https).

Pour ceux que ça intéresse: voici le code exact qui fonctionne sur un prestashop v 1.6 et qui permet d'adapter le module exit popup en HTTPS et semi https:
 

//$ajaxUrl = $this->context->link->getModuleLink('lemodulexitpopup', 'pdg');
$ajaxUrl = $this->context->link->getModuleLink('lemodulexitpopup', 'pdg', array(), Tools::usingSecureMode(), null, null, false);

Bien sûr, n'oubliez pas de changer le nom lemodulexitpopup comme précisé plus haut.

Merci à tous et bonne continuation :)

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

Il n'y a pas de différence entre ton code et le mien. Probablement un problème de cache qui a force à fini par répondre la même réponse.

 

Si tu ne passe pas de paramètre après le $ssl (Tools::usingSecureMode()) l'appel prend exactement les paramètres par défaut ensuite, donc null, null, false

 

Note également que le bug, n'a rien a voir avec le coeur Prestashop, mais bien avec ce module que tu ne cites pas, développé par la team qui ne sait même pas comment fonctionne le code du coeur et n'apporte aucun support alors même que le problème est un vice de fabrication.

Edited by doekia (see edit history)
  • Like 1
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...