Jump to content

Ajouter un BCC dans l'email (module OGONE)


Recommended Posts

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

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

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

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

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

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

@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

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

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

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

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

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