Définition des Webservices V4
Transcription
Définition des Webservices V4
Définition des Webservices V4 Payzen 1.27.8 Version 1.4 Payzen – Description des webservices v4 1/56 Historique du document Version Auteur Date Commentaires 1.4 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. Ajout du code d’erreur 27 – Montant non autorisé. Détails ajoutés sur le code erreur 9 – Erreur technique. Ajout de précision sur les champs validationMode, et sequenceNb Ajout de précision sur le champ présentationDate dans le cas d’une carte MAESTRO 1.3 Lyra-Network 01/08/2013 Ajout des méthodes cancel, force, refund, duplicate, getInfo et validate. 1.2 Lyra-Network 10/07/2013 Ajout de la méthode create 1.1b Lyra-Network 05/07/2013 Précisions apportées sur l’utilisation du champ paymentSource. 1.1a Lyra-Network 20/06/2013 Mise à jour de la liste des codes retour autorisation 1.1 Lyra-Network 14/05/2013 Passage du wsdl en version 4.3 Ajout du service modify Modification du type transactionInfo : ajout du champ transactionStatusLabel Modification du type transactionPaymentGeneralInfo : ajout du champ effectiveCreationDate Modification du type transactionCardInfo : ajout des champs cardProductCode et cardBankcode 1.0c Lyra-Network 21/03/2013 Ajout du chapitre Notions de timeout Ajout d’exemple de cinématiques de paiement avec gestion des timeout 1.0b Lyra-Network 13/03/2013 Ajout des numéros de cartes de test en annexe. 1.0a Lyra-Network 21/01/2013 Passage du wsdl en version 4.1 Mise à jour du calcul de signature de l’objet createCustomerInfo. Ajout des codes renvoyés pour le champ authResult Mise à jour des valeurs pour le champ localControl Ajout de l’errorCode 26 Précision apportées sur le champ cvv 1.0 Lyra-Network 18/06/2012 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. Payzen – Description des webservices v4 2/56 1. Présentation .............................................................................................................................. 4 2. Notions de timeout ................................................................................................................... 4 3. Description des codes d’erreurs .............................................................................................. 6 4. Description des types ............................................................................................................... 8 4.1 createPaymentInfo .................................................................................................................................... 8 4.2 createPaymentGeneralInfo ..................................................................................................................... 9 4.3 createCardInfo ......................................................................................................................................... 10 4.4 createSubPaymentInfo ........................................................................................................................... 11 4.5 createCustomerInfo ................................................................................................................................ 11 4.6 createShippingInfo .................................................................................................................................. 12 4.7 createExtraInfo ......................................................................................................................................... 12 4.8 custStatus ................................................................................................................................................... 13 4.9 deliverySpeed ........................................................................................................................................... 13 4.10 deliveryType ............................................................................................................................................ 13 4.11 extInfo ....................................................................................................................................................... 13 4.12 createWithThreeDSResponse ............................................................................................................... 14 4.13 veResPAReqInfo ..................................................................................................................................... 14 4.14 transactionInfo ........................................................................................................................................ 15 4.15 transactionPaymentGeneralInfo ........................................................................................................ 16 4.16 transactionCardInfo .............................................................................................................................. 17 4.17 transactionThreeDSInfo ......................................................................................................................... 18 4.18 transactionAuthorizationDSInfo ........................................................................................................... 19 4.19 transactionMarkInfo ............................................................................................................................... 21 4.20 transactionWarrantyDetailsnfo ............................................................................................................ 21 4.21 localControl ............................................................................................................................................. 22 4.22 transactionCaptureInfo ........................................................................................................................ 23 4.23 transactionCustomerInfo ...................................................................................................................... 23 4.24 transactionShippingInfo ........................................................................................................................ 24 4.25 transactionExtraInfo ............................................................................................................................... 24 4.26 paymentCreationInfo............................................................................................................................ 25 4.27 threeDsResult ........................................................................................................................................... 25 4.28 standardResponse ................................................................................................................................. 26 5. Signature ................................................................................................................................. 27 6. Statut d’une transaction ......................................................................................................... 28 7. Description des méthodes ..................................................................................................... 29 7.1 Maintien de la session HTTP entre chaque requête .......................................................................... 29 7.2 Création d’un paiement avec authentification 3D-Secure ............................................................ 30 7.2.1: Cinématique du paiement ................................................................................................................ 30 7.2.2: Détails de la méthode createWithThreeDS .................................................................................... 31 7.2.3: Redirection vers l’ACS ......................................................................................................................... 34 7.2.4: Récupération de la réponse de l’ACS ............................................................................................. 36 7.2.5: Analyse de l’authentification 3DS et finalisation du paiement (finalyzeWithThreeDS) .......... 37 7.3 Modification d’une transaction (modify) ............................................................................................ 38 7.4 Création d’un paiement avec 3D-Secure intégrateur ou sans 3D-Secure (create) .................. 41 7.5 Annulation d’une transaction (cancel) ............................................................................................... 45 7.6 Forçage d’une transaction (force)....................................................................................................... 46 7.7 Remboursement d’une transaction (refund) ..................................................................................... 47 7.8 Duplication d’une transaction (duplicate) ......................................................................................... 48 7.9 Recherche des détails d’une transaction (getInfo) .......................................................................... 49 7.10 Validation d’une transaction (validate) ............................................................................................ 50 8. Annexes................................................................................................................................... 51 8.1 Cartes de test ............................................................................................................................................ 51 8.2 Exemple d’implémentation en PHP : calcul de signature (méthode create) ............................. 52 8.3 Exemples de cinématique de paiement avec gestion des cas d’échec ................................... 55 Payzen – Description des webservices v4 3/56 1. PRESENTATION Ce document présente les webservices qui permettent de créer des transactions (avec ou sans authentification 3D-Secure) et d’automatiser les opérations réalisables depuis le back office. 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://secure.payzen.eu/vads-ws/v4.3?wsdl Afin de sécuriser les échanges, les webservices (SOAP) sont chiffré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. _____________ __________________________________________________________ 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. _____________________ __________________________________________________ Payzen – Description des webservices v4 4/56 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 Deux cinématiques sont données à titre d’exemple en annexes. Payzen – Description des webservices v4 5/56 3. DESCRIPTION DES CODES D’ERREURS TransactionInfo : Error Code Type Error Code 0 1 2 3 4 5 6 10 11 12 13 14 15 16 17 18 19 20 21 22 27 40 50 51 52 53 54 55 56 57 58 59 60 61 Action réalisée avec succès Action non autorisée. Transaction non trouvée Transaction pas dans le bon état Transaction existe déjà Mauvaise signature Mauvaise date Mauvais montant Mauvaise devise Type de carte inconnu Paramètre ‘date d’expiration’ invalide Paramètre ‘cvv’ invalide Contrat inconnu Paramètre ‘Numéro de carte’ invalide Identifiant non trouvé Identifiant non valide (Résilié, …) Subscription non trouvée Subscription non valide Identifiant déjà existant Création d’identifiant refusé Montant non autorisé Plage non trouvée Paramètre ‘siteId’ invalide Paramètre ‘transmissionDate’ invalide Paramètre ‘transactionId’ invalide Paramètre ‘ctxMode’ invalide Paramètre ‘comment’ invalide Paramètre ‘AutoNb’ invalide Paramètre ‘AutoDate’ invalide Paramètre ‘captureDate’ invalide Paramètre ‘newTransactionId’ invalide Paramètre ‘validationMode’ invalide Paramètre ‘orderId’ invalide Paramètre ‘orderInfo1’ invalide 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 90 91 92 93 94 95 96 98 99 Type Paramètre ‘orderInfo2’ invalide Paramètre ‘orderInfo3’ invalide Paramètre ‘paymentSource’ invalide Paramètre ‘cardNumber’ invalide Paramètre ‘contractNumber’ invalide Paramètre ‘customerId’ invalide Paramètre ‘customerTitle’ invalide Paramètre ‘customerName’ invalide Paramètre ‘customerPhone’ invalide Paramètre ‘customerMail’ invalide Paramètre ‘customerAddress’ invalide Paramètre ‘customerZipCode’ invalide Paramètre ‘customerCity’ invalide Paramètre ‘customerCountry’ invalide Paramètre ‘customerLanguage’ invalide Paramètre ‘customerIp’ invalide Paramètre ‘customerSendMail’ invalide Paramètre ‘customerMobilePhone’ invalide Paramètre ‘subPaiementType’ invalide Paramètre ‘subReference’ invalide Paramètre ‘initialAmount’ invalide Paramètre ‘occInitialAMount’ invalide Paramètre ‘effectDate’ invalide Paramètre ‘state’ invalide Paramètre ‘enrolled’ invalide Paramètre ‘authStatus’ invalide Paramètre ‘eci’ invalide Paramètre ‘xid’ invalide Paramètre ‘cavv’ invalide Paramètre ‘cavvAlgo’ invalide Paramètre ‘brand’ invalide Paramètre ‘requestId’ invalide Autre erreur veResPAReqInfo : Error Code 0 1 2 3 4 5 6 7 8 Description 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 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 Payzen – Description des webservices v4 6/56 Précisions sur les codes d’erreurs TransactionInfo 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 : Dans le cas d’une création de paiement (méthodes create ou createWithThreeDS), ce code d’erreur ne doit pas être confondu avec le champ transactionStatus qui est le seul à donner le résultat du paiement. Ainsi on pourra avoir un errorCode à 0 et un transactionStatus à 8, correspondant à la création d’une transaction dont la demande d’autorisation a été refusée. ErrorCode 1 : Indique que vous n’avez pas souscrit une offre Payzen permettant d’utiliser les webservices. ErrorCode 15 : Indique un défaut au niveau du contrat commerçant. Plusieurs cas possibles : La valeur transmise dans la requête ne correspond à aucun contrat enregistré sur la boutique (shopId), Il n’y a pas de contrat enregistré sur la boutique, Le contrat spécifié est clôturé, Aucun contrat ne correspond au type de contrat nécessaire pour effectuer le paiement. C’est le cas si vous ne possédez pas de contrat VAD (ERT 20) et que paymentMethod est valorisé à MOTO, CC ou OTHER dans votre requête. ErrorCode 27 : Indique que le montant de votre requête de création ou de remboursement de paiement n’est pas conforme aux montants minimum/ maximum définis sur votre contrat commerçant. Vous pouvez vous rapprocher du service client pour connaitre les détails de votre contrat. veResPAReqInfo 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. Payzen – Description des webservices v4 7/56 4. DESCRIPTION DES TYPES 4.1 createPaymentInfo Ce champ décrit les paramètres nécessaires à la création d’une transaction ainsi qu’à la vérification de l’enrôlement de la carte. Nom du champ paymentGeneralInfo cardInfo subPaymentInfo customerInfo shippingInfo extraInfo Type createPaymentGeneralInfo createCardInfo createSubPaymentInfo createCustomerInfo createShippingInfo createExtraInfo Description Cf. 4.2 Cf. 4.3 Cf. 4.4 Cf. 4.5 Cf. 4.6 Cf. 4.7 Obligatoire 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 : paymentGeneralInfo, cardInfo, subPaymentInfo, customerInfo, shippingInfo, extraInfo Payzen – Description des webservices v4 8/56 4.2 createPaymentGeneralInfo Ce champ décrit les paramètres relatifs à la transaction. Nom du champ Type siteId string transmissionDate transactionId dateTime string Description Obligatoire Identifiant de la boutique Date et heure UTC de la transaction exprimée au format W3C (Ex : 2012-06-08T08:16:43+00:00). Représente la date et l’heure de la requête. Si la valeur de ce champ est trop éloignée de l’heure actuelle, la requête sera rejetée (errorCode 6) Identifiant de la transaction sur 6 chiffres. Cet identifiant doit être unique sur une même journée. (de 00:00:00UTC à 23:59:59UTC). Source du paiement: EC: Commerce Électronique MOTO : commande par mail ou téléphone CC : Centre d’appel OTHER : autre canal de vente paymentSource string ATTENTION : Seule la valeur EC permet de créer une transaction avec 3D-S. Les autres valeurs sont ne doivent être utilisées que pour de la vente à distance, pour laquelle le 3D- Secure n’est pas applicable. orderId orderInfo orderInfo2 orderInfo3 string string string string amount long currency int presentationDate dateTime Référence de la commande. Description libre de la commande. Montant de la transaction exprimé dans la plus petite unité monétaire (en centimes pour Euro) Code de la devise suivant la norme ISO 4217, (978 pour EURO) Ce champ permet de définir la date de remise de la transaction, exprimée au format W3C (Ex : 2012-06-08T08:16:43+00:00 Si le nombre de jours entre la date de remise demandée et la date actuelle est supérieur à 7 jours, une autorisation d’1 euro sera réalisée le jour de la transaction. Ceci afin de vérifier la validité de la carte. L’autorisation pour le montant total sera effectuée entre 7 jours et 0 jour avant la date de remise, en fonction du paramétrage de votre boutique (Avec ou Sans autorisations anticipées). Si vous souhaitez être notifié du résultat de cette demande d’autorisation, vous devez configurer la règle de notification « URL serveur sur autorisation par Batch » dans l’outil de gestion de caisse (Paramétrage/Règles de notifications/) Remarque : Si la carte de crédit utilisée pour le paiement est de type MAESTRO, la règle précédente, basée sur un délai de 7 jours, ne s’applique pas. La demande d’autorisation est valable 30 jours pour ces cartes. validationMode int Mode de validation des paiements : 0= Automatique ; 1= Manuelle Le calcul de la signature se fait en prenant les paramètres dans l’ordre suivant : createPaymentGeneralInfo.siteId, createPaymentGeneralInfo.transactionId, createPaymentGeneralInfo.paymentSource, createPaymentGeneralInfo.orderId, createPaymentGeneralInfo.orderInfo, createPaymentGeneralInfo.orderInfo2, createPaymentGeneralInfo.orderInfo3, createPaymentGeneralInfo.amount, createPaymentGeneralInfo.currency, createPaymentGeneralInfo.validationMode Payzen – Description des webservices v4 9/56 4.3 createCardInfo Ce type décrit les détails de la carte de crédit : Type Description cardNumber Nom du champ string cardNetwork string expiryMonth int expiryYear int Numéro de carte Réseau de la carte ("AMEX", "CB", "MASTERCARD", "VISA", "MAESTRO", "E-CARTEBLEUE", "JCB") Mois d’expiration de la carte, entre 1 et 12 Année d’expiration de la carte sur 4 digits ex : 2012 Cryptogramme visuel à 3 chiffres (ou 4 pour Amex : 4DBC) Ce champ est obligatoire lorsque la carte dispose d’un code cryptogramme visuel. Si le CVV n’est pas transmis, la banque émettrice refusera le paiement. Remarque : Le champ cvv est optionnel dans la méthode createWithThreeDS car certaines cartes ne possèdent pas de cvv. Identifiant du compte acheteur (paiement par identifiant) Ce champ ne doit pas être envoyé à vide (errorCode 17) Ce champ ne doit pas être valorisé si le champ cardNumber l’est déjà (errorCode 22) Date de naissance du porteur Numéro de contrat commerçant. Si ce champ est renseigné, veillez à utiliser le bon contrat en fonction du réseau de la carte. Par exemple, le contrat CB ne peut être utilisé pour une transaction AMEX. Réservé à un usage spécifique. Ne pas renseigner cvv string cardIdent string cardBirthDay dateTime contractNumber string paymentOptionCode string Obligatoire Le calcul de la signature se fait en prenant les paramètres dans l’ordre suivant : createCardInfo.cardNumber, createCardInfo.cardNetwork, createCardInfo.expiryMonth, createCardInfo.expiryYear, createCardInfo.cvv, createCardInfo.cardBirthDay, createCardInfo.cardIdent, createCardInfo.contractNumber, createCardInfo.paymentOptionCode Payzen – Description des webservices v4 10/56 4.4 createSubPaymentInfo Ce type est réservé à un usage futur. Il ne doit pas être valorisé : Nom du champ subPaymentType subReference subPaymentNumber Type Description int string int Obligatoire Ne pas renseigner Le calcul de la signature se fait en prenant les paramètres dans l’ordre suivant : createSubPaymentInfo.subPaymentType, createSubPaymentInfo.subReference, createSubPaymentInfo.subPaymentNumber 4.5 createCustomerInfo Ce type décrit les détails concernant le porteur de la carte. Nom du champ customerId customerTitle customerStatus customerName customerPhone customerEmail customerAddressNumber customerAddress customerDistrict customerZip customerCity customerCountry language customerIP Type Description string string custStatus string string string string string string string string string string string customerSendEmail boolean customerCellPhone string Array extInfo extInfo Obligatoire Référence client Civilité Cf. 4.8 Nom du client Numéro de téléphone Adresse de courrier électronique Numéro de rue Adresse Quartier Code postal Ville Pays Langue du client (norme ISO 639-1 sur 2 caractères). Adresse IP du lient Envoi d’un email de confirmation de paiement à l’internaute. 0= Non ; 1=Oui. Téléphone mobile du client Paramètres génériques exprimés sous la forme nom, valeur. Cf. 4.11 Le calcul de la signature se fait en prenant les paramètres dans l’ordre suivant : createCustomerInfo.customerId, createCustomerInfo.customerTitle, createCustomerInfo.customerStatus, createCustomerInfo.customerName, createCustomerInfo.customerPhone, createCustomerInfo.customerEmail, createCustomerInfo.customerAddressNumber, createCustomerInfo.customerAddress, createCustomerInfo.customerDistrict createCustomerInfo.customerZip, createCustomerInfo.customerCity, createCustomerInfo.customerCountry, createCustomerInfo.language, createCustomerInfo.customerIP, createCustomerInfo.customerSendEmail, createCustomerInfo.customerCellPhone, createCustomerInfo.extInfo Payzen – Description des webservices v4 11/56 4.6 createShippingInfo Ce type décrit les informations de livraison. Nom du champ Type shippingStatus shippingName shippingPhone shippingStreetNumber shippingStreet shippingStreet2 shippingDistrict shippingZipCode shippingCity shippingState shippingCountry shippingDeliveryCompanyName shippingSpeed shippingType custStatus string string string string string string string string string string string deliverySpeed deliveryType Description Obligatoire Cf.4.8 Nom Numéro de téléphone Numéro de la rue Adresse de livraison Deuxième ligne d’adresse de livraison Quartier Code postal Ville de livraison Etat de livraison Pays de livraison Informations sur le transporteur Mode de livraison (cf.4.9) Méthode de livraison (cf.4.10) Le calcul de la signature se fait en prenant les paramètres dans l’ordre suivant : createShippingInfo.shippingCity, createShippingInfo.shippingCountry, createShippingInfo.shippingDeliveryCompanyName, createShippingInfo.shippingName, createShippingInfo.shippingPhone, createShippingInfo.shippingSpeed, createShippingInfo.shippingState, createShippingInfo.shippingStatus, createShippingInfo.shippingStreetNumber, createShippingInfo.shippingStreet, createShippingInfo.shippingStreet2, createShippingInfo.shippingDistrict, createShippingInfo.shippingType, createShippingInfo.shippingZipCode 4.7 createExtraInfo Nom du champ Type ctxMode string browserUserAgent browserAccept string string Description Obligatoire Contexte de sollicitation de la plateforme de paiement. ("TEST", "PRODUCTION") Header « User-Agent » du navigateur du client Header « Accept » du navigateur du client Le calcul de la signature se fait en prenant les paramètres dans l’ordre suivant : createExtraInfo.ctxMode, createExtraInfo.browserUserAgent, createExtraInfo.browserAccept Payzen – Description des webservices v4 12/56 4.8 custStatus Ce type décrit le type de client. Les valeurs possibles sont définies ci-dessous : Valeur Description PRIVATE COMPANY Particulier Entreprise 4.9 deliverySpeed Ce type décrit le mode de livraison. Les valeurs possibles sont définies ci-dessous : Valeur Description STANDARD EXPRESS Livraison Standard Livraison Express 4.10 deliveryType Ce type décrit la méthode de livraison. Les valeurs possibles sont définies ci-dessous : Valeur Description RECLAIM_IN_SHOP RELAY_POINT RECLAIM_IN_STATION PACKAGE_DELIVERY_COMPANY ETICKET Retrait de la marchandise en magasin Utilisation d'un réseau de points-retrait tiers : (type Kiala, Alveol, etc.) Retrait dans un aéroport, une gare ou une agence de voyage Transporteur (La poste, Colissimo, UPS, DHL…) Emission d’un billet électronique, téléchargements 4.11 extInfo Ce type décrit un champ supplémentaire qui sera persisté dans la transaction et sera retourné dans la réponse Nom du champ key value Valeur string string Description Nom de la donnée Valeur de la donnée Le calcul de la signature se fait en prenant les paramètres dans l’ordre suivant : extInfo.key, extInfo.value Payzen – Description des webservices v4 13/56 4.12 createWithThreeDSResponse Ce type décrit la réponse envoyée lors d’un appel à la méthode createWithThreeDS. Nom du champ errorCode Type Description int Code d’erreur cf. 3 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) Contient le résultat de la demande d’enrôlement ainsi que le message PAReq codé dans le cas où le champ threeDSEnrolled est valorisé à « Y ». Cf. 4.13 Ce champ ne sera renvoyé que si la carte est enrôlée. Dans ce cas, le champ transactionInfo ne sera pas envoyé. Descriptif de la transaction. Cf. 4.14 Ne sera pas envoyé si la carte est enrôlée. extendedErrorCode string timestamp long signature string veResPAReqInfo transactionInfo veResPAReqInfo transactionInfo Le calcul de la signature se fait en prenant les paramètres dans l’ordre suivant : errorCode, extendedErrorCode, timestamp, veResPAReqInfo, transactionInfo Le code d’erreur de la réponse correspondra au code d’erreur retourné : soit lors de la création du paiement (transactionInfo) soit le lors de la demande de vérification d’enrôlement (veResPAReqInfo). 4.13 veResPAReqInfo Ce type décrit 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 Type Description errorCode errorDetail signature timestamp threeDSAcctId threeDSAcsUrl threeDSBrand threeDSEncodedPareq int string string long String String String String threeDSEnrolled String threeDSRequestId String Code d’erreur cf. 3 Détail de l’erreur si le champ errorCode est différent de 0 Signature de la Réponse (cf. ci-dessous) Timestamp permettant la génération de signature unique certificat renvoyé par le Directory Server Url de l’ACS à contacter Réseau de carte message PAReq encodé, prêt à envoyer à l’ACS Statut d’enrôlement du porteur : • « Y » : Enrôlé numéro de requête, à rappeler dans l’appel finalizeWithThreeDS Le calcul de la signature se fait en prenant les paramètres dans l’ordre suivant : errorCode, errorDetail, timestamp, threeDSAcctId , threeDSAcsUrl, threeDSBrand, threeDSEncodedPareq, threeDSEnrolled threeDSRequestId Payzen – Description des webservices v4 14/56 4.14 transactionInfo Ce type décrit une transaction : Nom du champ errorCode extendedErrorCode transactionStatus timestamp signature transactionStatusLabel paymentGeneralInfo cardInfo threeDSInfo authorizationInfo markInfo warrantyDetailsInfo captureInfo customerInfo shippingInfo extraInfo paymentOptionInfo boletoInfo Type Description int Code d’erreur (cf.3) Détail de l’erreur si le champ errorCode est différent de 0 Code du statut de la transaction (cf. 6) Timestamp permettant la génération de signature unique Signature de la transaction Libellé su statut de la transaction (cf.6) Cf. 4.15 Cf. 4.16 Cf. 4.17 Cf. 4.18 Cf. 4.19 Cf. 4.20 Cf. 4.22 Cf. 4.23 Cf. 4.24 Cf. 4.25 Réservé à un usage spécifique Réserve à un usage spécifique string int long string String transactionPaymentGeneralInfo transactionCardInfo transactionThreeDSInfo transactionAuthorizationInfo transactionMarkInfo transactionWarrantyDetailsInfo transactionCaptureInfo transactionCustomerInfo transactionShippingInfo transactionExtraInfo transactionPaymentOptionInfo transactionBoletoExtraInfo Le calcul de la signature se fait en prenant les paramètres dans l’ordre suivant: transactionInfo.errorCode, transactionInfo.extendedErrorCode, transactionInfo.transactionStatus, transactionInfo.timestamp, transactionInfo.paymentGeneralInfo, transactionInfo.cardInfo, transactionInfo.threeDSInfo, transactionInfo.authorizationInfo, transactionInfo.markInfo, transactionInfo.warrantyDetailsInfo, transactionInfo.captureInfo, transactionInfo.customerInfo, transactionInfo.shippingInfo, transactionInfo.extraInfo, transactionInfo.transactionStatusLabel Payzen – Description des webservices v4 15/56 4.15 transactionPaymentGeneralInfo Ce type décrit les informations générales d’une transaction : Type Description siteId Nom du champ string paymentSource string Identifiant de la boutique Source du paiement : - "E_COMMERCE" : e-Commerce - "MAIL_OR_TELEPHONE" : mail ou téléphone - "CALL_CENTER" : centre d’appel - "OTHER" : autres Référence de la commande Description libre de la commande Description libre de la commande Description libre de la commande Date et heure de la transaction Identifiant de transaction Numéro de séquence de la transaction Montant actuel de la transaction en plus petite unité monétaire Montant initial (avant modification éventuelle) en plus petite unité monétaire Code de la devise (Code monnaie ISO 4217, Euro : 978) Montant en contre-valeur en plus petite unité monétaire Devise en contre-valeur (Code monnaie ISO 4217, Euro : 978) Date de remise demandée 0 = DEBIT, 1 = CREDIT Paiement en plusieurs fois (Non = 0, Oui = 1) Date réelle d’enregistrement de la transaction orderId orderInfo orderInfo2 orderInfo3 transmissionDate transactionId sequenceNumber amount initialAmount currency effectiveAmount effectiveCurrency presentationDate type multiplePayment effectiveCreationDate string string string string dateTime string int string string int string int dateTime int int dateTime Le calcul de la signature se fait en prenant les paramètres dans l’ordre suivant : transactionPaymentGeneralInfo.siteId, transactionPaymentGeneralInfo.paymentSource, transactionPaymentGeneralInfo.orderId, transactionPaymentGeneralInfo.orderInfo, transactionPaymentGeneralInfo.orderInfo2, transactionPaymentGeneralInfo.orderInfo3, transactionPaymentGeneralInfo.transactionId, transactionPaymentGeneralInfo.sequenceNumber, transactionPaymentGeneralInfo.amount, transactionPaymentGeneralInfo.initialAmount, transactionPaymentGeneralInfo.currency, transactionPaymentGeneralInfo.effectiveAmount, transactionPaymentGeneralInfo.effectiveCurrency, transactionPaymentGeneralInfo.type, transactionPaymentGeneralInfo.multiplePayment, Payzen – Description des webservices v4 16/56 4.16 transactionCardInfo Ce type décrit le détail de la carte: Nom du champ Type Description cardNumber cardNetwork cardBrand string string string cardCountry long cardProductCode cardBankCode expiryMonth expiryYear contractNumber string string int int string Numéro de carte masqué Réseau de la carte Brand de la carte Code Pays du pays d’émission de la carte (Code numérique ISO 3166-1 ex : France=250) Code produit de la carte Code banque de la banque émettrice Mois d’expiration entre 1 et 12 Année d’expiration sur 4 chiffres Numéro du contrat commerçant utilisé Le calcul de la signature se fait en prenant les paramètres dans l’ordre suivant : transactionCardInfo.cardNumber, transactionCardInfo.cardNetwork, transactionCardInfo.cardBrand, transactionCardInfo.cardCountry, transactionCardInfo.expiryMonth, transactionCardInfo.expiryYear, transactionCardInfo.contractNumber, transactionCardInfo.cardBankCode, transactionCardInfo.cardProductCode Payzen – Description des webservices v4 17/56 4.17 transactionThreeDSInfo Ce champ décrit les détails de l’authentification 3D-Secure : Nom du champ threeDSTransactionCondition Type string threeDSEnrolled string threeDSStatus string threeDSEci threeDSXid string string threeDSCavvAlgorithm string threeDSCavv threeDSSignValid threeDSBrand string string string Description "COND_3D_SUCCESS", "COND_3D_FAILURE", "COND_3D_ERROR", "COND_3D_NOTENROLLED", "COND_3D_ATTEMPT", "COND_SSL" Voir détails ci-dessous 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 Indicateur de commerce Electronique Numéro de transaction 3DS Algorithme de vérification de l’authentification du porteur (CAVV) : "0" : HMAC "1" : CVV "2" : CVV_ATN "3" : Mastercard SPA Certificat de l’ACS Signature de l’authentification 3DS Brand de la carte ("VISA" ou "MASTERCARD") Détails threeDSTransactionCondition: Valeur "COND_3D_SUCCESS" " COND_3D_FAILURE" " COND_3D_ERROR" " COND_3D_NOTENROLLED" " COND_3D_ATTEMPT" "COND_SSL" Description Le commerçant et le porteur de la carte sont inscrits au programme 3-D Secure et le porteur s’est authentifié correctement. Le commerçant et le porteur de la carte sont inscrits au programme 3-D Secure mais l’acheteur n’a pas réussi à s’authentifier (mauvais mot de passe) Le commerçant participe au programme 3-D Secure mais le serveur Payzen a rencontré un problème technique durant le processus d’authentification (lors de la vérification de l’inscription de la carte au programme 3D ou de l’authentification du porteur). Le commerçant participe au programme 3-D Secure mais la carte du porteur n’est pas enrôlée. Le commerçant et le porteur de la carte sont inscrits au programme 3-D Secure mais l’acheteur n’a pas eu à s’authentifier (le serveur de contrôle d’accès de la banque qui a émis la carte n’implémente que la génération d’une preuve de tentative d’authentification). Le commerçant n’est pas enrôlé à 3D-Secure ou le canal de vente n’est pas couvert par cette garantie. Le calcul de la signature se fait en prenant les paramètres dans l’ordre suivant : transactionThreeDSInfo.threeDSTransactionCondition, transactionThreeDSInfo.threeDSEnrolled, transactionThreeDSInfo.threeDSStatus, transactionThreeDSInfo.threeDSEci, transactionThreeDSInfo.threeDSXid, transactionThreeDSInfo.threeDSCavvAlgorithm, transactionThreeDSInfo.threeDSCavv, transactionThreeDSInfo.threeDSSignValid, transactionThreeDSInfo.threeDSBrand Payzen – Description des webservices v4 18/56 4.18 transactionAuthorizationDSInfo Ce type décrit le détail de la demande d’autorisation : Nom du champ authMode Type string Description "MARK": Une autorisation d’un euro a été réalisée afin de vérifier la validité de la carte. Ce cas se présente lorsque la date de remise dépasse la période de validité d’une autorisation (7 jours pour VISA/MasterCard/CB/AMEX en France par exemple). "FULL" : autorisation pour le montant total demandé dans la requête authAmount string Montant de l’autorisation dans la plus petite unité monétaire (en centimes pour Euro) dans le cas où authMode vaut FULL authCurrency string Code de la monnaie utilisée lors de la demande d’autorisation (suivant la norme ISO 4217) dans le cas où authMode vaut FULL. authDate string Date et heure de la demande d’autorisation dans le cas où authMode vaut FULL. authNumber string Numéro de la demande d’autorisation dans le cas où authMode vaut FULL int Résultat de la demande d’autorisation dans le cas où authMode vaut FULL authResult authCVV2_CVC2 string Information relative au traitement du cryptogramme visuel de l’autorisation Le calcul de la signature se fait en prenant les paramètres dans l’ordre suivant : transactionAuthorizationInfo.authMode, transactionAuthorizationInfo.authAmount, transactionAuthorizationInfo.authCurrency, transactionAuthorizationInfo.authNumber, transactionAuthorizationInfo.authResult, transactionAuthorizationInfo.authCVV2_CVC2 Payzen – Description des webservices v4 19/56 Liste des valeurs possibles pour les champs authResult et markResult. Valeur 00 02 03 04 05 07 08 12 13 14 15 17 19 20 24 25 26 27 28 29 30 31 33 34 38 41 43 51 54 55 56 57 58 59 60 61 63 68 75 76 90 91 94 96 97 98 99 Description transaction approuvée ou traitée avec succès contacter l’émetteur de carte accepteur invalide conserver la carte ne pas honorer conserver la carte, conditions spéciales approuver après identification transaction invalide montant invalide numéro de porteur invalide Emetteur de carte inconnu Annulation client Répéter la transaction ultérieurement Réponse erronée (erreur dans le domaine serveur) Mise à jour de fichier non supportée Impossible de localiser l’enregistrement dans le fichier Enregistrement dupliqué, ancien enregistrement remplacé Erreur en « edit » sur champ de lise à jour fichier Accès interdit au fichier Mise à jour impossible erreur de format identifiant de l’organisme acquéreur inconnu date de validité de la carte dépassée suspicion de fraude Date de validité de la carte dépassée carte perdue carte volée provision insuffisante ou crédit dépassé date de validité de la carte dépassée Code confidentiel erroné carte absente du fichier transaction non permise à ce porteur transaction interdite au terminal suspicion de fraude l’accepteur de carte doit contacter l’acquéreur montant de retrait hors limite règles de sécurité non respectées réponse non parvenue ou reçue trop tard Nombre d’essais code confidentiel dépassé Porteur déjà en opposition, ancien enregistrement conservé arrêt momentané du système émetteur de cartes inaccessible transaction dupliquée mauvais fonctionnement du système échéance de la temporisation de surveillance globale serveur indisponible routage réseau demandé à nouveau incident domaine initiateur Payzen – Description des webservices v4 20/56 4.19 transactionMarkInfo Ce type décrit le détail de la demande d’empreinte : Nom du champ Type markAmount long markCurrency int markDate markNb markResult markCVV2_CVC2 dateTime string int string Description Montant utilisé pour vérifier la validité de la carte, dans la plus petite unité monétaire (en centimes pour l’euro). Sa valeur est 100. Code de la monnaie utilisée pour vérifier la validité de la carte (suivant la norme ISO 4217). Sa valeur est 100. Date et heure de la demande d’autorisation réalisée dans le cas où transactionAuthorizationInfo.authmode vaut MARK Numéro d’autorisation de la demande d’autorisation dans le cas où transactionAuthorizationInfo.authmode vaut MARK Résultat de la demande d’autorisation réalisée l dans le cas où transactionAuthorizationInfo.authmode vaut MARK Information relative au traitement du cryptogramme visuel. Le calcul de la signature se fait en prenant les paramètres dans l’ordre suivant : transactionMarkInfo.markAmount, transactionMarkInfo.markCurrency, transactionMarkInfo.markNb, transactionMarkInfo.markResult, transactionMarkInfo.markCVV2_CVC2 4.20 transactionWarrantyDetailsnfo Ce type décrit le détail de la garantie du paiement et des contrôles locaux : Nom du champ paymentError warrantlyResult localControl litige Type int string Array localControl boolean Description Complément d’information en cas d’erreur technique. Garantie de paiement (YES / NO) Tableau des résultats des différents contrôles locaux Litige Le calcul de la signature se fait en prenant les paramètres dans l’ordre suivant : transactionWarrantyDetailsInfo.paymentError, transactionWarrantyDetailsInfo.warrantlyResult, transactionWarrantyDetailsInfo.localControl, transactionWarrantyDetailsInfo.litige Payzen – Description des webservices v4 21/56 4.21 localControl Ce type décrit un contrôle local (nom du contrôle et résultat). Nom du champ Type name result string boolean Description Nom du contrôle Résultat du contrôle Le calcul de la signature se fait en prenant les paramètres dans l’ordre suivant : localControl.name, localControl.result Les différentes valeurs possibles pour ‘name’ sont : Valeur Description Carte située dans une liste grise "CARD" "AMOUNT" Pays inclus dans la liste grise de la boutique ou absent de la liste blanche Adresse IP située dans une liste grise Encours atteint "BIN" Le code BIN appartient à la liste grise du commerçant " ECB" Détection d’une e-carte bleue "CARD_COMMERCIAL_NATIONAL" Détection d’une carte commerciale nationale "CARD_COMMERCIAL_FOREIGN" Détection d’une carte commerciale étrangère "CAS" Détection d’une carte à autorisation systématique "COUNTRY_CONSISTENCY" Aucun pays ne correspond (pays IP, pays carte, pays client) "NON_GUARANTEED_PAYMENT" Détection d’un paiement sans garantie "IPADDR_COUNTRY" Le pays de l’adresse IP appartient à la liste grise "COUNTRY" "IPADDR" Cette liste est susceptible de s’allonger, veuillez bien en tenir compte dans votre implémentation. Les différentes valeurs possibles pour ‘result’ sont : Valeur Description "0" Indique que le contrôle est correct "1" Indique que le contrôle est en erreur Payzen – Description des webservices v4 22/56 4.22 transactionCaptureInfo Ce type décrit le détail de la remise dans le cas où la transaction est remisée. Nom du champ captureDate captureNumber rapprochementStatut Type dateTime int int refundAmount long refundCurrency int Description Date et heure de remise Numéro de remise Statut de rapprochement bancaire de la transaction. Montant ayant déjà fait l’objet d’un remboursement en plus petite unité monétaire Devise du montant ayant déjà fait l’objet d’un remboursement (Code monnaie ISO 4217, Euro : 978) Le calcul de la signature se fait en prenant les paramètres dans l’ordre suivant : transactionCaptureInfo.captureNumber, transactionCaptureInfo.rapprochementStatut, transactionCaptureInfo.refundAmount, transactionCaptureInfo.refundCurrency 4.23 transactionCustomerInfo Ce type décrit les détails concernant le porteur de la carte : Nom du champ customerId customerTitle customerStatus customerName customerPhone customerEmail customerAddressNumber customerAddress customerDistrict customerZip customerCity customerCountry language customerIP customerCellPhone extInfo Type string string custStatus string string string string string string string string string string string string Array extInfo Description Référence client Civilité Cf.4.8 Nom du client Numéro de téléphone Adresse de courrier électronique Numéro de la rue Numéro de rue Quartier Code postal Ville Pays Langue du client (norme ISO 639-1 sur 2 caractères). Adresse IP du lient Téléphone mobile du client Cf. 4.11 Le calcul de la signature se fait en prenant les paramètres dans l’ordre suivant : transactionCustomerInfo.customerId, transactionCustomerInfo.customerTitle, transactionCustomerInfo.customerStatus, transactionCustomerInfo.customerName, transactionCustomerInfo.customerPhone, transactionCustomerInfo.customerEmail, transactionCustomerInfo.customerAddressNumber, transactionCustomerInfo.customerAddress, transactionCustomerInfo.customerDistrict, transactionCustomerInfo.customerZip, transactionCustomerInfo.customerCity, transactionCustomerInfo.customerCountry, transactionCustomerInfo.language, transactionCustomerInfo.customerIP, transactionCustomerInfo.customerCellPhone, transactionCustomerInfo.extInfo Payzen – Description des webservices v4 23/56 4.24 transactionShippingInfo Ce type décrit les informations de livraison : Nom du champ Type shippingCity shippingCountry shippingDeliveryCompanyName shippingName shippingPhone shippingSpeed shippingState shippingStatus shippingStreetNumber shippingStreet shippingStreet2 shippingDistrict shippingType shippingZipCode string string string string string deliverySpeed string custStatus string string string string deliveryType string Description Ville de livraison Pays de livraison Informations sur le transporteur Nom Numéro de téléphone Mode de livraison (cf.4.9) Etat de livraison Cf. 4.8 Numéro de la rue Adresse de livraison Deuxième ligne d’adresse de livraison Quartier Méthode de livraison (cf.4.10) Code postal Le calcul de la signature se fait en prenant les paramètres dans l’ordre suivant : transactionShippingInfo.shippingCity, transactionShippingInfo.shippingCountry, transactionShippingInfo.shippingDeliveryCompanyName, transactionShippingInfo.shippingName, transactionShippingInfo.shippingPhone, transactionShippingInfo.shippingSpeed, transactionShippingInfo.shippingState, transactionShippingInfo.shippingStatus, transactionShippingInfo.shippingStreetNumber, transactionShippingInfo.shippingStreet, transactionShippingInfo.shippingStreet2, transactionShippingInfo.shippingDistrict, transactionShippingInfo.shippingType, transactionShippingInfo.shippingZipCode 4.25 transactionExtraInfo Ce type décrit les informations de livraison : Nom du champ ctxMode Type string Description Contexte de sollicitation de la plateforme de paiement. ("TEST", "PRODUCTION") Le calcul de la signature se fait en prenant les paramètres dans l’ordre suivant : transactionExtraInfo.ctxMode Payzen – Description des webservices v4 24/56 4.26 paymentCreationInfo Ce champ décrit les paramètres nécessaires à la création de la transaction ainsi qu’à la vérification de l’enrôlement de la carte. Nom du champ paymentGeneralInfo cardInfo threeDsResult subPaymentInfo customerInfo shippingInfo extraInfo Type Description createPaymentGeneralInfo createCardInfo threeDsResult createSubPaymentInfo createCustomerInfo createShippingInfo createExtraInfo Cf. 4.2 Cf. 4.3 Cf. 4.27 Cf. 4.4 Cf. 4.5 Cf. 4.6 Cf. 4.7 Obligatoire 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 : paymentGeneralInfo, cardInfo, threeDsResult, subPaymentInfo, customerInfo, shippingInfo, extraInfo 4.27 threeDsResult Ce champ décrit le résultat d’une authentification 3D-Secure réalisée par le commerçant. Nom du champ Type threeDSBrand string threeDSEnrolled string threeDSStatus string threeDSEci threeDSXid threeDSCavv string string string threeDSCavvAlgorithm string Description Obligatoire 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 Indicateur de commerce Electronique Numéro de transaction 3DS Certificat de l’ACS Algorithme de vérification de l’authentification du porteur (CAVV) : "0" : HMAC "1" : CVV "2" : CVV_ATN "3" : Mastercard SPA Le calcul de la signature se fait en prenant les paramètres dans l’ordre suivant : threeDsResult.threeDSBrand, threeDsResult.threeDSEnrolled, threeDsResult.threeDSStatus, threeDsResult.threeDSEci, threeDsResult.threeDSXid, threeDsResult.threeDSCavv, threeDsResult.threeDSCavvAlgorithm Remarque : Ce champ est facultatif lors de la création d’une transaction (méthode create). Il devient obligatoire lorsque le marchand a réalisé le processus 3D-Secure, quelle que soit l’issue de l’authentification. Payzen – Description des webservices v4 25/56 Cas des cartes non enrôlées (threeDSEnrolled = "N"): Le marchand devra obligatoirement fournir les champs suivants : threeDSBrand, threeDSEnrolled. Les autres champs (threeDSStatus, threeDSEci, threeDSXid, threeDSCavv, et threeDSCavvAlgorithm) ne devront pas être envoyés. Cas des cartes enrôlées (threeDSEnrolled = "Y"): Le marchand devra obligatoirement fournir tous les champs: threeDSBrand, threeDSEnrolled, threeDSStatus, threeDSXid. Dans le cas où l’internaute s’est correctement authentifié (threeDSStatus = "Y" ou "A") Les champs threeDSEci, threeDSCavv et threeDSCavvAlgorithm deviennent obligatoires. Dans le cas où l’internaute ne s’est pas authentifié (threeDSStatus = "N" ou "U"), les champs threeDSEci, threeDSCavv et threeDSCavvAlgorithm ne doivent pas être envoyés Cas des cartes dont le statut d’enrôlement est inconnu (threeDSEnrolled = "U"): Le marchand devra obligatoirement fournir les champs suivants : threeDSBrand, threeDSEnrolled. Les autres champs (threeDSStatus, threeDSEci, threeDSXid, threeDSCavv, et threeDSCavvAlgorithm) ne devront pas être envoyés. 4.28 standardResponse Ce type permet de décrire la réponse des méthodes cancel, force et validate. Nom du champ errorCode extendedErrorCode transactionStatus timestamp signature Type int String int long String Description Code d’erreur (cf. 3) Précision sur le code d’erreur Statut de la transaction (cf. 6) Timestamp permettant la génération de signature unique Signature de la transaction (cf.5) 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, extendedErrorCode, transactionStatus, timestamp Payzen – Description des webservices v4 26/56 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. Afin de simplifier le calcul de signature, les champs de type dateTime ne sont pas pris en compte. ______________________________________________________________________________________________ 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 extendedErrorCode. ______________________________________________________________________________________________ Payzen – Description des webservices v4 27/56 6. STATUT D’UNE TRANSACTION Les différents statuts de la transaction (transactionStatus) peuvent être : Valeur "0" "1" "2" "3" "4" "5" "6" "7" "8" "9" transactionStatus Initial (en traitement) Réservé à un usage spécifique A valider : Cas d’un paiement créé en validation manuelle et pour lequel l’autorisation a été acceptée. A forcer – Contacter l’émetteur Ce statut apparaît occasionnellement lorsqu’un client a dépassé le plafond des paiements autorisés pour sa carte. Le paiement est considéré comme refusé. A valider et autoriser Cas d’un paiement créé en validation manuelle, dont la date de présentation est supérieure à 6 jours et pour laquelle une prise d’empreinte a été réalisée avec succès. En attente de remise : Cas d’un paiement accepté, validé, et dont la date de présentation est inférieure à 6 jours. En attente d’autorisation : Cas d’un paiement différé, dont la date de présentation est supérieure à 6 jours, et pour lequel une prise d’empreinte a été réalisée avec succès. Remisée : Cas d’une transaction acceptée et remise en banque. Expiré : Cas d’un paiement créé en validation manuelle et pour lequel l’autorisation a été acceptée mais dont la date de présentation a été atteinte. Refusé : Cas d’un paiement refusé quel que soit le motif (demande d’autorisation, contrôles locaux etc...) Annulé : Cas d’un paiement annulé par le marchand depuis le BO ou via une requête cancel transactionStatusLabel "INITIAL" "AUTHORISED_TO_VALIDATE" " REFUSED " "WAITING_AUTHORISATION_TO_VALIDATE" "AUTHORISED" "WAITING_AUTHORISATION" "CAPTURED" "EXPIRED" " REFUSED " "CANCELLED" "11" En cours de remise Réservé à un usage spécifique "AUTHORISED" "12" En cours d’autorisation Réservé à un usage spécifique "WAITING_AUTHORISATION" "13" En échec Réservé à un usage spécifique "CAPTURE_FAILED" Payzen – Description des webservices v4 28/56 7. DESCRIPTION DES METHODES 7.1 Maintien de la session HTTP entre chaque requête 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 createWithThreeDS, 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 finalizeWithThreeDS suivantes. 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 createWithThreeDS, 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 createWithThreeDS, il faut également l’envoyer. Payzen – Description des webservices v4 29/56 7.2 Création d’un paiement avec authentification 3D-Secure 7.2.1: 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 Payzen (méthode createWithThreeDS) Payzen via son MPI interroge les directory VISA ou Mastercard. Si la carte n’est pas enrôlée, alors Payzen procède à la demande d’autorisation et retourne le résultat du paiement au site marchand (transactionInfo) Si la carte est enrôlée, Payzen 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 (threeDSRequestId) 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 (threeDSRequestId) 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 à Payzen pour vérifier l’authentification et créer la transaction (finalizeWithThreeDS) Le MPI de Payzen vérifie les données contenues dans le PARes : l’acheteur ne s’est pas authentifié, le paiement sera refusé. l’acheteur s’est authentifié, Payzen procède à la demande d’autorisation. Payzen renvoi le résultat du paiement au site marchand (transactionInfo) Payzen – Description des webservices v4 30/56 7.2.2: Détails de la méthode createWithThreeDS La méthode createWithThreeDS prend en entrée les paramètres suivants : Nom du champ createInfo wsSignature Type createPaymentInfo String Description Obligatoire Cf. 4.1 Signature (cf. ci-dessous) Le calcul de la signature se fait en prenant les paramètres dans l’ordre suivant : createPaymentInfo.paymentGeneralInfo, createPaymentInfo.cardInfo, createPaymentInfo.subPaymentInfo, createPaymentInfo.customerInfo, createPaymentInfo.shippingInfo, createPaymentInfo.extraInfo ________________________________________________________________________________________________ Le champ subPaymentInfo ne doit pas être renseigné. Sa valeur lors du calcul de signature doit donc être vide. ________________________________________________________________________________________________ Cette fonction retourne une réponse du type createWithThreeDSResponse cf. 4.12 Payzen – Description des webservices v4 31/56 Exemple de fichier XML généré lors de l’appel de la méthode createWithThreeDS : <?xml version="1.0" encoding="UTF-8"?> <SOAP-ENV:Envelope xmlns:SOAP-ENV=http://schemas.xmlsoap.org/soap/envelope/ xmlns:ns1="http://v4.ws.vads.lyra.com/"> <SOAP-ENV:Body> <ns1:createWithThreeDS> <createInfo> <paymentGeneralInfo> <siteId>91335531</siteId> <transmissionDate>2012-06-12T08:43:28+00:00</transmissionDate> <transactionId>084328</transactionId> <paymentSource>EC</paymentSource> <orderId>CMD-TEST</orderId> <amount>3000</amount> <currency>978</currency> </paymentGeneralInfo> <cardInfo> <cardNumber>4970100000000000</cardNumber> <cardNetwork>CB</cardNetwork> <expiryMonth>04</expiryMonth> <expiryYear>16</expiryYear> <cvv>123</cvv> </cardInfo> <customerInfo> <customerName>test Payzen</customerName> <customerAddress>allée du test</customerAddress> <customerZip>31450</customerZip> <customerCity>Labège</customerCity> <customerCountry>France</customerCountry> <language>fr</language> <extInfo> <key>article</key> <value>Iphone12</value> </extInfo> <extInfo> <key>article1</key> <value>Iphone12GS</value> </extInfo> </customerInfo> <shippingInfo> <shippingDeliveryCompanyName>UPS</shippingDeliveryCompanyName> <shippingSpeed>STANDARD</shippingSpeed> <shippingType>PACKAGE_DELIVERY_COMPANY</shippingType> </shippingInfo> <extraInfo> <ctxMode>TEST</ctxMode> </extraInfo> </createInfo> <wsSignature>98d5a4796386625a63fc0068a867b2ef57607254</wsSignature> </ns1:createWithThreeDS> </SOAP-ENV:Body></SOAP-ENV:Envelope> Payzen – Description des webservices v4 32/56 Exemple de fichier XML généré en réponse à l’appel createWithThreeDS (carte enrôlée) : <env:Envelope xmlns:env='http://schemas.xmlsoap.org/soap/envelope/'> <env:Header></env:Header> <env:Body> <ns1:createWithThreeDSResponse xmlns:ns1='http://v4.ws.vads.lyra.com/'> <return> <errorCode>0</errorCode> <timestamp>1339592387720</timestamp> <signature>3045335d5a19152a297bace106f3ed241994ef6f</signature> <veResPAReqInfo> <errorCode>0</errorCode> <signature>4d0073dc0e4ec3ffba03a1971f42761d98a34c9c</signature> <timestamp>1339592387720</timestamp> <threeDSAcctId>fa1e2b46604f412eb01bbd27cb28</threeDSAcctId> <threeDSAcsUrl>https://secure.payzen.eu/vads-mpi/acs.a </threeDSAcsUrl> <threeDSBrand>VISA</threeDSBrand> <threeDSEncodedPareq>eJxVUttu2zAM/RXD744a</threeDSEncodedPareq> <threeDSEnrolled>Y</threeDSEnrolled> <threeDSrequestId>_769d0897-1d6b-464e-8438-dba2b39ac423 </threeDSrequestId> </veResPAReqInfo> </return> </ns1:createWithThreeDSResponse> </env:Body> </env:Envelope> Payzen – Description des webservices v4 33/56 7.2.3: 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, sa valeur est celle retournée dans le champ veResPAReqInfo.threeDSAcsUrl 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 :: Nom du champ Type PaReq String TermUrl String MD String Description Obligatoire Message codé, retourné par l’appel de la méthode sendVEReqAndBuildPaReqTx 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 » ______________________________________________________________________________________________ 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://secure.payzen.eu/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 ______________________________________________________________________________________________ Payzen – Description des webservices v4 34/56 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=" threeDSAcsUrl "/> <input type="hidden" name="TermUrl" value="url_de_retour"/> <input type="hidden" name="MD" value=" threeDSrequestId " /> <noscript><input type="submit" name="Go" value="Click to continue"/></noscript> </form> </body> </html> Payzen – Description des webservices v4 35/56 7.2.4: 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 renvoyer les données du PARes au site marchand. Les paramètres renvoyés par l’ACS sont les suivants : • • PaRes : contient le message PARes (Payer Authentication Response) 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 threeDSrequestId pour ensuite les utiliser lors de l’appel à la méthode finalizeWithThreeDS. Exemple de page de retour : Dans cet exemple, le champ MD a été composé de l’identifiant 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 finalizeWithThreeDS … </body> </html> Payzen – Description des webservices v4 36/56 7.2.5: Analyse de l’authentification 3DS et finalisation du paiement (finalyzeWithThreeDS) 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 threeDSrequestId pares wsSignature Type String String String Description Obligatoire numéro de requête obtenu dans la réponse createWithThreeDSResponse. 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 : threeDSrequestId, pares Cette fonction retourne une réponse du type transactionInfo cf. 4.14. Le champ transactionInfo.transactionThreeDSInfo contient le résultat de la demande d’authentification 3DSecure. ________________________________________________________________________________________________ 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. ________________________________________________________________________________________________ Exemple de fichier XML généré lors de l’appel finalizeWithThreeDS : <?xml version="1.0" encoding="UTF-8"?> <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://v4.ws.vads.lyra.com/"> <SOAP-ENV:Body> <ns1:finalizeWithThreeDS> <requestId>_e23491ca-4d20-4b70-8bea-4b658c071784</requestId> <pares>eJzNWdmSo0iyfecrymoe1VUsYhFjyhw==</pares> <wsSignature>6974b7cc7e3495e53e5e0ff6d83a3e5317957309</wsSignature> </ns1:finalizeWithThreeDS> </SOAP-ENV:Body> </SOAP-ENV:Envelope> Payzen – Description des webservices v4 37/56 7.3 Modification d’une transaction (modify) Cette fonction permet : de modifier le montant d’une transaction (à la baisse) de modifier la date de remise souhaitée de valider la transaction Les transactions pouvant faire l’objet d’une modification possède l’un des statuts suivants : A valider A valider et autoriser En attente d’auto En attente de remise Cette fonction prend en entrée les paramètres suivants : Nom du champ Type siteId String transmissionDate Date transactionId String sequenceNumber Int ctxMode String amount currency Long Int presentationDate Date validate comment wsSignature bool String String Description Obligatoire Identifiant de la boutique Date et heure de création de la transaction à modifier, exprimée au format W3C (Ex : 2012-06-08T08:16:43+00:00). Identifiant de la transaction à modifier Numéro de séquence de la transaction à modifier. Vaut "1" pour un paiement unitaire. Prend la valeur du numéro d’échéance dans le cas d’un paiement en plusieurs fois. Contexte de sollicitation de la plateforme de paiement ("TEST", "PRODUCTION") Montant demandé en plus petite unité monétaire Devise (Code monnaie ISO 4217, Euro : 978) Date remise demandée, exprimée au format W3C (Ex : 2012-06-08T08:16:43+00:00). Validation de la transaction : 0 -> non ; 1 -> oui Commentaire « libre » Signature (cf. 5) Cette fonction retourne une réponse du type transactionInfo cf. Erreur ! Source du renvoi introuvable. . Le calcul de la signature se fait en prenant les paramètres dans l’ordre suivant : siteId, transactionId, sequenceNumber, ctxMode, amount, currency, validate, comment __________________________________________________________________________________________ Remarque : Le champ amount ne doit pas être envoyé à vide ou à 0. Si vous ne souhaitez pas modifier le montant de la transaction, vous devez valoriser le champ amount avec la valeur initiale. Si aucune information n’est modifiée, la requête sera rejetée avec un code erreur 26. __________________________________________________________________________________________ Payzen – Description des webservices v4 38/56 Exemple de fichier XML généré lors de l’appel modify : <?xml version="1.0" encoding="UTF-8"?> <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://v4.ws.vads.lyra.com/"> <SOAP-ENV:Body> <ns1:modify> <siteId>70258842</siteId> <transmissionDate>2013-05-16T08:09:22+00:00</transmissionDate> <transactionId>965805</transactionId> <sequenceNumber>1</sequenceNumber> <ctxMode>TEST</ctxMode> <amount>15800</amount> <currency>978</currency> <captureDate>2013-05-16T08:09:22+00:00</captureDate> <validationMode>true</validationMode> <comment></comment> <wsSignature>532bfc85fac7b4af69323e9026806b5392019c62</wsSignature> </ns1:modify> </SOAP-ENV:Body> </SOAP-ENV:Envelope> Calcul de signature associé : 70258842+965805+1+TEST+15800+978+1++certificat Exemple de fichier XML généré en réponse à l’appel modify: <env:Envelope xmlns:env='http://schemas.xmlsoap.org/soap/envelope/'> <env:Header></env:Header> <env:Body> <ns1:modifyResponse xmlns:ns1='http://v4.ws.vads.lyra.com/'> <return> <errorCode>0</errorCode> <transactionStatus>4</transactionStatus> <timestamp>1368691764166</timestamp> <signature>fab6756f305cd7f78863c569492f2251ba69186a</signature> <transactionStatusLabel>AUTHORISED</transactionStatusLabel> <paymentGeneralInfo> <siteId>70258842</siteId> <paymentSource>OTHER</paymentSource> <transmissionDate>2013-05-16T10:08:43+02:00</transmissionDate> <transactionId>965805</transactionId> <sequenceNumber>1</sequenceNumber> <amount>15800</amount> <initialAmount>15800</initialAmount> <currency>978</currency> <presentationDate>2013-05-16T10:09:22+02:00</presentationDate> <type>0</type> <multiplePayment>0</multiplePayment> <effectiveCreationDate>2013-05-16T10:08:43+02:00</effectiveCreationDate> </paymentGeneralInfo> <cardInfo> <cardNumber>497010XXXXXX0000</cardNumber> Payzen – Description des webservices v4 39/56 <cardNetwork>CB</cardNetwork> <cardBrand>CB</cardBrand> <cardCountry>250</cardCountry> <expiryMonth>5</expiryMonth> <expiryYear>2014</expiryYear> <contractNumber>1111112</contractNumber> </cardInfo> <threeDSInfo> <threeDSTransactionCondition>COND_SSL</threeDSTransactionCondition> </threeDSInfo> <authorizationInfo> <authMode>FULL</authMode> <authAmount>15800</authAmount> <authCurrency>978</authCurrency> <authDate>2013-05-16T10:08:43+02:00</authDate> <authNumber>315637</authNumber> <authResult>0</authResult> <authCVV2_CVC2></authCVV2_CVC2> </authorizationInfo> <markInfo/> <warrantyDetailsInfo> <warrantyResult>NO</warrantyResult> <localControl> <name>CARD</name> <result>false</result> </localControl> </warrantyDetailsInfo> <captureInfo> <captureNumber>0</captureNumber> <rapprochementStatut>0</rapprochementStatut> <refundAmount>0</refundAmount> <refundCurrency>978</refundCurrency> </captureInfo> <customerInfo> <language>fr_FR</language> <customerIP>78.245.84.102</customerIP> </customerInfo> <shippingInfo/> <extraInfo> <ctxMode>TEST</ctxMode> </extraInfo> </return> </ns1:modifyResponse> </env:Body> </env:Envelope> Calcul de signature de la réponse: 0++4+1368691764166+70258842+OTHER+++++965805+1+15800+15800+978+++0+0+497010XXXXXX00 00+CB+CB+250+5+2014+1111112+++COND_SSL+++++++++FULL+15800+978+315637+0++++++++NO+ CARD+0++0+0+0+978+++++++++++++fr_FR+78.245.84.102+++++++++++++++++TEST+AUTHORISED +certificat Payzen – Description des webservices v4 40/56 7.4 Création d’un paiement avec 3D-Secure intégrateur ou sans 3D-Secure (create) Cette fonction permet de créer: un paiement unique sans 3D-Secure un paiement unique avec 3D-Secure réalisé par le marchand un paiement par identifiant sans 3D-Secure un paiement par identifiant avec 3D-Secure réalisé par le marchand Cette fonction prend en entrée les paramètres suivants : Nom du champ createInfo wsSignature Type paymentCreationInfo String Description Obligatoire Cf. 4.26 Signature (cf. 5) Cette fonction retourne une réponse du type transactionInfo cf. Erreur ! Source du renvoi introuvable. . Le calcul de la signature se fait en prenant les paramètres dans l’ordre suivant : paymentCreationInfo.paymentGeneralInfo, paymentCreationInfo.cardInfo, paymentCreationInfo.threeDsResult, paymentCreationInfo.subPaymentInfo, paymentCreationInfo.customerInfo, paymentCreationInfo.shippingInfo, paymentCreationInfo.extraInfo __________________________________________________________________________________________ Remarques Pour créer des paiements avec 3D-Secure, le champ paymentGeneralInfo.paymentSource doit être obligatoirement valorisé à EC (E-Commerce). Le 3D-S n’a de sens qu’en mode e-commerce. Dans le cas d’un paiement par identifiant avec 3D-S réalisé par le marchand, l’envoi du champ cardInfo.cvv est obligatoire. Les champs cardInfo.cardIdent et cardInfo.cardNumber sont exclusifs et ne doivent pas être renseignés dans une même requête. Le champ cardInfo.cardIdent ne doit pas être valorisé à vide. __________________________________________________________________________________________ Payzen – Description des webservices v4 41/56 Exemple de fichier XML généré lors de l’appel create sans Infos 3D-S : <?xml version="1.0" encoding="UTF-8"?> <SOAP-ENV:Envelope xmlns:SOAPENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://v4.ws.vads.lyra.com/"> <SOAP-ENV:Body> <ns1:create> <createInfo> <paymentGeneralInfo> <siteId>70258842</siteId> <transmissionDate>2013-07-19T10:01:01+00:00</transmissionDate> <transactionId>432617</transactionId> <paymentSource>EC</paymentSource> <orderId>CMD-TEST</orderId> <amount>1200</amount> <currency>978</currency> <presentationDate>2013-07-19T10:01:01+00:00</presentationDate> <validationMode>0</validationMode> </paymentGeneralInfo> <cardInfo> <cardNumber>4970100000000000</cardNumber> <cardNetwork>CB</cardNetwork> <expiryMonth>11</expiryMonth> <expiryYear>2020</expiryYear> <cvv>123</cvv> </cardInfo> <customerInfo> <customerEmail>[email protected]</customerEmail> <customerIP>127.0.0.1</customerIP> <customerSendEmail>true</customerSendEmail> </customerInfo> <extraInfo> <ctxMode>TEST</ctxMode> </extraInfo> </createInfo> <wsSignature>0a288b4f237d6a76d429047cd28b4cc255e09423</wsSignature> </ns1:create> </SOAP-ENV:Body> </SOAP-ENV:Envelope> Calcul de signature associé : 70258842+432617+EC+CMD-TEST++++1200+978+0+****************+CB+11+2020+123++++++++++++ [email protected]++++++++127.0.0.1+1++++TEST+++certificat Payzen – Description des webservices v4 42/56 Exemple de fichier xml généré en réponse à l’appel create : <env:Envelope xmlns:env='http://schemas.xmlsoap.org/soap/envelope/'> <env:Header> </env:Header> <env:Body> <ns1:createResponse xmlns:ns1='http://v4.ws.vads.lyra.com/'> <return> <errorCode>0</errorCode> <transactionStatus>4</transactionStatus> <timestamp>1374228062583</timestamp> <signature>c8c5dc5c368860184af00dbf4e8d84d50dc38f5c</signature> <transactionStatusLabel>AUTHORISED</transactionStatusLabel> <paymentGeneralInfo> <siteId>70258842</siteId> <paymentSource>E_COMMERCE</paymentSource> <orderId>CMD-TEST</orderId> <transmissionDate>2013-07-19T12:01:01+02:00</transmissionDate> <transactionId>432617</transactionId> <sequenceNumber>1</sequenceNumber> <amount>1200</amount> <initialAmount>1200</initialAmount> <currency>978</currency> <presentationDate>2013-07-19T12:01:01+02:00</presentationDate> <type>0</type> <multiplePayment>0</multiplePayment> </paymentGeneralInfo> <cardInfo> <cardNumber>497010XXXXXX0000</cardNumber> <cardNetwork>CB</cardNetwork> <cardBrand>CB</cardBrand> <cardCountry>250</cardCountry> <cardProductCode>F</cardProductCode> <expiryMonth>11</expiryMonth> <expiryYear>2020</expiryYear> <contractNumber>1111112</contractNumber> </cardInfo> <threeDSInfo> <threeDSTransactionCondition>COND_SSL</threeDSTransactionCondition> </threeDSInfo> <authorizationInfo> <authMode>FULL</authMode> <authAmount>1200</authAmount> <authCurrency>978</authCurrency> <authDate>2013-07-19T12:01:02.583+02:00</authDate> <authNumber>264782</authNumber> <authResult>0</authResult> <authCVV2_CVC2> </authCVV2_CVC2> </authorizationInfo> <markInfo/> <warrantyDetailsInfo> <warrantyResult>NO</warrantyResult> <localControl> <name>CARD</name> <result>false</result> </localControl> </warrantyDetailsInfo> <captureInfo> <captureNumber>0</captureNumber> <rapprochementStatut>0</rapprochementStatut> Payzen – Description des webservices v4 43/56 <refundAmount>0</refundAmount> <refundCurrency>978</refundCurrency> </captureInfo> <customerInfo> <customerEmail>[email protected]</customerEmail> <language>fr_FR</language> <customerIP>127.0.0.1</customerIP> </customerInfo> <shippingInfo/> <extraInfo> <ctxMode>TEST</ctxMode> </extraInfo> </return> </ns1:createResponse> </env:Body> </env:Envelope> Calcul de signature de la réponse: 0++4+1374228062583+70258842+E_COMMERCE+CMD-TEST++++432617+1+1200+1200+978+++0+0+ 497010XXXXXX0000+CB+CB+250+11+2020+1111112++F+COND_SSL+++++++++FULL+1200+978+ [email protected]+++++++fr_FR+127.0.0. 1+++++++++++++++++TEST+AUTHORISED+certificate Payzen – Description des webservices v4 44/56 7.5 Annulation d’une transaction (cancel) Cette fonction permet d’annuler définitivement une transaction, non encore remisée, disposant d’un des statuts suivants : • A valider • A valider et autoriser • En attente • En attente d’auto • En attente de remise Cette fonction prend en entrée les paramètres suivants : Nom du champ siteId Type String Date transmissionDate transactionId String Int sequenceNumber ctxMode String wsSignature String Description Obligatoire Identifiant de la boutique Date et heure de création de la transaction à annuler, exprimée au format W3C (Ex : 2012-06-08T08:16:43+00:00). Identifiant de la transaction à annuler Numéro de séquence de la transaction à annuler. Vaut "1" pour un paiement unitaire. Prend la valeur du numéro d’échéance dans le cas d’un paiement en plusieurs fois Contexte de sollicitation de la plateforme de paiement ("TEST", "PRODUCTION") Signature (cf.5) Le calcul de la signature se fait en prenant les paramètres dans l’ordre suivant : siteId, transactionId, sequenceNumber, ctxMode, comment Cette fonction retourne une réponse du type standardResponse (cf.4.28). Payzen – Description des webservices v4 45/56 7.6 Forçage d’une transaction (force) Cette fonction permet aux commerçants de transmettre le n° d’autorisation d’une transaction suite à appel phonie. Seules les transactions de statut « à forcer » peuvent bénéficier de cette fonction. Cette fonction prend en entrée les paramètres suivants : Nom du champ siteId Type String Date transmissionDate transactionId String Int sequenceNumber ctxMode String authNumber string authDate Date comment wsSignature String String Description Obligatoire Identifiant de la boutique Date et heure de création de la transaction à forcer, exprimée au format W3C (Ex : 2012-06-08T08:16:43+00:00). Identifiant de la transaction à forcer Numéro de séquence de la transaction à forcer. Vaut "1" pour un paiement unitaire. Prend la valeur du numéro d’échéance dans le cas d’un paiement en plusieurs fois. Contexte de sollicitation de la plateforme de paiement ("TEST", "PRODUCTION") Numéro d’autorisation Date et heure de la demande d’autorisation exprimée au format W3C (Ex : 2012-06-08T08:16:43+00:00). Commentaire « libre » Signature (cf.5) Le calcul de la signature se fait en prenant les paramètres dans l’ordre suivant : siteId, transactionId, sequenceNumber, ctxMode, authNumber, comment. Cette fonction retourne une réponse du type standardResponse (cf.4.28). Payzen – Description des webservices v4 46/56 7.7 Remboursement d’une transaction (refund) Cette fonction permet de rembourser le porteur. Les transactions pouvant faire l’objet d’un remboursement possède le statut suivant : • Remisé Cette fonction prend en entrée les paramètres suivants : Nom du champ Type siteId String transmissionDate Date transactionId String sequenceNumber Int ctxMode String newTransactionId amount currency String Long Int presentationDate Date validationMode comment wsSignature int String String Description Obligatoire Identifiant de la boutique Date et heure de création de la transaction à rembourser, exprimée au format W3C (Ex : 2012-06-08T08:16:43+00:00). Identifiant de la transaction à rembourser Numéro de séquence de la transaction à rembourser. Vaut "1" pour un paiement unitaire. Prend la valeur du numéro d’échéance dans le cas d’un paiement en plusieurs fois. Contexte de sollicitation de la plateforme de paiement ("TEST", "PRODUCTION") Identifiant de la transaction créée Montant à rembourser en plus petite unité monétaire Devise (Code monnaie ISO 4217, Euro : 978) Date de remise demandée, exprimée au format W3C (Ex : 2012-06-08T08:16:43+00:00). 0 = Automatique, 1 = Manuelle Commentaire « libre » Signature (cf. 5) Le calcul de la signature se fait en prenant les paramètres dans l’ordre suivant : siteId, transactionId, sequenceNumber, ctxMode, newTransactionId, amount, currency, validationMode, comment Cette fonction retourne une réponse du type transactionInfo (cf.4.14). Remarque importante Si la carte est expirée lors de la demande de remboursement, une transaction refusée pour motif carte expirée sera créée. La réponse contiendra les valeurs suivantes : errorCode : 0 transactionStatus : 8 Payzen – Description des webservices v4 47/56 7.8 Duplication d’une transaction (duplicate) Cette fonction permet de créer une nouvelle transaction ayant exactement les mêmes caractéristiques que la transaction qui a servi de base à la duplication. Les transactions pouvant faire l’objet d’un remboursement possède le statut suivant : • Remisé • Expiré • Annulé • Refusé Cette fonction prend en entrée les paramètres suivants : Nom du champ Type siteId String transmissionDate Date transactionId String sequenceNumber Int ctxMode String orderId orderInfo orderInfo2 orderInfo3 amount currency newTransactionId String String String String Long Int String presentationDate Date validationMode comment wsSignature int String String Description Obligatoire Identifiant de la boutique Date et heure de création de la transaction à dupliquer, exprimée au format W3C (Ex : 2012-06-08T08:16:43+00:00). Identifiant de la transaction à dupliquer Numéro de séquence de la transaction à dupliquer. Vaut "1" pour un paiement unitaire. Prend la valeur du numéro d’échéance dans le cas d’un paiement en plusieurs fois. Contexte de sollicitation de la plateforme de paiement ("TEST", "PRODUCTION") Référence de la commande Description libre de la commande Description libre de la commande Description libre de la commande Montant en plus petite unité monétaire Devise (Code monnaie ISO 4217, Euro : 978) Identifiant de la transaction crée Date de remise demandée, exprimée au format W3C (Ex : 2012-06-08T08:16:43+00:00). 0 = Automatique, 1 = Manuelle Commentaire « libre » Signature (cf. 5) Le calcul de la signature se fait en prenant les paramètres dans l’ordre suivant : siteId, transactionId, sequenceNumber, ctxMode, orderId, orderInfo, orderInfo2, orderInfo3, amount, currency, newTransactionId, validationMode, comment Cette fonction retourne une réponse du type transactionInfo (cf.4.14). Payzen – Description des webservices v4 48/56 7.9 Recherche des détails d’une transaction (getInfo) Cette fonction permet d’interroger une transaction pour en connaître ses différents attributs. Cette fonction prend en entrée les paramètres suivants : Nom du champ Type siteId String transmissionDate Date transactionId String sequenceNumber Int ctxMode String wsSignature String Description Obligatoire Identifiant de la boutique Date et heure de création de la transaction à rechercher, exprimée au format W3C (Ex : 2012-06-08T08:16:43+00:00). Identifiant de la transaction à rechercher Numéro de séquence de la transaction à rechercher. Vaut "1" pour un paiement unitaire. Prend la valeur du numéro d’échéance dans le cas d’un paiement en plusieurs fois. Contexte de sollicitation de la plateforme de paiement ("TEST", "PRODUCTION") Signature (cf.5) Le calcul de la signature se fait en prenant les paramètres dans l’ordre suivant : siteId, transactionId, sequenceNumber, ctxMode Cette fonction retourne une réponse du type transactionInfo (cf. 4.14). Payzen – Description des webservices v4 49/56 7.10 Validation d’une transaction (validate) Cette fonction permet d’autoriser la remise en banque d’une transaction à la date de présentation demandée dans le paiement original. Les transactions pouvant faire l’objet d’une validation possèdent l’un des statuts suivants : • • A valider A valider et autoriser Cette fonction prend en entrée les paramètres suivants : Nom du champ Type siteId String transmissionDate Date transactionId String sequenceNumber Int ctxMode String comment wsSignature String String Description Obligatoire Identifiant de la boutique Date et heure de création de la transaction à valider, exprimée au format W3C (Ex : 2012-06-08T08:16:43+00:00). Identifiant de la transaction à valider Numéro de séquence de la transaction à valider. Vaut "1" pour un paiement unitaire. Prend la valeur du numéro d’échéance dans le cas d’un paiement en plusieurs fois. Contexte de sollicitation de la plateforme de paiement ("TEST", "PRODUCTION") Commentaire « libre » Signature (cf. 5) Le calcul de la signature se fait en prenant les paramètres dans l’ordre suivant : siteId, transactionId, sequenceNumber, ctxMode, comment Cette fonction retourne une réponse du type standardResponse (cf.4.28). Payzen – Description des webservices v4 50/56 8. ANNEXES 8.1 Cartes de test 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 - 50005500 00023006 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. __________________________________________________________________________________________ Payzen – Description des webservices v4 51/56 8.2 Exemple d’implémentation en PHP : calcul de signature (méthode create) $hashSign=''; $hashSign= /** paymentCreationInfo.paymentGeneralInfo */ getSignatureValue($createInfo->paymentGeneralInfo->siteId). getSignatureValue($createInfo->paymentGeneralInfo->transactionId). getSignatureValue($createInfo->paymentGeneralInfo->paymentSource). getSignatureValue($createInfo->paymentGeneralInfo->orderId). getSignatureValue($createInfo->paymentGeneralInfo->orderInfo). getSignatureValue($createInfo->paymentGeneralInfo->orderInfo2). getSignatureValue($createInfo->paymentGeneralInfo->orderInfo3). getSignatureValue($createInfo->paymentGeneralInfo->amount). getSignatureValue($createInfo->paymentGeneralInfo->currency). getSignatureValue($createInfo->paymentGeneralInfo->validationMode). /** paymentCreationInfo.cardInfo */ getSignatureValue($createInfo->cardInfo->cardNumber). getSignatureValue($createInfo->cardInfo->cardNetwork). getSignatureValue($createInfo->cardInfo->expiryMonth). getSignatureValue($createInfo->cardInfo->expiryYear). getSignatureValue($createInfo->cardInfo->cvv). getSignatureValue($createInfo->cardInfo->cardIdent). getSignatureValue($createInfo->cardInfo->cardBirthDay). getSignatureValue($createInfo->cardInfo->contractNumber). getSignatureValue($createInfo->cardInfo->paymentOptionCode); /** paymentCreationInfo.threeDsResult */ if (!is_null($createInfo->threeDsResult)){ $hashSign .= getSignatureValue($createInfo->threeDsResult->threeDSBrand). getSignatureValue($createInfo->threeDsResult->threeDSEnrolled). getSignatureValue($createInfo->threeDsResult->threeDSStatus). getSignatureValue($createInfo->threeDsResult->threeDSEci). getSignatureValue($createInfo->threeDsResult->threeDSXid). getSignatureValue($createInfo->threeDsResult->threeDSCavv). getSignatureValue($createInfo->threeDsResult->threeDSCavvAlgorithm); } else{ $hashSign .= "+"; } /** paymentCreationInfo.subPaymentInfo */ if (!is_null($createInfo->subPaymentInfo)){ $hashSign .= getSignatureValue($createInfo->subPaymentInfo->subPaymentType). getSignatureValue($createInfo->subPaymentInfo->subReference). getSignatureValue($createInfo->subPaymentInfo->subPaymentNumber); } else{ $hashSign .= "+"; } /** paymentCreationInfo.customerInfo */ if (!is_null($createInfo->customerInfo)){ Payzen – Description des webservices v4 52/56 $hashSign .= getSignatureValue($createInfo->customerInfo->customerId). getSignatureValue($createInfo->customerInfo->customerTitle). getSignatureValue($createInfo->customerInfo->customerStatus). getSignatureValue($createInfo->customerInfo->customerName). getSignatureValue($createInfo->customerInfo->customerPhone). getSignatureValue($createInfo->customerInfo->customerEmail). getSignatureValue($createInfo->customerInfo->customerAddressNumber). getSignatureValue($createInfo->customerInfo->customerAddress). getSignatureValue($createInfo->customerInfo->customerDistrict). getSignatureValue($createInfo->customerInfo->customerZip). getSignatureValue($createInfo->customerInfo->customerCity). getSignatureValue($createInfo->customerInfo->customerCountry). getSignatureValue($createInfo->customerInfo->language). getSignatureValue($createInfo->customerInfo->customerIP). getSignatureValue($createInfo->customerInfo->customerSendEmail). getSignatureValue($createInfo->customerInfo->customerCellPhone). getSignatureValue($createInfo->customerInfo->extInfo); } else{ $hashSign .= "+"; } /** paymentCreationInfo.shippingInfo */ if (!is_null($createInfo->shippingInfo)){ $hashSign .= getSignatureValue($createInfo->shippingInfo->shippingCity). getSignatureValue($createInfo->shippingInfo->shippingCountry). getSignatureValue($createInfo->shippingInfo->shippingDeliveryCompanyName). getSignatureValue($createInfo->shippingInfo->shippingName). getSignatureValue($createInfo->shippingInfo->shippingPhone). getSignatureValue($createInfo->shippingInfo->shippingSpeed). getSignatureValue($createInfo->shippingInfo->shippingState). getSignatureValue($createInfo->shippingInfo->shippingStatus). getSignatureValue($createInfo->shippingInfo->shippingStreetNumber). getSignatureValue($createInfo->shippingInfo->shippingStreet). getSignatureValue($createInfo->shippingInfo->shippingStreet2). getSignatureValue($createInfo->shippingInfo->shippingDistrict). getSignatureValue($createInfo->shippingInfo->shippingType). getSignatureValue($createInfo->shippingInfo->shippingZipCode); } else{ $hashSign .= "+"; } /** paymentCreationInfo.extraInfo */ $hashSign .= getSignatureValue($createInfo->extraInfo->ctxMode). getSignatureValue($createInfo->extraInfo->browserUserAgent). getSignatureValue($createInfo->extraInfo->browserAccept); /** Ajout du Certificat en fin de chaine */ $hashSign .= $key; Payzen – Description des webservices v4 53/56 Contenu de la fonction getSignatureValue : function getSignatureValue($value){ $signatureValue=''; /** * boolean */ if (is_bool($value)){ $signatureValue = ($value ? '1':'0').'+'; } /** * extInfo */ elseif(get_class($value)=='extInfo'){ $signatureValue.= $value->key.'+'.$value->value.'+'; } /** * array */ elseif(is_array($value)){ foreach($value as $name=>$val) { if(is_object($val)) { $signatureValue .= getSignatureValue($val); } } } else { $signatureValue .= $value . '+'; } return $signatureValue; } Payzen – Description des webservices v4 54/56 8.3 Exemples de cinématique de paiement avec gestion des cas d’échec Livraison différée de marchandise Demande de paiement (Appel ws create) Analyse de la réponse Paiement accepté (transactionStatus = 1 : « A valider »): Enregistrement du résultat en BDD Affichage du message de succès pour l’acheteur. Paiement refusé (transactionStatus = 8 : « Refusé »): Enregistrement du résultat en BDD Affichage du message d’échec pour l’acheteur. Proposer de repasser la commande ou le paiement. Absence de réponse (cas du timeout) Mettre à jour la commande dans un statut « timeout » Afficher un message de traitement du paiement en cours (pour cause de ralentissement) indiquant que le site marchand reviendra rapidement vers l’acheteur positivement ou négativement lorsque le paiement sera finalisé. Si le site marchand décide de considérer ce paiement comme accepté, il faudra toutefois assumer que l’acheteur peut ensuite recevoir un email lui indiquant que finalement le paiement a été refusé. Préparation de la commande et validation du paiement (Appel ws validate) Analyse de la réponse Validation acceptée (errorCode= 0 et transactionStatus= 4) Déclencher l’expédition du colis. Absence de réponse (cas du timeout) Mette à jour la commande dans un statut timeout Mettre le colis en attente Exécution d’un batch en différé sur l’ensemble des commandes dans l’état « timeout » : Appel ws getInfo si transactionStatus = 1 « A valider » : mettre à jour le résultat en BDD, déclencher de la préparation de la commande si transactionStatus = 4 « En attente de remise » : mettre à jour le résultat en BDD, déclencher l’expédition du colis si transactionStatus = 8 « Refusée » Contacter le client par mail (ou téléphone) pour l’avertir du refus de paiement. Le batch pourra idéalement être programmé toutes les 10 ou 15 min. Payzen – Description des webservices v4 55/56 Vente de biens immatériels type VOD Demande de paiement (Appel ws create) Analyse de la réponse Paiement accepté (transactionStatus = 1 : « A valider ») : Enregistrement de la commande dans un statut « A valider » Affichage du message de succès pour l’acheteur. Paiement refusé (transactionStatus = 8 : « Refusé »): Enregistrement du résultat Affichage du message d’échec pour l’acheteur. Proposer de repasser la commande ou le paiement. Absence de réponse (cas du timeout) : Mettre à jour la commande dans un statut « refusé » Afficher un message de refus Proposer de repasser la commande ou le paiement En différé, exécuter un batch sur l’ensemble des commandes dans l’état « A valider » qui va procéder à la validation du paiement et au changement de la date de remise à J : Appel ws getInfo : Analyse de la réponse Si transactionStatus = 1 : « A valider » : Appel ws ModifyAndValidate Réponse valide (errorCode 0) : - mettre à jour la commande dans l’état « Payée » Absence de réponse (cas du timeout) - laisser la commande dans l’état « A valider » Si transactionStatus = 4 : « En attente de remise » : Mise à jour de l’état de la commande. Absence de réponse Laisser le statut « A valider ». Remarque : L’état 7 (transaction expirée) ne devrait pas arriver. Il voudrait dire que vous n’avez pas eu le temps de faire la validation du paiement avant le batch de remise en banque. Pour éviter cette situation, il est recommandé de travailler en validation manuelle avec une date de capture au moins à J+1). Payzen – Description des webservices v4 56/56