2017-09-04 1 views
0

J'utilise Symfony avec PayumBundle et payum-redsys afin d'accepter le paiement via la passerelle espagnole Redsys.Effectuer des opérations personnalisées sur la notification de passerelle avec Payum

Après chaque tentative de paiement (qu'elle soit réussie ou non), Redsys envoie une notification à une URL. Je veux attraper cette notification et prendre des mesures en fonction de sa charge utile (le paiement a-t-il réussi? Quel numéro de commande? Etc.). Par exemple, disons que si le paiement a réussi, je veux marquer la commande correspondante telle que payée dans la base de données, sinon je veux enregistrer l'erreur. Quelque chose comme:

if ($paymentSuccessful) { 
    $order = $orderRep->find($notif['Ds_Order']); 
    $order->setDatePaid($notif['Ds_Date']); 
    $em->flush(); 
} else { 
    $logger->error('Failed payment for order ' . $notif['Ds_Order']); 
} 

Si je laisse Payum traiter la demande de notification avec sa valeur par défaut NotifyController, il effectue le jeton de validation automatique, le décodage des paramètres, etc., qui est parfait mais je ne vois pas comment effectuer mon propre opération personnalisée (voir le code ci-dessus), d'où le titre de cette question.

Répondre

0

Payum semble prendre en charge l'écoute des événements sur la passerelle, comme on peut le voir dans PayumEvents. L'événement qui circule ne contient essentiellement qu'un Context à partir duquel vous devez rassembler les informations dont vous avez besoin. Vous voulez probablement regarder les actions dans ce contexte, en particulier le CapturePaymentAction et le Request? Je ne comprends pas très bien comment tout cela est lié, car je décrypte le code source. Si vous ne voulez pas comprendre tous les événements, vous pouvez simplement créer un écouteur qui écoute l'événement approprié, puis utiliser xdebug ou var_dump pour lire les données de l'événement et continuer à partir de là. Fondamentalement l'écouteur d'événement devrait s'assurer que vous êtes dans la bonne action, obtenez le Ds_Order et Ds_Date (probablement de la demande) et alors vous pouvez ajouter dans un extrait comme celui que vous avez posté ci-dessus.

Si vous n'êtes pas familier avec le système d'événements de Symfony Je recommande la lecture sur la documentation:

modifier: Aussi Payum fournit une documentation comment il traite des événements ainsi: https://github.com/Payum/Payum/blob/master/docs/event-dispatcher.md