THELIA Forum

Welcome to the THELIA support and discusssion forum

Announcement

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

Offline

#1 Module Paiement gateway form

(07-03-2016 23:18:54)


Bonjour,

Je découvre Thelia et j'essaie de faire un module de paiement
j'ai mon formulaire de saisi de coordonnée bancaire qui s'intègre via un hook
dans la page order-payment-gateway
à la soumission dans mon controler je valide ce dernier
en cas d'erreur j'aimerai revenir sur le formulaire
mais il revient sur la page d'accueil

comment le faire revenir sur le formulaire ?
Merci

    public function payAction()
    {
        $form = $this->createForm('modulegateway.payment');
        $errorMessage = null;
        try {
            $orderId = $this->getSession()->get(ModuleGateway::MODULEGATEWAY_ORDER_ID, false);

            if (false === $orderId) {
                throw new \RuntimeException(Translator::getInstance()->trans('impossible to retrieve the placed order', [], ModuleGateway::MESSAGE_DOMAIN));
            }
            $order = OrderQuery::create()->findPk($orderId);

            if (null === $order) {
                throw new \RuntimeException(Translator::getInstance()->trans('impossible to retrieve the placed order', [], ModuleGateway::MESSAGE_DOMAIN));
            }
            $gatewayForm = $this->validateForm($form);

            $this->doPay($gatewayForm, $order);
            $this->redirectToSuccessPage($order->getId());
        } catch (FormValidationException $e) {
            $errorMessage = $e->getMessage();
        } catch (RedirectException $e) {
            throw $e;
        } catch (\Exception $e) {
            $errorMessage = $e->getMessage();
        }

        $form->setErrorMessage($errorMessage);

        $this->getParserContext()
            ->addForm($form)
            ->setGeneralError($errorMessage)
        ;

        // Redirect to error URL if defined
        if ($form->hasErrorUrl()) {
            return $this->generateErrorRedirect($form);
        }

        //$this->redirectToFailurePage($order->getId(), $errorMessage);  // avant je retournais sur la page d'erreur
    }

Last edited by Thierry_34 (07-03-2016 23:29:46)

Online


Le formulaire présent dans order-payment-gateway est censé être envoyé à une plate-forme bancaire, et n'est pas supposé être traité par un contrôleur Thelia.

Pour l'exemple d'un système de paiement qui utilise un formulaire pour dialoguer avec le système bancaire, voir Redsys ( https://github.com/thelia-modules/Redsy … s.php#L138 ), ou Payzen ( https://github.com/thelia-modules/Payze … n.php#L159 ).

Pour l'exemple un système de paiement qui n'utilise pas de formulaire pour dialoguer avec le système bancaire, voir Paypal ( https://github.com/thelia-modules/Paypa … al.php#L60 ).

Quelle est l'interface avec ton système de paiement ? Formulaire ? Web Service ? Autre chose ?


OpenStudio Toulouse

Offline


Bonjour Roadster31

en fait je souhaiterai contrôler le type de carte saisi (visa, mastercard.....)
pour vérifier qu'il corresponde aux cartes sélectionnés dans la config

si la carte n'est pas gérée, je voulais retourner sur le formulaire en indiquant carte non autorisée

le module https://github.com/thelia-modules/BeanstreamModule
correspondrait plus mais il n'y a pas de vérification du type de carte

Last edited by Thierry_34 (07-03-2016 23:54:04)

Online


mais il revient sur la page d'accueil

"il" revient sur la page d'accueil, parce que ton contrôleur ne retourne pas de réponse si la validation de la form échoue :

// Redirect to error URL if defined
        if ($form->hasErrorUrl()) {
            return $this->generateErrorRedirect($form);
        }

        //$this->redirectToFailurePage($order->getId(), $errorMessage);  // avant je retournais sur la page d'erreur

Définis une url d'erreur dans ta form avec le champ error_url, ou alors redirige simplement vers la même page.


OpenStudio Toulouse

Offline


Merci Roadster31

je veux juste retourner sur la même page

        return $this->render("order-payment-gateway");

cela devrait suffire ?

Online

Offline


en fait non
ça m'affiche le formulaire 23 fois non rempli
un peu beaucoup

il  faut rediriger autrement ?

Online


Aucune idée, je n'ai qu'un tout petit bout de ton code sous les yeux.


OpenStudio Toulouse

Offline


Ne connaissant pas grand chose à Symfony  (un de plus)

la page qui appelle mon module est '/order/pay'
à la soumission cela part vers 'monmodule/payment'
en cas d'erreur si je ne précise pas de chemin de retour
cela part vers 'monmodule/payment' methods=get
je n'ai pas défini cette dernière donc il part sur la page d'accueil

si je mets

return $this->render("order-payment-gateway");

cela retourne bien vers le formulaire en affichant les erreurs
mais les champs sont vides et le formulaire est répété 20 fois

si je mets

return $this->generateRedirectFromRoute("order.payment.process");

le formulaire s'affiche mais vide et sans les erreurs

je n'ai pas encore bien compris comment retourner sur le formulaire appelant
apparemment d'après ce que j'ai lu, il faut utiliser 'render'
mais avec quels paramètres

Online


Comme je te l'ai déjà dit, on de voit qu'une petite partie du code que tu as écrit. Du coup, a moins d’acquérir des dons de divination, je ne vois pas comment t'aider plus.


OpenStudio Toulouse

Offline


je suis dans la meme situation
je bug sur les redirections
j'essaie de developper le module de payment Evalon-Converge  et toi pour quel banque ?
si cela peut t'aider, je viens de le mettre sur github
il me reste a integrer le 3Dsecure et a debuguer