THELIA Forum

Welcome to the THELIA support and discusssion forum

Announcement

Rejoignez la communauté sur le Discord Thelia : https://discord.gg/YgwpYEE3y3

Offline


Bonjour,

Je suis actuellement en train de faire un module de paiement et lors de l'étape 3 (choix du mode de paiement) j'aimerais ajouter à mon mode de paiement un formulaire si celui est sélectionné qui contient 3 champ (numéro de carte de crédit, date d'expiration et le numéro à 3 chiffres) pour ensuite lors de la validation, qui fait appel à la méthode pay du module, passer les données posté pour indiquer les informations de cartes bancaires à une API externe.

Actuellement dans la méthode pay si j'indique un faux numéro de carte, que le service utilise pour un mode test ça fonctionne, mais j'aimerais passer les vrai infos du client.

Merci d'avance.

Offline


Il te faut ajouter les templates, les routes et les contrôleurs qui vont bien à ton module de paiement de façon à ce que la methode "pay" présente au client le formulaire que tu veux qu'il remplisse.


OpenStudio Toulouse

Offline


Pourrais-tu me dire comment doit se nommer le template ?

Et comment indiquer dans la méthode pay d'afficher la page avec le formulaire en question ? Pour le coup je me suis basé sur le module Paypal mais comme celui ci fait une redirection vers paypal et que le service que j'utilise à juste besoin de passer des données en POST en restant sur le même domaine, c'est là que je bloque pour afficher mon formulaire.

Offline


J'ai avancé sur le problème. J'arrive en effet à faire une redirection vers ma page depuis la méthode pay. J'ai mon template qui s'affiche bien sur l'URL que je lui indique /module/monmodule/order/{order_id}

Par contre le truc c'est que dès que je suis sur cette page, je reçois un mail comme quoi la commande est passé... alors que pas du tout, vu que les informations bancaire ne sont pas indiqué par l'utilisateur. Donc la méthode pay renvoie dans tout les cas la validation de la commande ? ^o)

Et par la même occasion l'identifiant de la commande (si je mets n'importe quoi je suis quand même sur la page de mon module). Je suppose qu'il faudra faire une vérification si le numéro de la commande existe, qu'il appartienne à l'utilisateur connecté ?

Offline


C'est le comportement de base de Thelia. La commande est créée lorsque le client clique le bouton "payer", quelque soit le type de paiement choisi.

Ceci dit, tu peux modifier le moment de l'envoi du mail au client en interceptant l'event ORDER_SEND_CONFIRMATION_EMAIL, pour faire un truc du genre :

   public function checkSendOrderConfirmationMessageToCustomer(OrderEvent $event)
    {
        $monmodule= new Monmodule();

        if ($monmodule->isPaymentModuleFor($event->getOrder())) {
            if (! $event->getOrder()->isPaid()) {
                $event->stopPropagation();
            }
        }
    }

Bien évidemment, lorsque le paiement sera effectué et confirmé (order->idPaid() est true), tu devra dispatcher manuellement ORDER_SEND_CONFIRMATION_EMAIL.

Je suppose qu'il faudra faire une vérification si le numéro de la commande existe, qu'il appartienne à l'utilisateur connecté ?

Tu peux faire ça dans pay(), et rediriger vers une page d'erreur si la vérification échoue.


OpenStudio Toulouse