Enchaîner des requêtes Web service (maintenir une même session HTTP)

L’architecture de la plateforme de paiement repose sur un ensemble de serveurs avec répartition de charge.

Pour assurer la continuité du processus, chaque requête associée à un même paiement dans un laps de temps très court doit être réalisée avec la même session HTTP.

Pour cela, à chaque requête, une session est créée coté serveur. L’ID de la session est renvoyé dans l’en-tête HTTP de la réponse. Il devra être retourné dans les requêtes suivantes afin que la requête soit traitée par le même serveur, évitant ainsi à votre requête d’être rejetée car la transaction ne serait pas encore disponible sur les autres serveurs.

Exemple d'application :

Vous souhaitez créer un paiement à remettre dans 30 jours en mode de validation manuelle.

Une fois le paiement accepté, vous décidez de changer la date de remise pour le lendemain et de valider la transaction.

Pour réaliser cette opération :

  • Vous devez appeler le web service de création de paiement (createPayment).
  • La plateforme vérifie la présence d’un ID de session dans l’en-tête HTTP de votre requête.

    Comme rien n’a été précisé, une nouvelle session et un nouvel ID sont créés.

    La plateforme de paiement procède ensuite au traitement de votre requête et envoie sa réponse en indiquant dans l’en-tête HTTP l’identifiant de session attribué ainsi que le nom du serveur ayant traité la requête :

Exemple d'en-tête de requête :

POST /vads-ws/v5 HTTP/1.1 
Host: paiement.systempay.fr
Connection: Keep-Alive 
User-Agent: PHP-SOAP/5.4.14 
Content-Type: text/xml; charset=utf-8 
SOAPAction: "" 
Content-Length: 1922

Exemple d'en-tête de réponse :

HTTP/1.1 200 OK 
Date: Tue, 24 Feb 2015 11:37:06 GMT 
Server: Apache 
Set-Cookie: JSESSIONID=6qeoRHaVgOGr5avgh6lHnzEm.vadpayment01bdx; 
Path=/vads-ws; Secure 
Content-Length: 2711 
Vary: Accept-Encoding,User-Agent Keep-Alive: timeout=5, max=100 
Connection: Keep-Alive 
Content-Type: text/xml;charset=UTF-8
  • Dans les en-têtes HTTP de la réponse, vous récupérez le cookie JSESSIONID.
  • Vous initialisez le cookie JSESSIONID de votre en-tête HTTP.
  • Vous appelez le web service de modification et de validation du paiement.

Exemple d’en-tête de requête pour maintenir la session :
POST /vads-ws/v5 HTTP/1.1 
Host: paiement.systempay.fr
Connection: Keep-Alive 
User-Agent: PHP-SOAP/5.4.14 
Content-Type: text/xml; charset=utf-8 SOAPAction: "" 
Content-Length: 5793 
Cookie: JSESSIONID=6qeoRHaVgOGr5avgh6lHnzEm.vadpayment01bdx;

  • La plateforme vérifie la présence d’un ID de session dans l’en-tête HTTP de votre requête.

La requête est ensuite envoyée au serveur ayant généré la session.

Si la session existe, elle est réutilisée, sinon une nouvelle session et un nouvel identifiant seront créés.

La plateforme de paiement procède au traitement de la requête et envoie sa réponse.

Remarque :

L’ID de session sera renvoyé dans l’en-tête HTTP de la réponse uniquement dans le cas où une nouvelle session a été créée.

Il est donc conseillé de tester systématiquement la présence du cookie dans l’en-tête HTTP de la réponse et d’utiliser l’ID de session présent avant d’enchainer un autre appel (getPaymentDetails par exemple).

Exemple d’en-tête HTTP de réponse utilisant la même session :
HTTP/1.1 200 OK 
Date: Thu, 26 Feb 2015 10:26:01 GMT 
Access-Control-Allow-Origin: * 
Content-Type: text/xml;charset=UTF-8 
Content-Length: 2858 
Vary: Accept-Encoding 
Connection: close

Remarque : pas d’information sur l’identifiant de session.

Exemple d’en-tête HTTP de réponse avec une nouvelle session :
HTTP/1.1 200 OK 
Date: Thu, 26 Feb 2015 10:31:39 GMT 
Set-Cookie: JSESSIONID=W10zI16iiiDiZqGV309xDtLV.vadpayment01bdx; Path=/vads-ws; Secure 
Access-Control-Allow-Origin: * 
Content-Type: text/xml;charset=UTF-8 
Content-Length: 2858 
Vary: Accept-Encoding 
Connection: close

Remarque : présence du Set-Cookie précisant l’identifiant de la nouvelle session.