IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Symfony PHP Discussion :

Mail non envoyé lors de la réception du statut d'un paiement via Stripe


Sujet :

Symfony PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Mai 2004
    Messages
    803
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 803
    Par défaut Mail non envoyé lors de la réception du statut d'un paiement via Stripe
    Bonjour,

    Je mets en place un système de paiement en ligne via l'API Stripe Intent. Lors de mes tests, tout se passe correctement au niveau du paiement. Lors du traitement du statut du paiement également, hormis le fait que je tente d'envoyer un mail lors de la réception d'un statut "succeed", mais celui-ci ne part pas.

    Voici mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
     
        /**
         * @Route("/payment/status", name="payment.status")
         */
        public function paymentStatus(AdvertRepository $advertRepository, Request $request, ObjectManager $manager, \Swift_Mailer $mailer)
        {  
     
            $endpoint_secret = $this->getParameter('stripe_endpoint_secret');
     
            $payload = @file_get_contents('php://input');
            $sig_header = $_SERVER['HTTP_STRIPE_SIGNATURE'];
            $event = null;
     
            try 
            {
     
                $event = \Stripe\Webhook::constructEvent($payload, $sig_header, $endpoint_secret);
     
            } 
            catch(\UnexpectedValueException $e) 
            {
     
                // Invalid payload
                http_response_code(400);
                exit();
            } 
     
            catch(\Stripe\Error\SignatureVerification $e) 
            {
     
                // Invalid signature
                http_response_code(400);
                exit();
     
            }
     
            if ($event->type == "payment_intent.succeeded") 
            {
     
                $intent = $event->data->object;
    ...
     
                // Je mets à jour l'annonce  : tout se passe correctement 
    ...
                // Je génère une facture au format PDF  : tout se passe correctement 
    ...
               // J'enregistre la facture en base de données  : tout se passe correctement 
    ...            
     
                //Sending an email confirmation about the success payment
                $mail = new Mail;
     
                $user = $advert->getOwner()->getUser();
     
                $mail->setReceiver($user)
                     ->setSender(null)
                     ->setSubject($this->getParameter('succeed_payment_email_subject'))
                     ->setFirstname($this->getParameter('administrateur_firstname'))
                     ->setName($this->getParameter('administrateur_name'))
                     ->setEmailFrom($this->getParameter('administrateur_email'))
                     ->setTemplate('Communication/succeedPaymentEmail.html.twig')
                     ->setMessage($this->renderView(
                                                    $mail->getTemplate(), 
                                                    ['user' => $user]
                                                   )
                                 )
                ;
     
                if ($mail->sendEmail($mailer))
                {                
     
                    $manager->persist($mail);
                    $manager->flush();
                    // Le mail est bien enregistré en base de données alors qu'il n'est pas envoyé
     
                }
     
                http_response_code(200);
     
                exit();
     
            } 
            elseif ($event->type == "payment_intent.payment_failed") 
            {
     
                $intent = $event->data->object;
                $error_message = $intent->last_payment_error ? $intent->last_payment_error->message : "";
                printf("Failed: %s, %s", $intent->id, $error_message);
                http_response_code(200);
                exit();
     
            }        
     
        }
    En base de données, je retrouve bien le mail. Donc, $mail->sendEmail($mailer) me retourne bien true, comme attendu en retour de la méthode de mon entité Mail :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
     
        public function sendEmail(\Swift_Mailer $mailer)
        {
     
            $email = (new \Swift_Message($this->subject));
     
            if(is_null($this->sender))
            {
     
                $email->setFrom([$this->emailFrom => $this->firstname . ' ' . $this->name]);
     
            }
            else
            {
                $email->setFrom([$this->sender->getEmail => $this->sender->getUserName]);
     
            }
     
            $email
                    ->setTo($this->receiver->getEmail())
                    ->setBody(
                                $this->message,
                                'text/html'
                             )
            ;
     
            $result = $mailer->send($email);
     
            return $result;
     
        }
    Cependant, le mail n'est pas envoyé (je ne le vois pas arriver dans la messagerie MailDev).

    Or, si je fais un test en créant une nouvelle route directement appelée dans le navigateur et non via l'appel d'un webhook de Stripe, tout fonctionne correctement.

    Quelqu'un aurait une idée?

    Merci d'avance pour votre aide.

  2. #2
    Membre Expert

    Homme Profil pro
    développeur
    Inscrit en
    Octobre 2013
    Messages
    1 588
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : développeur

    Informations forums :
    Inscription : Octobre 2013
    Messages : 1 588
    Par défaut
    Salut,

    Tu test en local? tu as essayé d'identifier le problème avec postman par exemple?

  3. #3
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Mai 2004
    Messages
    803
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 803
    Par défaut
    Merci pour ton intérêt.

    Oui, je suis en local.

    Je ne connaissais pas le genre d'application telle que Postman. Je l'ai donc téléchargée mais j'avoue avoir beaucoup de mal à comprendre comment je peux tester l'appel de ma route avec les paramètres de paiement qui seraient normalement envoyés par le webhook Stripe.

  4. #4
    Membre Expert

    Homme Profil pro
    développeur
    Inscrit en
    Octobre 2013
    Messages
    1 588
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : développeur

    Informations forums :
    Inscription : Octobre 2013
    Messages : 1 588
    Par défaut
    Postman va te permettre d'émuler les paramètres et requêtes http, c'est pratique pour tester tes api. Pour faire rapide https://stackoverflow.com/questions/...pe-webhook-url puisque tu es en local çava être compliqué, car ton domaine ou ip est 127.0.0.1 ou localhost or pour le webhook cela correspond à lui même lors de la réponse. Peut-être stripe propose t-il une conf pour les tests en local https://stripe.com/docs/testing#webhooks mais je ne pense pas.

  5. #5
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Mai 2004
    Messages
    803
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 803
    Par défaut
    J'utilise ngrok pour pouvoir effectuer mes tests de traitement du retour du webhook Stripe. Tout fonctionne bien (les enregistrements en base de données, la création du PDF, etc...) sauf l'envoi du mail. Malgré que le retour de la fonction d'envoi soit à true, le mail n'a tout de même pas été envoyé. Je ne comprends vraiment pas...

    Autrement dit, j'ai configuré le webhook avec une adresse générée par ngrok et pointant vers la route qui traite l'envoi du statut du paiement par Stripe : toutes les actions de la fonction liée à cette route sont bien effectuées, sauf l'envoi du mail qui pourtant ne renvoie pas d'erreur.

  6. #6
    Membre Expert

    Homme Profil pro
    développeur
    Inscrit en
    Octobre 2013
    Messages
    1 588
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : développeur

    Informations forums :
    Inscription : Octobre 2013
    Messages : 1 588
    Par défaut
    Je ne connaissais pas ngrock je me coucherai moins bête
    Ton fichier .env contient bien les bonnes infos avec le bon port pour maildev?
    Tu n'a rien dans les logs?
    J'aurais tester sans maildev pour voir si ça fonctionne avec gmail par exemple.

Discussions similaires

  1. Réponses: 0
    Dernier message: 07/05/2014, 15h57
  2. [OL-2007] Récupérer un mail non envoyé non enregistré
    Par Alhamzaoui80 dans le forum Outlook
    Réponses: 0
    Dernier message: 12/07/2012, 15h16
  3. [PHP 5.0] [Mail] mail non envoyé!
    Par fredgui dans le forum Langage
    Réponses: 4
    Dernier message: 20/02/2009, 13h09
  4. mail non envoyé mais pas d'erreur
    Par leam69 dans le forum Linux
    Réponses: 2
    Dernier message: 25/10/2007, 12h12
  5. [debian] postfix, mail non envoyé
    Par djibril dans le forum Réseau
    Réponses: 5
    Dernier message: 19/04/2007, 19h53

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo