Projet

Général

Profil

Development #8350

Renvoyer un code de retour 200 lors du callback du service de paiement

Ajouté par Serghei Mihai il y a plus de 8 ans. Mis à jour il y a presque 8 ans.

Statut:
Fermé
Priorité:
Normal
Assigné à:
-
Version cible:
-
Début:
24 septembre 2015
Echéance:
% réalisé:

0%

Temps estimé:
Patch proposed:
Oui
Planning:

Description

Le service de paiement attend généralement un code de retour 200 sur l'url de callback.
Si le retour est différent il peut, comme le fait Paybox par exemple, retenter d'appeler le callback


Fichiers

Historique

#1

Mis à jour par Benjamin Dauvergne il y a plus de 8 ans

Est-ce que l'URL de callback ne sert qu'au retour "machine" et pas au retour "utilisateur" depuis la page de paiement ? Sur w.c.s. il y avait ce souci (relatif). C'est une bonne chose de séparer les deux.

#2

Mis à jour par Frédéric Péters il y a plus de 8 ans

La même URL est actuellement transmise pour toute une série d'usages (accepturl, declineurl, exceptionurl, cancelurl), mais pas return_url; je n'arrive pas à dire d'un coup d'œil à eopayment si on est ainsi assuré que la distinction machine/usager est correcte.

#3

Mis à jour par Benjamin Dauvergne il y a plus de 8 ans

J'ai l'impression qu'on se place trop bas là, declineurl, etc.. c'est spécifique à un backend. On devrait avoir basiquement deux URLs, l'URL de retour client et l'URL de retour machine. Il faudrait les passer comme tel à eopayment qui se débrouille pour les mettre dans les champs qui vont bien.

#4

Mis à jour par Serghei Mihai il y a plus de 8 ans

A coup de git grep je ne vois aucun des backends utiliser declineurl, accepturl,... je rate quelque chose?
Mais même si on passe des urls de retour machine et utilisateur au backend, c'est à l'application appelant le backend de définir (dans son urls.py) ces urls et traiter les requetes.

Dans l'exemple de Paybox, l'url de callback(donc url machine) est passée en parametre au backend lors de son initialisation et donc quelque soit cette url, je dirais que c'est à lingo de la définir et la gèrer.

#5

Mis à jour par Benjamin Dauvergne il y a plus de 8 ans

Je viens de relire le guide d'intégration, pour Paybox il y 5 URLS définissables pour la transaction ou globalement via le backoffice:
  • PBX_EFFECTUE, PBX_REFUSE, PBX_ANNULE, PBX_ATTENTE je dirai qu'il faut définir les 4 sur la même page de retour "utilisateur" de lingo; aucune n'est actuellement supportée par eopayment,
  • PBX_REPONDRE_A supporté via le paramètre callback dans les options.

Soit tu définis tout ça dans le backoffice soit tu modifies eopayment.

#6

Mis à jour par Benjamin Dauvergne il y a plus de 8 ans

Serghei Mihai a écrit :

Dans l'exemple de Paybox, l'url de callback(donc url machine) est passée en parametre au backend lors de son initialisation et donc quelque soit cette url, je dirais que c'est à lingo de la définir et la gère

Tu peux relever l'URL utilisée par lingo et la recopier dans le backoffice de la banque aussi.

#7

Mis à jour par Serghei Mihai il y a plus de 8 ans

Benjamin Dauvergne a écrit :

Je viens de relire le guide d'intégration, pour Paybox il y 5 URLS définissables pour la transaction ou globalement via le backoffice:
  • PBX_EFFECTUE, PBX_REFUSE, PBX_ANNULE, PBX_ATTENTE je dirai qu'il faut définir les 4 sur la même page de retour "utilisateur" de lingo; aucune n'est actuellement supportée par eopayment,
  • PBX_REPONDRE_A supporté via le paramètre callback dans les options.

Yep, je passe l'url de callback dans les options de paybox:

{
  "rang": "...", 
  "callback": "https://mesdemarches.fontenay-sous-bois.fr/lingo/callback/4/", 
  "site": "...", 
  "platform": "...", 
  "shared_secret": "....", 
  "identifiant": "..." 
}

Et donc cette url doit répondre un 200.
Les autres urls, PBX_EFFECTUE, PBX_REFUSE, PBX_ANNULE sont définies dans le backoffice paybox, on peut les oublier pour l'instant.

#8

Mis à jour par Benjamin Dauvergne il y a plus de 8 ans

Et donc, c'est bon ? On peut fermer ce ticket où as-tu encore un doute sur quelque chose ?

#9

Mis à jour par Serghei Mihai il y a plus de 8 ans

Je ferai donc une vue séparée qui renverrait OK si tout se passe bien.

#10

Mis à jour par Frédéric Péters il y a plus de 8 ans

Il y a deux aspects différents :

  • d'une part on peut avoir des éléments à payer qui soient locaux, ou pas.
  • d'autre part on peut avoir besoin d'un retour du service de paiement qui soit "humain" (redirection vers l'accuel), ou pas (code 200).

Là tu mélanges les deux et considère que quand c'est des éléments locaux, il faut le retour "humain", et quand c'est des éléments distants, il faut le retour "robot".

#11

Mis à jour par Serghei Mihai il y a plus de 8 ans

  • Fichier 0001-distinguish-machine-and-human-payment-return-urls-83.patch ajouté

Après discussion la vue de callback est uniquement "machine" qui fait un retour 200
Une vue séparé, qui sera déclarée dans le backoffice du backend du paiement, permettrait de faire un retour vers le portail: soit sur la page d'accueil, soit sur la page d'une des factures.

#12

Mis à jour par Serghei Mihai il y a plus de 8 ans

  • Fichier 0001-distinguish-machine-and-human-payment-return-urls-83.patch supprimé
#13

Mis à jour par Serghei Mihai il y a plus de 8 ans

Patch à jour avec une gestion correcte des redirections "utilisateur".
Dans les settings des tests je vire le django.middleware.csrf.CsrfViewMiddleware afin de appeler la vue de paiement.
Pas sûr que ce soit la meilleure façon de faire.

#14

Mis à jour par Benjamin Dauvergne il y a plus de 8 ans

Normalement dans les tests le middleware CSRF est déjà désactivé tout seul (en tout cas avec les TestCase Django ça le fait. Vérifié à l'instant sur passerelle, la désactivation n'est pas effective dans les tests qui utilisent webtest, mais les tests qui utilisent le client classique de pytest-django (fixture automatique nommée client) ça marche. Je propose d'utiliser le client classique plutôt que webtest (qui en plus cache les traces ce qui n'est pas bien pratique) à moins qu'on me signale un besoin particulier couvert par celui-ci.

#15

Mis à jour par Frédéric Péters il y a plus de 8 ans

Pour ces tests qui font des POST sans passer par les formulaires qui seraient normalement utilisés par les gens et qui auraient du coup le csrf token correct, pour ces tests, en effet, le client django normal devrait sans doute être utilisé.

#17

Mis à jour par Frédéric Péters il y a plus de 8 ans

Ok.

#18

Mis à jour par Serghei Mihai il y a plus de 8 ans

  • Statut changé de En cours à Résolu (à déployer)
commit 7e6d3223f1d4292551191414701587a901e98ab1
Author: Serghei Mihai <smihai@entrouvert.com>
Date:   Tue Oct 13 12:29:53 2015 +0200

    distinguish machine and human payment return urls (#8350)

    Tests added
#19

Mis à jour par Frédéric Péters il y a presque 8 ans

  • Statut changé de Résolu (à déployer) à Fermé

Formats disponibles : Atom PDF