Définition des Webservices Systempay
Transcription
Définition des Webservices Systempay
Définition des Webservices Systempay Version 1.2c Historique du document Version Auteur Date Commentaires 1.2c Lyra-Network 06/12/2013 Modification du champ threeDsResult. Précision apportée quant à l’utilisation de ce champ dans le cas d’une carte non enrôlée. Détails ajoutés sur le code erreur 9 – Erreur technique. 1.2b Lyra-Network 10/07/2013 Précision sur la redirection vers l’ACS Ajout des cartes de test en annexes 1.2a Lyra-Network 03/05/2012 1.2 Lyra-Network 14/12/2011 1.1 Lyra-Network 20/06/2011 1.0 Lyra-Network 20/06/2011 Ajout de la méthode sendVEReqAndbuildPAReqByIdentifierTx Suppression des méthodes : buildPAReqByOrderIdentifierTx sendVEReqByOrderIdentifierTx sendVEReqTx buildPAReqTx Ajout de nouveaux codes d’erreur Ajout de la méthode buildPAReqByOrderIdentifierTx Modification apportées sur le maintien de la session HTTP en mode TEST Ajout des méthodes : sendVEReqAndbuildPAReqTx sendVEReqByOrderIdentifierTx Précisions ajoutées concernant le maintien de la session HTTP Version initiale. Confidentialité Toutes les informations contenues dans ce document sont considérées comme confidentielles. L’utilisation de celles-ci en dehors du cadre de cette consultation ou la divulgation à des personnes extérieures est soumise à l’approbation préalable de Lyra Network. SOMMAIRE 1 2 3 4 Présentation ......................................................................................................... 1 Notions de timeout .............................................................................................. 1 Description des codes erreurs ........................................................................... 3 Description des types ......................................................................................... 4 4.1 threeDSecureResponse............................................................................................................4 4.2 paResInfo ....................................................................................................................................4 4.3 veResPAReqInfo ........................................................................................................................5 5 Signature .............................................................................................................. 6 6 Description des méthodes et cinématique ...................................................... 7 6.1 Maintien de la session HTTP entre chaque requête ...........................................................8 6.2 Principe de fonctionnement de l’authentification 3D-Secure ........................................9 6.3 Vérification d’enrôlement et génération de la demande d’authentification 3DS .. 10 6.3.1 Paiement classique ................................................................................................. 10 6.3.2 Paiement en 1 clic (paiement par identifiant) ......................................................... 11 6.4 Redirection vers l’ACS ........................................................................................................... 12 6.5 Récupération de la réponse de l’ACS ............................................................................... 14 6.6 Analyse de l’authentification 3DS (analyzePAResTx) ...................................................... 15 7 Annexes ............................................................................................................. 16 1 Présentation Ce document présente les webservices 3-D Secure qui permettent de réaliser des vérifications sur l’enrôlement d’une carte et de rediriger le porteur vers l’ACS de la banque émettrice. Les résultats des requêtes présentées dans ce document serviront à renseigner le paramètre threeDSResult lors d’une requête de paiement. (cf. Guide_d_implementation_standard_WebService.pdf) Ces webservices ont été développés suivant le protocole SOAP (Simple Object Access Protocol) et sont décrits par le fichier wsdl suivant : https://paiement.systempay.fr/vads-ws/threeds-v1?wsdl Afin de sécuriser les échanges, les webservices (SOAP) sont cryptés grâce au protocole HTTPS. De plus un mécanisme de signature a été mis en place afin de valider et d’authentifier l’échange des données. (cf. chapitre Signature) 2 Notions de timeout Le traitement d’une requête webservices s’articule autour d’un enchainement 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). Une requête peut voir sa réponse retardée pour de multiples raisons comme par exemple : • 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 qui peut entrainer des pertes de messages, etc… Ce qui veut dire que suivant le timeout que vous positionnez dans votre application, vous pouvez ne pas recevoir de réponse alors que le traitement asynchrone continue à s’exécuter côté plateforme de paiement. Vous devez donc gérer les cas de timeout qui mal traités peuvent donner un mauvais résultat à l’acheteur. Afin d’être le plus réactif possible vis-à-vis de l’acheteur, il est conseillé de mettre en place un timeout sur non réponse et d’adapter le traitement pour informer l’acheteur. Systempay – Description des webservices @Lyra Network- 1/16 _____________ __________________________________________________________ Le marchand veillera à bien configurer la valeur du timeout, car plus ce délai sera court, plus le nombre de requêtes en timeout sur le site marchand augmentera. _____________________ __________________________________________________ Le temps moyen de traitement par la plateforme étant inférieur à 5 secondes, un timeout de 20s à 30s est tout à fait acceptable. ATTENTION Un temps de traitement plus long ne doit pas être confondu avec un paiement refusé. Le paiement peut être accepté même si votre requête échoue en timeout. Car la demande de paiement dépend d’évènements asynchrones non stoppés par le déclenchement du timeout. Le marchand devra donc mettre en place un traitement particulier pour les requêtes en timeout. Si vous n’avez pas récupéré la réponse à votre requête WS à la fin de votre timeout, il ne faut pas forcément informer l’utilisateur que son paiement a été refusé. Car il risque de tenter un nouveau paiement alors qu’entre-temps son paiement a réellement abouti après la fin de votre timeout (traitement asynchrone). Vous devez plutôt suivant vos contraintes: • • Soit l’informer que son règlement est en cours et revenir vers lui une fois que vous connaissez le statut final de votre paiement. Car le risque est que l’acheteur tente de multiples paiements. Soit le notifier du refus parce que vous savez que vous ne validerez pas son paiement Systempay – Description des webservices 3-D Secure @Lyra Network- 2/ 16 3 Description des codes erreurs Error Code Description 0 1 2 3 Action réalisée avec succès Action non autorisée Mauvaise signature Aucune brand localisée Erreur lors de la détermination de la plage de la carte Aucun contrat adéquat trouvé Spécification du contrat ambigüe, plusieurs sont disponibles Marchand non enrôlé Signature de l’ACS invalide 4 5 6 7 8 Error Code Description 9 10 11 12 13 Erreur technique Mauvais paramètres Format de date incorrect 3D Secure désactivé Identifiant non trouvé 14 98 PAN non trouvé Erreur de traitement sur l’ACS 99 Erreur inconnue Précisions sur les codes d’erreurs ErrorCode 0 : Indique que l’action demandée a été réalisée avec succès, traduisant ainsi que le format de la requête est correct. Remarque : Lors d’une demande d’analyse d’authentification 3DS (méthode analyze), ce code d’erreur ne doit pas être confondu avec le champ status qui est le seul à donner le résultat de l’authentification du porteur. Ainsi on pourra avoir un errorCode à 0 et un status à N, traduisant que l’analyse s’est déroulée avec succès mais que le porteur ne s’est pas authentifié correctement. - ErrorCode 9 : Ce code erreur correspond à une erreur technique qui peut avoir plusieurs causes. La plus fréquente étant l’envoi d’un mauvais numéro de contrat commerçant (createCardInfo.contractNumber) dans la requête. Systempay – Description des webservices 3-D Secure @Lyra Network- 3/ 16 4 Description des types 4.1 threeDSecureResponse Ce type permet de décrire la réponse de l’ensemble des webservices 3DS. Elle sera complétée par un type de réponse spécifique à chaque requête. Nom du champ errorCode errorDetail timestamp Type int String long signature String Description Code d’erreur Détail de l’erreur si le champ errorCode est différent de 0 Timestamp permettant la génération de signature unique Signature de la Réponse (cf. ci-dessous) La signature permet de valider l’intégrité de la réponse, le calcul de cette signature se fait en prenant les paramètres dans l’ordre suivant : errorCode, errorDetail, timestamp 4.2 paResInfo Il s’agit de la réponse renvoyée par le serveur lors d’une requête analysePAResTx. Elle contient le résultat de l’authentification 3-D Secure Nom du champ brand enrolled Type String String status String eci xid cavv cavvAlgorithm String String String String Description Brand de la carte (« VISA » ou « MASTERCARD ») Statut enrôlement porteur : • « Y » : Enrôlé • « N » : Non enrôlé • « U » : Inconnu Statut authentification du porteur : • « Y » : Authentifié 3DS • « N » : Erreur Authentification • « U » : Authentification impossible • « A » : Essai d’authentification ECI Numéro de transaction marchand Certificat de l’ACS Algorithme CAVV : • « 0 » : HMAC • « 1 » : CVV • « 2 » : CVV_ATN • « 3 » : Mastercard SPA La signature permet de valider l’intégrité de la réponse, le calcul de cette signature se fait en prenant les paramètres dans l’ordre suivant : errorCode, errorDetail, timestamp, brand, enrolled, status, eci, xid, cavv, cavvAlgorithm Systempay – Description des webservices 3-D Secure @Lyra Network- 4/ 16 4.3 veResPAReqInfo Réponse renvoyée lors d’une requête sendVEReqAndbuildPAReqTx sendVEReqAndbuildPAReqByIdentifierTx. Elle contient le résultat de la demande d’enrôlement ainsi que le message encodé qui sera transmis par le navigateur client à l’ACS. Nom du champ requestId Type String enrolled String acsUrl acctId encodedPareq brand String String String String Description numéro de requête, à rappeler dans les appels analyzePAResTx Statut d’enrôlement du porteur : • « Y » : Enrôlé • « N » : Non enrôlé • « U » : Inconnu Url de l’ACS à contacter, présent uniquement si enrolled=Y certificat renvoyé par le Directory Server message PAReq encodé, prêt à envoyer à l’ACS Réseau de carte La signature permet de valider l’intégrité de la réponse, le calcul de cette signature se fait en prenant les paramètres dans l’ordre suivant : errorCode, errorDetail, timestamp, requestId, enrolled, acsUrl, acctId, encodedPareq Systempay – Description des webservices 3-D Secure @Lyra Network- 5/ 16 5 Signature Un certificat est nécessaire pour dialoguer avec la plateforme de paiement. Il est mis à disposition de toutes les personnes habilitées à la consultation des certificats dans votre outil de gestion de caisse à l’emplacement suivant : Paramètres / Boutique / Certificat. Il existe deux certificats différents : un pour la plateforme de test et un pour la plateforme de production. La signature sera générée comme suit : • Création d'une chaîne de caractère représentant la concaténation des paramètres, séparés par le caractère "+". • Ajout à cette chaîne d'un "certificat " numérique (de test ou de production selon le contexte). • Hachage de la chaîne résultante avec l'algorithme SHA1. La plateforme de paiement effectuera obligatoirement la vérification de la signature. Il est de la responsabilité du commerçant de vérifier à son tour la signature transmise en retour. L’ordre des champs doit être respecté. Les champs de type numérique ne doivent pas avoir de 0 à gauche du digit le plus significatif. Les champs de type bool prennent les valeurs suivantes : - 1 pour vrai (true) - 0 pour faux (false) Les champs de type String non renseignés seront vides. En mode TEST, en cas de mauvais calcul de signature, le code erreur renvoyé est « BAD_SIGNATURE » et, la chaine de caractère utilisée pour la signature côté serveur est alors renvoyée dans le champ errorDetail. Systempay – Description des webservices 3-D Secure @Lyra Network- 6/ 16 6 Description des méthodes et cinématique Les WebServices 3D-S décrits dans ce document doivent respecter la cinématique suivante : Demande de vérification d’enrôlement (veReq) Construction du message codé (PAReq) Soumission d’un formulaire auto posté contenant le PAReq Analyse de la réponse renvoyée par l’ACS (PARes) Important : L’architecture de la plateforme de paiement reposant sur un ensemble de serveurs avec répartition de charge, il est nécessaire que chaque requête associée à un même paiement soit réalisée avec la même session HTTP afin d’assurer la continuité du processus. Pour cela, à chaque requête sendVEReqAndbuildPAReqTx, une session est créée coté serveur. L’ID de la session est renvoyé dans l’entête HTTP de la réponse. Il devra être retourné dans les requêtes analysePAResTx suivantes. __________________________________________________________________________________________ Note concernant le mode TEST : Afin de conserver la continuité des transactions en mode test, il sera nécessaire de transmettre l’identifiant de la session lors de la redirection vers l’ACS. Ceci devra se faire en concaténant : L’url de l’ACS obtenue dans la réponse veResPAReqInfo L’identifiant de session renvoyé dans l’entête http, séparés par « ;jsessionid= » La syntaxe à respecter est : ${URL};jsessionid=${session} Exemple : <form name="Form" method="post" action="https://paiement.systempay.fr/vadspayment/acs.silent_authenticate.a;jsessionid=B420BF68835F6563FB6E4B289ABB9080.bdxvad 3" > ... </form> EN MODE PRODUCTION VOUS NE DEVEZ EN AUCUN CAS TRANSMETTRE UN IDENTIFIANT DE SESSION A L’ACS __________________________________________________________________________________________ Systempay – Description des webservices 3-D Secure @Lyra Network- 7/ 16 6.1 Maintien de la session HTTP entre chaque requête En java Une fois le client WebService créé (port), utiliser la méthode signalée en gras dans le code suivant : Service service = Service.create(wsdlURL, qname); ThreeDSecure port = service.getPort(ThreeDSecure.class); ((BindingProvider) port).getRequestContext().put(BindingProvider.SESSION_MAINTAIN_PROPERTY, true); Cela permet au serveur de ne pas ignorer les infos de session associées à la requête http et de maintenir un cookie avec l’ID de session. En PHP Après l’appel à la fonction sendVEReqAndBuildPAReqTx, la session est créée côté serveur et renvoyée dans les headers HTTP de la réponse. Pour les méthodes suivantes de la même transaction, il faut récupérer ce header et le transmettre en tant que cookie dans la requête HTTP. Voici un exemple de code pour récupérer l’id de session et le transmettre : /* La méthode ci-dessous permet de récupérer l’entête HTTP de la réponse */ $header = $client->__getLastResponseHeaders(); /* Dans la chaîne de caractère obtenue, nous recherchons la présence de l’ID de la session HTTP, stockée dans l’élément "JSESSIONID" : */ if(!preg_match("#JSESSIONID=([A-Za-z0-9\.]+)#",$header, $matches)){ return "Aucun ID de Session Renvoyé.";//Cas d’erreur technique; } $cookie = $matches[1]; /*La méthode ci-dessous permet de spécifier un cookie qui sera envoyé dans chaque entête http */ $client->__setCookie ("JSESSIONID", $cookie); Il est donc nécessaire de stocker cet id de session car lors du retour de l’ACS, dé corrélé des requêtes sendVEReqAndbuildPAReqTx, il faut également l’envoyer. Systempay – Description des webservices 3-D Secure @Lyra Network- 8/ 16 6.2 Principe de fonctionnement de l’authentification 3D-Secure Cinématique du paiement : L’acheteur valide sa commande sur le site marchand. Il saisit ses données cartes sur le site marchand pour procéder au paiement. Le site marchand contacte Systempay (méthode sendVEReqAndBuildPAResTx) Systempay, via son MPI, interroge le directory VISA ou Mastercard. Si la carte n’est pas enrôlée, Systempay renvoie au marchand les informations utiles pour la création d’une transaction (à renseigner dans le champ threeDSResult de la méthode create par exemple) Si la carte est enrôlée, Systempay renvoie au marchand les informations suivantes (veResPAReqInfo): - L’URL du site internet de la banque du porteur (ACS) vers laquelle le marchand devra rediriger l’acheteur. - Le message PAReq encodé - L’identifiant de la requête (requestId) Le site marchand sauvegarde dans le champ MD l’identifiant de session contenu dans l’entête de la réponse (JSESSIONID) ainsi que l’identifiant de la requête (requestId) contenu dans la réponse veResPAReqInfo Le site marchand envoie au navigateur de l’acheteur une requête http POST avec les informations contenues dans le veResPAReqInfo ainsi que le champ MD. L’acheteur est redirigé vers sur le site de la banque émettrice (ACS) et s’authentifie A la fin de l’authentification, l’acheteur est redirigé vers le site marchand et son navigateur effectue une requête POST à destination du site marchand contenant les champs MD et PARes Le site marchand récupère ces deux champs et les transmet à Systempay pour vérifier l’authentification (méthode analyzePAResTx) Le MPI de Systempay vérifie les données contenues dans le PARes : l’acheteur ne s’est pas authentifié, le paiement sera refusé. Le marchand peut : Soit transmettre le résultat de l’authentification 3DS dans le champ threeDSResult de la méthode create. Ceci aboutira à la création d’une transaction refusée, visible dans le back office. Soit arrêter le processus de paiement et indiquer à l’acheteur que le paiement est refusé. l’acheteur s’est authentifié, le marchand doit alors valoriser le champ threeDSResult de la méthode create avec le résultat de l’authentification 3DS. Systempay procèdera alors à la demande d’autorisation. Systempay – Description des webservices 3-D Secure @Lyra Network- 9/ 16 6.3 6.3.1 Vérification d’enrôlement et génération de la demande d’authentification 3DS Paiement classique La méthode sendVEReqAndBuildPAReqTx permet de faire une demande de vérification d’enrôlement auprès des Directory Servers VISA ou MasterCard et de générer le message envoyé par le navigateur du client lors de la requête d’authentification du payeur (PAReq) vers l’ACS. Cette fonction prend en entrée les paramètres suivants : Nom du champ Type shopId contractNumber String String ctxMode String cardNumber browserUserAgent browserAccept purchaseAmount purchaseCurrency cardExpiry wsSignature String String String String String String String Description Obligatoire Identifiant de la boutique Numéro de contrat commerçant Contexte de sollicitation de la plateforme de paiement ("TEST", "PRODUCTION") Numéro de carte du porteur Header « User-Agent » du navigateur du client Header « Accept » du navigateur du client Montant de la transaction en plus petite unité monétaire Devise (Code monnaie ISO 4217, Euro : 978) Date d'expiration de la carte, format YYMM Signature (cf ci-dessous) Le calcul de la signature se fait en prenant les paramètres dans l’ordre suivant : shopId, , contractNumber, ctxMode, cardNumber, browserUserAgent, browserAccept, purchaseAmount, purchaseCurrency, cardExpiry Cette fonction retourne une réponse du type veResPAReqInfo contenant le résultat de la demande d’enrôlement ainsi que le message PAReq codé dans le cas où le champ enrolled est valorisé à « Y » Cas des cartes non enrôlées ou dont le statut d’enrôlement est inconnu Si le champ enrolled est valorisé à ‘N’ ou ‘Y’, alors la cinématique d’authentification 3-D Secure s’arrête. Si le marchand souhaite réaliser un paiement (via la méthode create) il doit impérativement valoriser le champ threeDSResult comme suit : Nom du champ Type brand enrolled String String authStatus eci xid cavv cavvAlgorithm String String String String String Description Obligatoire Brand de la carte ("VISA" ou "MASTERCARD") Statut enrôlement porteur : • "N" : Non enrôlé • "U" : Inconnu Ne pas envoyer Ne pas envoyer Ne pas envoyer Ne pas envoyer Ne pas envoyer Cas des cartes enrôlées Si le champ enrolled est valorisé à ‘N’ ou ‘Y’, alors la cinématique d’authentification 3-D Secure doit continuer (cf. chapitre Redirection vers l’ACS) Systempay – Description des webservices 3-D Secure @Lyra Network- 10/ 16 6.3.2 Paiement en 1 clic (paiement par identifiant) La méthode sendVEReqAndBuildPAReqByIdentifierTx permet de faire une demande de vérification d’enrôlement auprès des Directory Servers VISA ou MasterCard en passant en paramètre l’identifiant d’un compte carte et de générer le message envoyé par le navigateur du client lors de la requête d’authentification du payeur (PAReq) vers l’ACS. Cette fonction prend en entrée les paramètres suivants : Nom du champ Type shopId contractNumber ctxMode String String String identifier browserUserAgent browserAccept purchaseAmount String String String String purchaseCurrency wsSignature String String Description Obligatoire Identifiant de la boutique Numéro de contrat commerçant Contexte de sollicitation de la plateforme de paiement ("TEST", "PRODUCTION") Identifiant du compte carte Header « User-Agent » du navigateur du client Header « Accept » du navigateur du client Montant de la transaction en plus petite unité monétaire Devise (Code monnaie ISO 4217, Euro : 978) Signature (cf ci-dessous) Le calcul de la signature se fait en prenant les paramètres dans l’ordre suivant : shopId, contractNumber, ctxMode, identifier, browserUserAgent, browserAccept, purchaseAmount, purchaseCurrency Cette fonction retourne une réponse du type veResPAReqInfo contenant le résultat de la demande d’enrôlement ainsi que le message PAReq codé dans le cas où le champ enrolled est valorisé à « Y ». ______________________________________________________________________________________________ Note: D’après le protocole français ERT 27, même en cas d’authentification réussie, le paiement ne sera pas garanti. La méthode create (ws-identifiant) ne possède donc pas de paramètre d’entrée acceptant le résultat de l’authentification 3DS. ______________________________________________________________________________________________ Systempay – Description des webservices 3-D Secure @Lyra Network- 11/ 16 6.4 Redirection vers l’ACS Après avoir récupéré le contenu du veResPAReqInfo, il faut rediriger le navigateur du client vers son ACS, en renvoyant une page HTML avec un formulaire POST auto soumis. L'url de l'ACS est utilisée comme action du POST, la valeur est celle retournée dans le champ veResPAReqInfo.acsUrl). Il faut également disposer d’une url de retour sur le serveur pour récupérer la réponse de l'ACS (elle aussi par POST). Ce formulaire doit obligatoirement contenir les champs suivants (attention à bien respecter les majuscules) : Nom du champ Type PaReq String TermUrl String MD String Description Obligatoire Message codé, retourné par l’appel de la méthode sendVEReqAndBuildPaReqTx (champ veResPAReqInfo.encodedPAReq URL de retour dans laquelle sera analysé le retour de l’authentification 3-D Secure ‘Merchant DATA’. Il s’agit de données qui seront restituées lors de la réponse de l’ACS. Par commodité il est conseillé de valoriser ce champ avec l’id de session et le requestId afin de reprendre facilement le traitement, par exemple sous la forme suivante : « id_de_session+requestId » __________________________________________________________________________________________ Rappel concernant le mode TEST : Afin de conserver la continuité des transactions en mode test, il sera nécessaire de transmettre l’identifiant de la session lors de la redirection vers l’ACS. Ceci devra se faire en concaténant : L’url de l’ACS obtenue dans la réponse veResPAReqInfo L’identifiant de session renvoyé dans l’entête http, séparés par « ;jsessionid= » La syntaxe à respecter est : ${URL};jsessionid=${session} Exemple : <form name="Form" method="post" action="https://paiement.systempay.fr/vadspayment/acs.silent_authenticate.a;jsessionid=B420BF68835F6563FB6E4B289ABB9080.bdxvad 3" > ... </form> EN MODE PRODUCTION VOUS NE DEVEZ EN AUCUN CAS TRANSMETTRE UN IDENTIFIANT DE SESSION A L’ACS __________________________________________________________________________________________ Systempay – Description des webservices 3-D Secure @Lyra Network- 12/ 16 Exemple de page de redirection <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr"> <head> <meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/> <title>---</title> <script type="text/javascript"> <!-function submitForm(){ document.redirectForm.submit(); } --> </script> </head> <body onLoad="setTimeout(\'submitForm()'.'\',500);"> <span class="message">redirection ACS</span> <br/> <br/> <br/> <form name="redirectForm" action="acsUrl" method="POST"> <input type="hidden" name="PaReq" value="encodedPareq"/> <input type="hidden" name="TermUrl" value="url_de_retour"/> <input type="hidden" name="MD" value="requestId" /> <noscript><input type="submit" name="Go" value="Click to continue"/></noscript> </form> </body> </html> Systempay – Description des webservices 3-D Secure @Lyra Network- 13/ 16 6.5 Récupération de la réponse de l’ACS Il est nécessaire de mettre en place une URL de retour de l’ACS pour que celui-ci puisse nous renvoyer les données du PARes. Les paramètres renvoyés par l’ACS sont les suivants : • • PaRes : contient le message PARes MD : contient le Merchant Data envoyé lors de l’appel à l’ACS Il convient alors d’extraire du champ MD les valeurs de l’id de session et du requestId pour ensuite les utiliser lors de l’appel à la méthode analyzePAResTx. Exemple de page de retour : Dans cet exemple, le champ MD a été composé de l’id de la session et de l’identifiant de la requête, séparés par le caractère « + » : <?php session_start(); ?> <html> <head></head> <body> <?php $PaRes = $_POST['PaRes']; list($JSESSIONID, $requestId) = explode("+",$_POST['MD']); //Initialisation du client SOAP $client = new soapclient($wsdl,array('trace' =>1)); //Définition du cookie qui sera envoyé avec la requête SOAP $client-> __setCookie('JSESSIONID', $JSESSIONID); Appel de la méthode analysePAResTx … </body> </html> Systempay – Description des webservices 3-D Secure @Lyra Network- 14/ 16 6.6 Analyse de l’authentification 3DS (analyzePAResTx) Cette fonction permet de soumettre à la plateforme de paiement le message PARes reçu après l’authentification 3D-S. Cette fonction prend en entrée les paramètres suivants : Nom du champ Type shopId contractNumber ctxMode String String String requestId pares wsSignature String String String Description Obligatoire Identifiant de la boutique Numéro de contrat commerçant Contexte de sollicitation de la plateforme de paiement ("TEST", "PRODUCTION") numéro de requête Message PaRes encodé, reçu de l’ACS Signature (cf ci-dessous) Le calcul de la signature se fait en prenant les paramètres dans l’ordre suivant : shopId, contractNumber, ctxMode, requestId, pares Cette fonction retourne une réponse du type paResInfo. Elle contient le message PAReq codé. Cette réponse est ensuite utilisée pour renseigner le champ threeDsResult lors d’une requête de paiement : Le marchand devra obligatoirement fournir tous les champs: brand, enrolled, authStatus, xid. Dans le cas où l’internaute s’est correctement authentifié (status= "Y" ou "A") Les champs eci, cavv et cavvAlgorithm deviennent obligatoires. Dans le cas où l’internaute ne s’est pas authentifié (status= "N" ou "U"), les champs eci, cavv et cavvAlgorithm ne doivent pas être envoyés ________________________________________________________________________________________________ Remarque : Le message PARes peut comporter des caractères de retour à la ligne (‘CR’, ‘LF’ ou ‘\r’,’\n’). Ces caractères sont remplacés par un simple LF par certains framework au moment de l’appel au WS. C’est le cas notamment en ASP.NET. Afin de ne pas rencontrer des problèmes de calcul de signature, il est conseillé de supprimer les retours à la ligne avant le calcul de signature. Cette suppression n’altère pas l’intégrité du message PARes. ________________________________________________________________________________________________ Systempay – Description des webservices 3-D Secure @Lyra Network- 15/ 16 7 Annexes Ci dessous la liste des numéros de carte à utiliser en mode TEST : Numéro de carte Résultat du test 4970100000000000 - 5970100300000000 - 5000550000000000 Paiement accepté avec authentification 3-D Secure 4970100000000009 – 5970100300000009 - 5000550000000009 Paiement avec authentification 3-D Secure interactive 4970100000000003 - 5970100300000003 - 5000550000000003 Paiement accepté, commerçant non enrôlé 3-D Secure 4970100000000001 - 5970100300000001 - 5000550000000001 Paiement accepté, internaute non enrôlé 3-D Secure 4970100000000002 - 5970100300000002 - 5000550000000002 Paiement refusé, transaction à forcer, contacter l'émetteur de carte 4970100000000007 - 5970100300023006 - 5000550000023006 Paiement accepté, garantie de paiement = NO 4970100000000097 - 5970100300000097 - 5000550000000097 4970100000000098 - 5970100300000098 - 5000550000000098 4970100000000099 - 5970100300000099 - 5000550000000099 Paiement refusé pour cause d'authentification 3-D Secure échouée, l'internaute n'est pas parvenu à s'authentifier Paiement refusé (autorisation refusée pour cause de plafond dépassé) Paiement refusé, autorisation refusée suite à erreur dans le cryptogramme visuel saisi La date d’expiration et le cryptogramme sont à votre libre choix (Ex: date mars 2020 et cryptogramme = 123 Toutes les transactions réalisées en mode TEST sont visibles par les personnes habilitées sur le back office, dans le menu Gestion/ Transactions de TEST ». __________________________________________________________________________________________ Les résultats des tests ci-dessus sont conditionnés par l’état d’enrôlement de votre contrat. Tant que vous ne recevez pas le mail vous informant de l’activation de la garantie 3D- Secure, les paiements de tests seront réalisés sans 3DS. __________________________________________________________________________________________ Systempay – Description des webservices 3-D Secure @Lyra Network- 16/ 16