morgandebray Posted May 11, 2020 Share Posted May 11, 2020 Bonjour, J'ai surchargé la classe Mail.php de prestashop (1.7). J'ai besoin d'envoyer en BCC une adresse mail dynamique que je récupère d'une table personnalisé de ma base de données. L'email s'ajoute bien si j'utilise le "Virement bancaire" de Prestashop. Mais si j'utilise le module Ogone (pour la VISA...), $mail_boutique reste à null. Que faudrait-il que j'ajoute en plus ? Je precise, $mail_boutique est null, mais en le remplaçant avec un mail en dur, l'email en BCC s'envoit bien. J'ai ajouté ces éléments dans la fonction send(): $mail_boutique = Context::getContext()->cookie->__get('mail_boutique'); $bcc = []; if($mail_boutique != false && $mail_boutique != "" && $mail_boutique != null){ $bcc = [$mail_boutique]; } $devLog = '/var/www/xxx/var/logs/dev.log'; $stringBcc = implode("", $bcc); error_log(" --------------------------- MAIL OK -------------------------\r\n", 3, $devLog); error_log(" --------------------------- BBC '{$stringBcc}' -------------------------\r\n", 3, $devLog); if (isset($bcc) && is_array($bcc)) { foreach ($bcc as $addr) { $addr = trim($addr); if (!Validate::isEmail($addr)) { self::dieOrLog($die, 'Error: invalid e-mail address'); return false; } $message->addBcc(self::toPunycode($addr)); } } elseif (isset($bcc)) { $message->addBcc(self::toPunycode($bcc)); } Link to comment Share on other sites More sharing options...
doekia Posted May 11, 2020 Share Posted May 11, 2020 Donc ton cookie ne contient pas de mail_boutique, ce qui me semble normal dans la mesure où en cas de carte bancaire, c'est le serveur de la banque qui exécute ce que l'on appelle l'IPN qui transforme le panier en commande (donc envoi le mail) Identifier que tu es sur une creation de commande (nom du template ou du sujet) et forcer alors la mail_boutique avec ton email bcc Link to comment Share on other sites More sharing options...
morgandebray Posted May 11, 2020 Author Share Posted May 11, 2020 Le cookie contient bien un mail, en tout cas sur le site. Comment alors je peux ajouter un bcc lorsque la banque valide le paiement ? Link to comment Share on other sites More sharing options...
doekia Posted May 11, 2020 Share Posted May 11, 2020 heu ... lire ma réponse pourrait t'aider sûrement Link to comment Share on other sites More sharing options...
morgandebray Posted May 11, 2020 Author Share Posted May 11, 2020 Oui, donc ? Avec des données plus concrètes si possible (fichier, surcharge...) Link to comment Share on other sites More sharing options...
doekia Posted May 11, 2020 Share Posted May 11, 2020 fichier? le même que tu as déjà modifié surcharge? je sais pas comment tu as déjà opéré Comment? en testant le nom du template ou le sujet selon ce qui est le plus approprié pour toi et en utilisant la méthode if de php Link to comment Share on other sites More sharing options...
morgandebray Posted May 11, 2020 Author Share Posted May 11, 2020 Ok pour le fichier La surcharge : j'ai opéré comme montré. J'ai override le Mail.php en reprenant la fonction send() de base, en ajoutant uniquement le code montré pour ajouté un BCC. Comment : où est-ce que je dois procéder aux tests ? Dans le fichier surchargé ? Link to comment Share on other sites More sharing options...
doekia Posted May 11, 2020 Share Posted May 11, 2020 Clairement il faut commencer par apprendre le php si tu veux écrire quelque chose de spécifique Link to comment Share on other sites More sharing options...
morgandebray Posted May 11, 2020 Author Share Posted May 11, 2020 Pour infos, je suis développeur PHP. Link to comment Share on other sites More sharing options...
doekia Posted May 11, 2020 Share Posted May 11, 2020 là ça fait peur Link to comment Share on other sites More sharing options...
morgandebray Posted May 11, 2020 Author Share Posted May 11, 2020 Je peux savoir ce qu'il se passe ? J'ai fait quelque chose de mal ? Je suis développeur PHP, oui, mais pas prestashop. Je suis rentré dans PS sans faire de formation, j'apprends sur le tas. Donc si tu n'es pas capable de m'aider, merci de laisser autres personnes répondre. Link to comment Share on other sites More sharing options...
Eolia Posted May 11, 2020 Share Posted May 11, 2020 Moi perso ça m'étonnerait qu'il y ait un type à la banque qui se connecte pour valider le paiement à la main hein^^ Le retour c'est un script et à ma connaissance un script ne gère pas les cookies (enfin si, on peut, mais c'est une autre histoire) Un cookie c'est temporaire et lié à un NAVIGATEUR. Link to comment Share on other sites More sharing options...
doekia Posted May 11, 2020 Share Posted May 11, 2020 il y a 14 minutes, morgandebray a dit : Je suis développeur PHP et tu ne sais pas écrire: if ($template == 'quelquechose'} { $bcc = ['[email protected]']; } C'est sûrement une blague Link to comment Share on other sites More sharing options...
morgandebray Posted May 11, 2020 Author Share Posted May 11, 2020 @Eolia, je n'ai pas parlé de valider un paiement à la main ^^ J'ai juste besoin d'envoyer une copie de la facture à une adresse mail (qui peut changer). Hors du module, mon bcc s'ajoute bien (comme je reste sur le site, je suis d'accord) : exemple, sur PaymentModule.php je l'ai, car je ne quitte pas le site. Mais pour ogone, comme je change de site, pour l'étape de paiement, le cookie n'est évidemment pas envoyé. Du coup, comment je peux faire ? Je pensais en surchargeant le Mail.php que c'est cette surcharge qu'Ogone prendra en compte, mais non a priori... Link to comment Share on other sites More sharing options...
morgandebray Posted May 11, 2020 Author Share Posted May 11, 2020 il y a 1 minute, doekia a dit : et tu ne sais pas écrire: if ($template == 'quelquechose'} { $bcc = ['[email protected]']; } C'est sûrement une blague A quel endroit j'ai dit que je ne savais pas l'écrire ? J'ai demandé OU est-ce que je devais l'écrire, nuance. Link to comment Share on other sites More sharing options...
doekia Posted May 11, 2020 Share Posted May 11, 2020 Pfuu tu comprends comment marche le web? Surcharger quoi? Un cookie est dépendant du navigateur qui choisit en fonction du domaine d'envoyer ou non. Ici tu crée un cookie pour le domaine X, et tu veux qu'une autre navigateur (qui d'ailleurs n'en est pas un, envoie ce cookie qu'il ne connait pas). Link to comment Share on other sites More sharing options...
Eolia Posted May 11, 2020 Share Posted May 11, 2020 Pardon mais ton raisonnement manque de logique et ma remarque était ironique justement^^ il y a 2 minutes, morgandebray a dit : Mais pour ogone, comme je change de site, pour l'étape de paiement, le cookie n'est évidemment pas envoyé. Donc pas de cookie, ok ? Et pourtant tu écris ça: Citation $mail_boutique = Context::getContext()->cookie->__get('mail_boutique'); Donc ma logique de dev me dit que $mail_boutique = false; Link to comment Share on other sites More sharing options...
morgandebray Posted May 11, 2020 Author Share Posted May 11, 2020 il y a 1 minute, doekia a dit : Pfuu tu comprends comment marche le web? Surcharger quoi? Un cookie est dépendant du navigateur qui choisit en fonction du domaine d'envoyer ou non. Ici tu crée un cookie pour le domaine X, et tu veux qu'une autre navigateur (qui d'ailleurs n'en est pas un, envoie ce cookie qu'il ne connait pas). Je suis au courant. Ce que je veux savoir, c'est si quelqu'un a une solution utiliser une adresse mail en BCC depuis le site de base. Je ne sais pas, en utilisant un champ caché ou autre ! Pourtant, lorsque le site ogone valide le paiement, j'ai bien dans mes logs la trace au niveau de mon adresse mail en bcc (mais vide, du coup, logique). Link to comment Share on other sites More sharing options...
morgandebray Posted May 11, 2020 Author Share Posted May 11, 2020 @Eolia, si j'ai aussi besoin de cookie ici pour les transactions modes de paiement qui se passent pour le site (exemple : par virement bancaire) Link to comment Share on other sites More sharing options...
Eolia Posted May 11, 2020 Share Posted May 11, 2020 Ajoutez une colonne (email) à la table cart, faites un override de la classe et du contrôleur et récupérez cette valeur ($cart->email) pour l'affecter au bcc Link to comment Share on other sites More sharing options...
morgandebray Posted May 11, 2020 Author Share Posted May 11, 2020 Cette partie sera appelé à quel moment ? Après qu'Ogone ai validé le paiement ? Link to comment Share on other sites More sharing options...
Eolia Posted May 11, 2020 Share Posted May 11, 2020 Whaouu... Au lieu de mettre le mail dans le cookie vous l'associez au panier (l'id du panier est utilisé au moment de la validation de commande) Ensuite cette variable devient accessible n'importe où, dans la classe mail.php par exemple vu que vous en avez besoin à cet endroit. Link to comment Share on other sites More sharing options...
morgandebray Posted May 11, 2020 Author Share Posted May 11, 2020 Ok, je vais essayer ça. Link to comment Share on other sites More sharing options...
morgandebray Posted May 12, 2020 Author Share Posted May 12, 2020 (edited) Il y a 21 heures, morgandebray a dit : Cette partie sera appelé à quel moment ? Après qu'Ogone ai validé le paiement ? @Eolia, effectivement, question bête... Mais ok en passant par la base de données, ça fonctionne. Edited May 12, 2020 by morgandebray (see edit history) 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