Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Payzen : des paiements récurents SEPA refusés finissent tous en "OK" dans Bank #109

Open
rastapopougros opened this issue Apr 19, 2023 · 7 comments

Comments

@rastapopougros
Copy link
Contributor

Contexte : des commandes de paiements récurrents (5 euros par mois par ex) dans Payzen en SEPA.

Ces paiements sont programmés (créés) 15 jours plus tôt à priori, par ex le 30 mars pour le 13 avril. Si pour diverses raisons le paiement récurrent est "impayé" et donc en "rejet" (et dans l'interface je vois plusieurs raisons possibles : compte cloturé, refus du destinataire, coordonnées incorrectes, etc), et bien… pourtant dans Bank ça reçoit comme si tout avait bien été payé comme il faut ! Et du coup en plus ça génère une facture (fausse puisque argent jamais reçu) par le plugin Facture.

Dans l'interface de Payzen j'en vois de multiples récurrents comme ça qui tous les mois sont en fait en erreur, mais dans le SPIP les admins l'ont jamais vu puisque tout parait ok.

Je ne sais pas ce qu'il faut chercher comme info pour aider à débuguer.

@rastapopougros
Copy link
Contributor Author

Voici une liste de transactions reconnues par Payzen comme statut "impayé", et qui a aucun moment ne sont passées par un statut "bien payé" qui aurait trompé l'ennemi. On voit différents motifs de refus possible (chacun ayant un code propre au type de refus). Et l'ensemble de ces refus arrivent pourtant en "transaction OK" dans le SPIP.
Capture d’écran du 2023-04-19 21-14-41

@rastapopougros
Copy link
Contributor Author

Voici la documentation du cycle de vie d'un paiement récurrent chez eux : https://payzen.io/fr-FR/form-payment/subscription-token/cycle-de-vie-d-un-paiement-recurrent.html

Et là pour un paiement récurrent avec autorisation anticipée : https://payzen.io/fr-FR/form-payment/subscription-token/cycle-de-vie-d-un-paiement-recurrent-avec-autorisation-anticipee.html

Je ne suis pas sûr de comprendre quand/comment ça change de mode. Il est possible qu'en SEPA ce soit toujours automatiquement en mode "autorisation anticipée" (la transaction étant créée 15j avant la date de remise voulue comme indiqué plus haut).

Dans ce cas, ça ne fonctionne pas pareil, et il faut le prendre en compte, une transaction "autorisée" chez eux, n'indique absolument pas encore que le paiement s'est bien passée, mais seulement que ça va bien être envoyé à la banque finale du client. Mais ensuite cette banque finale peut parfaitement refuser le paiement (pour tous les refus précédemment capturés).

Je ne sais pas du tout comment on peut détecter que c'est plus "en attente de remise finale", et si c'est vraiment ok ou pas…

@rastapopougros
Copy link
Contributor Author

J'ai l'impression que c'est ce cheminement de Bank qui ne recouvre pas l'ensemble de ce qui se passe chez eux : là ça regarde si c'est pas AUTHORISED https://github.com/nursit/bank/blob/master/presta/payzen/inc/payzen.php#L503

Et si ya bien AUTHORISED au final ya pas de $erreur généralement, et donc ensuite ça passe… directement à $set['statut'] = 'ok'; !
https://github.com/nursit/bank/blob/master/presta/payzen/inc/payzen.php#L537

Alors que non, comme dit dans la doc, le AUTHORISED signifie seulement que la transaction sera présentée à la banque finale et donc explicitement "en attente" :

Le paiement restera "En attente de remise" jusqu’à la date prévue initialement.

Par contre je ne vois aucune mention nulle part de comment on sait que ça sort de cet état "En attente" pour être vraiment soit accepté soit refusé par le banque finale. Ce qui est quand même super facheux vu que c'est bien ça qui nous intéresse pour savoir si la transaction est vraiment bien payée ou pas et si ça doit faire une facture en cascade ou pas.

@Cerdic
Copy link
Member

Cerdic commented Apr 20, 2023

Tout à fait, dans le cas des SEPA avec Payzen on a seulement une notification du lancement de la demande de paiement, avec donc une transaction en vads_trans_status=WAITING_AUTHORISATION et jamais de notification ultérieure pour dire "le SEPA a été accepté et payé" ou "le paiement est revenu en erreur pour telle raison".

Donc j'ai pris le parti de considérer qu'il était payé, ce qui permet de maintenir le service, mais cela suppose un contrôle manuel dans l'interface de Payzen, chaque mois, des impayé, et une résiliation manuelle des abonnements correspondants. C'est ce que fait le seul client qu'on connait qui utilise les SEPA avec Payzen, et c'est bien lourd administrativement.

Il semblerait qu'il serait possible de post-checker le status d'une transaction via l'API REST de Payzen https://payzen.io/fr-FR/rest/V4.0/api/playground/Transaction/Get mais l'API REST est une option payante supplémentaire, donc on pas implémenté. Mais ce pourrait être une option de config, et si on a la feature on pourrait gérer un workflow de paiement plus adapté.

Cela dit il y a quand même soucis, car avec les SEPA, je crois qu'on a l'info de non paiement plusieurs jours (7 ? 14 ?) après la date du paiement supposé. Donc si on veut reconduire l'abonnement on est obligé de supposer que le paiement a bien eu lieu, ou en tout cas de ne pas résilier les abonnements avec un paiement en attente si on choisit de marquer le paiement "en attente" lors de la notification initiale, et de pooler ensuite chaque jour l'API dessus pour confirmer son statut final quand il est connu...

@rastapopougros
Copy link
Contributor Author

Arf c'est le bazar effectivement… merci pour le détail.

Du coup obligé de vérifier que manuellement avec Payzen pour l'instant.

Question intéressée : maintenant que Stripe est implémenté avec le récurrent (au moins pour les CB, pas SEPA), est-ce que pour ceux là on a un truc plus précis où on a bien l'info à temps quand le truc est refusé, et que SPIP reçoit pas une transaction ok ?

Il est sûrement temps de changer de presta…

@Cerdic
Copy link
Member

Cerdic commented Apr 20, 2023

on a pas encore eu l'occasion de tester le paiement par SEPA avec Stripe...

@rastapopougros
Copy link
Contributor Author

Mais ils sont prêts à passer à la carte bleue plutôt :) Et là ça marche mieux ?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants