Gérer les délais d'attente (timeout)

Le traitement d’une requête web service s’articule autour d’un enchaînement d’évènements asynchrones comme :

  • l'envoi de la requête via le réseau du site marchand,
  • le transport des informations sur le réseau internet,
  • le traitement du paiement par la plateforme,
  • l’interrogation des serveurs bancaires, etc

Un incident peut survenir à chaque étape et augmenter le temps du traitement (et donc implicitement le temps d’attente pour l’acheteur).

La réponse à une requête peut être retardée pour de multiples raisons :

  • Un temps de réponse long de la part de l’émetteur du porteur de la carte (cas des cartes étrangères, cas de période de forte charge comme les soldes, ...).
  • Un temps de réponse long de la part de l’acquéreur lors de la transmission et de la réception de la demande d’autorisation.
  • Un temps de réponse long du côté de votre application suite à une charge importante.
  • Un temps de réponse long de la plateforme de paiement.
  • Un problème de peering sur Internet pouvant entraîner des pertes de messages, etc…

Selon les délais d'attente paramétrés, vous pouvez ne pas recevoir de réponse alors que le traitement asynchrone continue à s’exécuter côté plateforme de paiement.

Un temps de traitement long ne doit pas être considéré comme un paiement refusé.

Pour cette raison, vous devez configurer votre code pour gérer les problèmes potentiels pouvant survenir avec la connexion à l'API SOAP.

Conseils

Le temps moyen de traitement d'une demande de paiement par la plateforme est inférieur à 5 secondes.

Vous devez définir un délai d'attente de 20 à 30 secondes entre:

  • le serveur marchand et la plateforme de paiement,
  • l'application mobile et le serveur marchand.

Pendant le temps d'attente, un message doit clairement indiquer à l'acheteur que son paiement est en cours.

Une fois le délai d'attente atteint, vous devez indiquer à l'acheteur que son paiement est refusé.

Afin de gérer correctement ces cas de timeout nous préconisons 2 solutions:

  • Créez vos transactions en validation manuelle
    Le serveur marchand doit envoyer une requête pour valider chaque transaction réussie.
    Les transactions en timeout ne seront pas validées et expireront (au bout de 7 jours pour un paiement réalisé sur le réseau CB).
    Une fois expirées, elles ne pourront plus être remises en banque.
    Aucun acheteur ne sera débité à tort.

  • Créez vos transactions en validation automatique
    Le serveur marchand doit interroger la plateforme de paiement pour annuler ou rembourser l'acheteur pour chaque requête en timeout.
    Pour cela le serveur marchand devra s'assurer de transmettre un identifiant de commande unique dans les requêtes de paiement.
    Puis, pour chaque transaction en timeout, le serveur marchand doit
    • interroger la plateforme de paiement pour récupérer l'UUID et le statut de la transaction correspondante (méthode findPayments)
      Si l'UUID n'existe pas, cela signifie qu'une erreur technique a empêché la création de la transaction.
      Si la transaction a un statut REFUSED, aucune action n'est nécessaire.
    • annuler ou rembourser la transaction (en utilisant les méthodes cancelPayment ou refundPayment) si la demande d'autorisation a été acceptée durant le timeout.