math zerman Posted October 19, 2021 Share Posted October 19, 2021 Bonjour à tous, et merci pour l'aide que vous pourrez m'apporter ! Contexte : Je développe un script qui va me permettre d'utiliser l'API des mails transactionnels de sendinblue. Ma requête en base fonctionne. Mon script appel bien l'API et le mail part lorsque je charge l'url de mon script. Les données du clients sont récupérées puis envoyées au client avec les données dans une template sendinblue "confirmation de commande" . Maintenant, j'aimerai faire la chose la suivante : Appeler cette URL à chaque fois que le statut d'une commande est passée en "commande confirmée" Je sais que le statut de la commande est lié à current_state dans la table order ( quelque chose ), est-ce possible de mettre un écouteur à chaque fois qu'une nouvelle ligne apparaît en base ? Merci pour votre aide ! Link to comment Share on other sites More sharing options...
Mediacom87 Posted October 19, 2021 Share Posted October 19, 2021 Bonjour, utilisez le HOOK : hookpostUpdateOrderStatus() Link to comment Share on other sites More sharing options...
math zerman Posted October 20, 2021 Author Share Posted October 20, 2021 Bonjour merci beaucoup pour votre réponse ! Avez-vous une idée de comment je peux appeler ce hook dans mon script ? Merci infiniment ! Math, mail-transactionnel-test.php Link to comment Share on other sites More sharing options...
Mediacom87 Posted October 21, 2021 Share Posted October 21, 2021 Voici la documentation officielle de PrestaShop https://devdocs.prestashop.com/1.7/modules/ Link to comment Share on other sites More sharing options...
math zerman Posted October 21, 2021 Author Share Posted October 21, 2021 (edited) D'accord merci mais il n'y aurait pas une méthode plus simple que la création d'un module ? 😅 Merci ! Edited October 21, 2021 by math zerman (see edit history) Link to comment Share on other sites More sharing options...
math zerman Posted October 21, 2021 Author Share Posted October 21, 2021 Top ça fonctionne ( du moins sur mon localhost ) J'ai pu générer un module ici -> https://validator.prestashop.com/generator Puis à la fin j'ai fait ceci : public function hookpostUpdateOrderStatus($params) { if($params['newOrderStatus']->id == 3){ file_get_contents('http://localhost:8888/prestashop/requete-test.php'); } } Merci Media COM Link to comment Share on other sites More sharing options...
math zerman Posted October 28, 2021 Author Share Posted October 28, 2021 Hello en faîtes j'ai crié victoire trop rapidement en effet le problème c'est que dès que je met un statut à jour l'url est appelée mais vu que ce n'est pas en corrélation avec chaque commande ça pose problème : exemple : lorsqu'une nouvelle commande arrive, " paiement accepté " activé -> donc URL appelé par le module et là je peux envoyer au dernier contact trouvé dans la boucle, pas de soucis dans ce cas.. Par contre dans le cas de "commande expédiée" j'ai un autre module qui met à jours automatiquement toutes les commandes en expédition, conséquence l'url sera appelé autant de fois qu'il y a de "commande expédiée" et donc derrière les mails envoyés 1 fois au premier contact 2 fois au second etc ... Une piste ? J'imagine que le hookpostUpdateOrder sait reconnaître chaque client, peut être puis-je récupérer des paramètres de ce côté là ? Ou sinon avec file_get_contents('mon url'); je peux bloquer l'appel à une fois ?? Si quelqu'un à une idée merci Link to comment Share on other sites More sharing options...
math zerman Posted October 29, 2021 Author Share Posted October 29, 2021 Je reformule mon problème : Contexte : 1. J'ai un module qui va appeler l'url dès que le statut d'une commande va changer, dans notre cas "commande expédiée". 2. Cette url fait une requête et envoi les données avec l'API sendinblue. 3. Les statuts expédiés sont tous mis à jours en même temps et de façon automatique. Exemple : Lorsque je met à jours avec le module automatique, mon URL est appelée 3 fois car 3 commandes donc pas bon 1. cmd1 -> 3 mails 2. cmd2 -> 2 mails 3. cmd3 -> 1 mails Lorsque je charge L’URL une seule fois pour appeler l'api pas de soucis : 1. cmd1 -> 1 mail 2. cmd2 -> 1 mail 3. cmd3 -> 1 mail Solution : Existe-t-il un moyen limiter une fois l'appel de cette URL dans mon module ? J'ai essayé return avec le file_get_contents ça ne marche pas .. if($params['newOrderStatus']->id == 4){ file_get_contents('mon-url'); } Merci beaucoup !! Link to comment Share on other sites More sharing options...
math zerman Posted November 22, 2021 Author Share Posted November 22, 2021 Bonjour moi même, j'ai bien avancé mais il me reste encore une "merdouille" if($params['newOrderStatus']->id == 4){ include '..requete.php'; foreach ($res_order as $res_order_unique=>$value) { // INITIER LES VARIABLES require_once('../vendor/autoload.php'); $client = new \GuzzleHttp\Client(); $ref_unique = $value['reference']; $adresse_livraison = $value['address_delivery']; $adresse_facturation = $value['address_invoice']; $client_site = $value['customer']; $mode_livraison = $value['carrier_name']; $date_cmd = $value['date_add']; $email_client = $value['email']; $num_suivi = $value['tracking_number']; $track_num_suivi = "https://www.laposte.fr/outils/suivre-vos-envois?code=$num_suivi"; $request = $client->createRequest('POST', 'https://api.sendinblue.com/v3/smtp/email', [ 'body' => "{\"sender\":{"some info"}", 'headers' => [ 'Accept' => 'application/json', 'Content-Type' => 'application/json', 'api-key' => 'Key', ], ]); $response=$client->send($request); } } } } $response=$client->send($request); ----> cette ligne renvoi bien un mail à chaque utilisateur, par contre ça créer un bug dans prestashop, le statut est à jours dans le menu général de la commande mais pas DANS la commande, en plus de ça si je change le statut en expédié ( donc ici statut 4 ) j'ai une erreur : 500 J'ai remarqué qu'en faisant un return ça ne buguait pas côté prestashop, par contre le return envoi les mails au dernier utilisateur trouvé dans le tableau. Quelqu'un aurait une piste ??? S'il vous plaît je marche tout seul dans le désert Bonne journée ! 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