Payzen –
Description des webservices v4 1/56
Définition des Webservices V4
Payzen 1.27.8
Version 1.4
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 3/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
1. P RESENTATION
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. N OTIONS 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 5/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.
3. D ESCRIPTION DES CODES D ’ ERREURS
TransactionInfo :
Error
Code Type Error
Code Type
0 Action réalisée avec succès 62 Paramètre ‘orderInfo2’ invalide 1 Action non autorisée. 63 Paramètre ‘orderInfo3’ invalide 2 Transaction non trouvée 64 Paramètre ‘paymentSource’ invalide 3 Transaction pas dans le bon état 65 Paramètre ‘cardNumber’ invalide 4 Transaction existe déjà 66 Paramètre ‘contractNumber’ invalide
5 Mauvaise signature 67 Paramètre ‘customerId’ invalide
6 Mauvaise date 68 Paramètre ‘customerTitle’ invalide
10 Mauvais montant 69 Paramètre ‘customerName’ invalide
11 Mauvaise devise 70 Paramètre ‘customerPhone’ invalide
12 Type de carte inconnu 71 Paramètre ‘customerMail’ invalide 13 Paramètre ‘date d’expiration’ invalide 72 Paramètre ‘customerAddress’ invalide 14 Paramètre ‘cvv’ invalide 73 Paramètre ‘customerZipCode’ invalide
15 Contrat inconnu 74 Paramètre ‘customerCity’ invalide
16 Paramètre ‘Numéro de carte’ invalide 75 Paramètre ‘customerCountry’ invalide 17 Identifiant non trouvé 76 Paramètre ‘customerLanguage’ invalide 18 Identifiant non valide (Résilié, …) 77 Paramètre ‘customerIp’ invalide
19 Subscription non trouvée 78 Paramètre ‘customerSendMail’ invalide 20 Subscription non valide 79 Paramètre ‘customerMobilePhone’ invalide 21 Identifiant déjà existant 80 Paramètre ‘subPaiementType’ invalide 22 Création d’identifiant refusé 81 Paramètre ‘subReference’ invalide 27 Montant non autorisé 82 Paramètre ‘initialAmount’ invalide
40 Plage non trouvée 83 Paramètre ‘occInitialAMount’ invalide
50 Paramètre ‘siteId’ invalide 84 Paramètre ‘effectDate’ invalide 51 Paramètre ‘transmissionDate’ invalide 85 Paramètre ‘state’ invalide 52 Paramètre ‘transactionId’ invalide 90 Paramètre ‘enrolled’ invalide 53 Paramètre ‘ctxMode’ invalide 91 Paramètre ‘authStatus’ invalide 54 Paramètre ‘comment’ invalide 92 Paramètre ‘eci’ invalide 55 Paramètre ‘AutoNb’ invalide 93 Paramètre ‘xid’ invalide 56 Paramètre ‘AutoDate’ invalide 94 Paramètre ‘cavv’ invalide 57 Paramètre ‘captureDate’ invalide 95 Paramètre ‘cavvAlgo’ invalide 58 Paramètre ‘newTransactionId’ invalide 96 Paramètre ‘brand’ invalide 59 Paramètre ‘validationMode’ invalide 98 Paramètre ‘requestId’ invalide 60 Paramètre ‘orderId’ invalide 99 Autre erreur
61 Paramètre ‘orderInfo1’ invalide
veResPAReqInfo :
Error
Code Description Error
Code Description
0 Action réalisée avec succès 9 Erreur technique
1 Action non autorisée 10 Mauvais paramètres
2 Mauvaise signature 11 Format de date incorrect
3 Aucune brand localisée 12 3D Secure désactivé
4 Erreur lors de la détermination de la plage de la carte
13 Identifiant non trouvé
5 Aucun contrat adéquat trouvé 14 PAN non trouvé
6 Spécification du contrat ambigüe, plusieurs sont disponibles
98 Erreur de traitement sur l’ACS
7 Marchand non enrôlé 99 Erreur inconnue
8 Signature de l’ACS invalide
Payzen –
Description des webservices v4 7/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.
4. D ESCRIPTION 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 Type Description Obligatoire
paymentGeneralInfo createPaymentGeneralInfo Cf. 4.2
cardInfo createCardInfo Cf. 4.3
subPaymentInfo createSubPaymentInfo Cf. 4.4
customerInfo createCustomerInfo Cf. 4.5
shippingInfo createShippingInfo Cf. 4.6
extraInfo createExtraInfo Cf. 4.7
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 9/56
4.2 createPaymentGeneralInfo
Ce champ décrit les paramètres relatifs à la transaction.
Nom du champ Type Description Obligatoire
siteId string Identifiant de la boutique
transmissionDate dateTime
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) transactionId string
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).
paymentSource string
Source du paiement:
- EC: Commerce Électronique
- MOTO : commande par mail ou téléphone - CC : Centre d’appel
- OTHER : autre canal de vente 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 string Référence de la commande.
orderInfo string
Description libre de la commande.
orderInfo2 string orderInfo3 string
amount long Montant de la transaction exprimé dans la plus petite unité monétaire (en centimes pour Euro)
currency int Code de la devise suivant la norme ISO 4217, (978 pour EURO)
presentationDate dateTime
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
4.3 createCardInfo
Ce type décrit les détails de la carte de crédit :
Nom du champ Type Description Obligatoire
cardNumber string Numéro de carte
cardNetwork string Réseau de la carte ("AMEX", "CB", "MASTERCARD",
"VISA", "MAESTRO", "E-CARTEBLEUE", "JCB") expiryMonth int Mois d’expiration de la carte, entre 1 et 12 expiryYear int Année d’expiration de la carte sur 4 digits ex :
2012
cvv string
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.
cardIdent string
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)
cardBirthDay dateTime Date de naissance du porteur
contractNumber string
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.
paymentOptionCode string Réservé à un usage spécifique.
Ne pas renseigner
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 11/56
4.4 createSubPaymentInfo
Ce type est réservé à un usage futur. Il ne doit pas être valorisé :
Nom du champ Type Description Obligatoire
subPaymentType int
Ne pas renseigner
subReference string
subPaymentNumber int
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 Type Description Obligatoire
customerId string Référence client
customerTitle string Civilité
customerStatus custStatus Cf. 4.8
customerName string Nom du client
customerPhone string Numéro de téléphone
customerEmail string Adresse de courrier électronique customerAddressNumber string Numéro de rue
customerAddress string Adresse
customerDistrict string Quartier
customerZip string Code postal
customerCity string Ville
customerCountry string Pays
language string Langue du client (norme ISO 639-1 sur 2 caractères).
customerIP string Adresse IP du lient
customerSendEmail boolean
Envoi d’un email de confirmation de paiement à l’internaute.
0= Non ; 1=Oui.
customerCellPhone string Téléphone mobile du client
extInfo Array
extInfo
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
4.6 createShippingInfo
Ce type décrit les informations de livraison.
Nom du champ Type Description Obligatoire
shippingStatus custStatus Cf.4.8
shippingName string Nom
shippingPhone string Numéro de téléphone
shippingStreetNumber string Numéro de la rue
shippingStreet string Adresse de livraison
shippingStreet2 string Deuxième ligne d’adresse de livraison
shippingDistrict string Quartier
shippingZipCode string Code postal
shippingCity string Ville de livraison
shippingState string Etat de livraison
shippingCountry string Pays de livraison
shippingDeliveryCompanyName string Informations sur le transporteur shippingSpeed deliverySpeed Mode de livraison (cf.4.9) shippingType deliveryType 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 Description Obligatoire
ctxMode string Contexte de sollicitation de la plateforme de paiement.
("TEST", "PRODUCTION")
browserUserAgent string Header « User-Agent » du navigateur du client browserAccept string 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 13/56
4.8 custStatus
Ce type décrit le type de client. Les valeurs possibles sont définies ci-dessous :
Valeur Description
PRIVATE Particulier
COMPANY Entreprise
4.9 deliverySpeed
Ce type décrit le mode de livraison. Les valeurs possibles sont définies ci-dessous :
Valeur Description
STANDARD Livraison Standard
EXPRESS 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 Retrait de la marchandise en magasin RELAY_POINT Utilisation d'un réseau de points-retrait tiers :
(type Kiala, Alveol, etc.)
RECLAIM_IN_STATION Retrait dans un aéroport, une gare ou une agence de voyage PACKAGE_DELIVERY_COMPANY Transporteur (La poste, Colissimo, UPS, DHL…)
ETICKET 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 Valeur Description
key string Nom de la donnée
value string 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
4.12 createWithThreeDSResponse
Ce type décrit la réponse envoyée lors d’un appel à la méthode createWithThreeDS.
Nom du champ Type Description
errorCode int Code d’erreur cf. 3
extendedErrorCode string Détail de l’erreur si le champ errorCode est différent de 0
timestamp long Timestamp permettant la génération de signature unique
signature string Signature de la Réponse (cf. ci-dessous)
veResPAReqInfo veResPAReqInfo
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é.
transactionInfo transactionInfo Descriptif de la transaction. Cf. 4.14 Ne sera pas envoyé si la carte est enrôlée.
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 int Code d’erreur cf. 3
errorDetail string Détail de l’erreur si le champ errorCode est différent de 0 signature string Signature de la Réponse (cf. ci-dessous)
timestamp long Timestamp permettant la génération de signature unique threeDSAcctId String certificat renvoyé par le Directory Server
threeDSAcsUrl String Url de l’ACS à contacter threeDSBrand String Réseau de carte
threeDSEncodedPareq String message PAReq encodé, prêt à envoyer à l’ACS threeDSEnrolled String Statut d’enrôlement du porteur :
• « Y » : Enrôlé
threeDSRequestId String 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 15/56
4.14 transactionInfo
Ce type décrit une transaction :
Nom du champ Type Description
errorCode int Code d’erreur (cf.3)
extendedErrorCode string Détail de l’erreur si le champ errorCode est différent de 0
transactionStatus int Code du statut de la transaction (cf. 6)
timestamp long Timestamp permettant la génération de
signature unique
signature string Signature de la transaction
transactionStatusLabel String Libellé su statut de la transaction (cf.6) paymentGeneralInfo transactionPaymentGeneralInfo Cf. 4.15
cardInfo transactionCardInfo Cf. 4.16
threeDSInfo transactionThreeDSInfo Cf. 4.17 authorizationInfo transactionAuthorizationInfo Cf. 4.18
markInfo transactionMarkInfo Cf. 4.19
warrantyDetailsInfo transactionWarrantyDetailsInfo Cf. 4.20 captureInfo transactionCaptureInfo Cf. 4.22 customerInfo transactionCustomerInfo Cf. 4.23 shippingInfo transactionShippingInfo Cf. 4.24
extraInfo transactionExtraInfo Cf. 4.25
paymentOptionInfo transactionPaymentOptionInfo Réservé à un usage spécifique boletoInfo transactionBoletoExtraInfo Réserve à un usage spécifique
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
4.15 transactionPaymentGeneralInfo
Ce type décrit les informations générales d’une transaction :
Nom du champ Type Description
siteId string Identifiant de la boutique
paymentSource string
Source du paiement :
- "E_COMMERCE" : e-Commerce
- "MAIL_OR_TELEPHONE" : mail ou téléphone - "CALL_CENTER" : centre d’appel
- "OTHER" : autres
orderId string Référence de la commande
orderInfo string Description libre de la commande orderInfo2 string Description libre de la commande orderInfo3 string Description libre de la commande transmissionDate dateTime Date et heure de la transaction transactionId string Identifiant de transaction
sequenceNumber int Numéro de séquence de la transaction
amount string Montant actuel de la transaction en plus petite unité monétaire initialAmount string Montant initial (avant modification éventuelle) en plus petite
unité monétaire
currency int Code de la devise (Code monnaie ISO 4217, Euro : 978) effectiveAmount string Montant en contre-valeur en plus petite unité monétaire effectiveCurrency int Devise en contre-valeur (Code monnaie ISO 4217, Euro : 978) presentationDate dateTime Date de remise demandée
type int 0 = DEBIT, 1 = CREDIT
multiplePayment int Paiement en plusieurs fois (Non = 0, Oui = 1) effectiveCreationDate dateTime Date réelle d’enregistrement de la transaction
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 17/56
4.16 transactionCardInfo
Ce type décrit le détail de la carte:
Nom du champ Type Description
cardNumber string Numéro de carte masqué cardNetwork string Réseau de la carte cardBrand string Brand de la carte
cardCountry long Code Pays du pays d’émission de la carte (Code numérique ISO 3166-1 ex : France=250)
cardProductCode string Code produit de la carte
cardBankCode string Code banque de la banque émettrice expiryMonth int Mois d’expiration entre 1 et 12
expiryYear int Année d’expiration sur 4 chiffres contractNumber string 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
4.17 transactionThreeDSInfo
Ce champ décrit les détails de l’authentification 3D-Secure :
Nom du champ Type Description
threeDSTransactionCondition string
"COND_3D_SUCCESS", "COND_3D_FAILURE",
"COND_3D_ERROR", "COND_3D_NOTENROLLED",
"COND_3D_ATTEMPT", "COND_SSL"
Voir détails ci-dessous
threeDSEnrolled string
Statut enrôlement porteur :
• "Y" : Enrôlé
• "N" : Non enrôlé
• "U" : Inconnu
threeDSStatus string
Statut authentification du porteur:
• "Y" : Authentifié 3DS
• "N" : Erreur Authentification
• "U" : Authentification impossible
• "A" : Essai d’authentification threeDSEci string Indicateur de commerce Electronique
threeDSXid string Numéro de transaction 3DS
threeDSCavvAlgorithm string
Algorithme de vérification de l’authentification du porteur (CAVV) :
"0" : HMAC
"1" : CVV
"2" : CVV_ATN
"3" : Mastercard SPA threeDSCavv string Certificat de l’ACS
threeDSSignValid string Signature de l’authentification 3DS
threeDSBrand string Brand de la carte ("VISA" ou "MASTERCARD") Détails threeDSTransactionCondition:
Valeur Description
"COND_3D_SUCCESS" Le commerçant et le porteur de la carte sont inscrits au programme 3-D Secure et le porteur s’est authentifié correctement.
" COND_3D_FAILURE"
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)
" COND_3D_ERROR"
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).
" COND_3D_NOTENROLLED" Le commerçant participe au programme 3-D Secure mais la carte du porteur n’est pas enrôlée.
" COND_3D_ATTEMPT"
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).
"COND_SSL" 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 19/56
4.18 transactionAuthorizationDSInfo
Ce type décrit le détail de la demande d’autorisation:
Nom du champ Type Description
authMode string
"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
authResult int Résultat de la demande d’autorisation dans le cas où authMode vaut FULL
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
Liste des valeurs possibles pour les champs authResult et markResult.
Valeur Description
00 transaction approuvée ou traitée avec succès 02 contacter l’émetteur de carte
03 accepteur invalide 04 conserver la carte 05 ne pas honorer
07 conserver la carte, conditions spéciales 08 approuver après identification
12 transaction invalide 13 montant invalide
14 numéro de porteur invalide 15 Emetteur de carte inconnu 17 Annulation client
19 Répéter la transaction ultérieurement
20 Réponse erronée (erreur dans le domaine serveur) 24 Mise à jour de fichier non supportée
25 Impossible de localiser l’enregistrement dans le fichier 26 Enregistrement dupliqué, ancien enregistrement remplacé 27 Erreur en « edit » sur champ de lise à jour fichier
28 Accès interdit au fichier 29 Mise à jour impossible 30 erreur de format
31 identifiant de l’organisme acquéreur inconnu 33 date de validité de la carte dépassée
34 suspicion de fraude
38 Date de validité de la carte dépassée 41 carte perdue
43 carte volée
51 provision insuffisante ou crédit dépassé 54 date de validité de la carte dépassée 55 Code confidentiel erroné
56 carte absente du fichier
57 transaction non permise à ce porteur 58 transaction interdite au terminal 59 suspicion de fraude
60 l’accepteur de carte doit contacter l’acquéreur 61 montant de retrait hors limite
63 règles de sécurité non respectées
68 réponse non parvenue ou reçue trop tard 75 Nombre d’essais code confidentiel dépassé
76 Porteur déjà en opposition, ancien enregistrement conservé 90 arrêt momentané du système
91 émetteur de cartes inaccessible 94 transaction dupliquée
96 mauvais fonctionnement du système
97 échéance de la temporisation de surveillance globale 98 serveur indisponible routage réseau demandé à nouveau 99 incident domaine initiateur
Payzen –
Description des webservices v4 21/56
4.19 transactionMarkInfo
Ce type décrit le détail de la demande d’empreinte :
Nom du champ Type Description
markAmount long
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.
markCurrency int
Code de la monnaie utilisée pour vérifier la validité de la carte (suivant la norme ISO 4217).
Sa valeur est 100.
markDate dateTime Date et heure de la demande d’autorisation réalisée dans le cas où transactionAuthorizationInfo.authmode vaut MARK markNb string Numéro d’autorisation de la demande d’autorisation dans
le cas où transactionAuthorizationInfo.authmode vaut MARK markResult int Résultat de la demande d’autorisation réalisée l dans le cas
où transactionAuthorizationInfo.authmode vaut MARK markCVV2_CVC2 string 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 Type Description
paymentError int Complément d’information en cas d’erreur technique.
warrantlyResult string Garantie de paiement (YES / NO)
localControl Array
localControl Tableau des résultats des différents contrôles locaux
litige boolean 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
4.21 localControl
Ce type décrit un contrôle local (nom du contrôle et résultat).
Nom du champ Type Description
name string Nom du contrôle
result boolean 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
"CARD" Carte située dans une liste grise
"COUNTRY" Pays inclus dans la liste grise de la boutique ou absent de la liste blanche
"IPADDR" Adresse IP située dans une liste grise
"AMOUNT" 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
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 23/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 Type Description
captureDate dateTime Date et heure de remise
captureNumber int Numéro de remise
rapprochementStatut int Statut de rapprochement bancaire de la transaction.
refundAmount long Montant ayant déjà fait l’objet d’un remboursement en plus petite unité monétaire
refundCurrency int 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 Type Description
customerId string Référence client
customerTitle string Civilité
customerStatus custStatus Cf.4.8
customerName string Nom du client
customerPhone string Numéro de téléphone
customerEmail string Adresse de courrier électronique customerAddressNumber string Numéro de la rue
customerAddress string Numéro de rue
customerDistrict string Quartier
customerZip string Code postal
customerCity string Ville
customerCountry string Pays
language string Langue du client (norme ISO 639-1 sur 2 caractères).
customerIP string Adresse IP du lient
customerCellPhone string Téléphone mobile du client
extInfo Array
extInfo 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
4.24 transactionShippingInfo
Ce type décrit les informations de livraison :
Nom du champ Type Description
shippingCity string Ville de livraison
shippingCountry string Pays de livraison
shippingDeliveryCompanyName string Informations sur le transporteur
shippingName string Nom
shippingPhone string Numéro de téléphone
shippingSpeed deliverySpeed Mode de livraison (cf.4.9)
shippingState string Etat de livraison
shippingStatus custStatus Cf. 4.8
shippingStreetNumber string Numéro de la rue
shippingStreet string Adresse de livraison
shippingStreet2 string Deuxième ligne d’adresse de livraison
shippingDistrict string Quartier
shippingType deliveryType Méthode de livraison (cf.4.10)
shippingZipCode string 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 Type Description
ctxMode string 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 25/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 Type Description Obligatoire
paymentGeneralInfo createPaymentGeneralInfo Cf. 4.2
cardInfo createCardInfo Cf. 4.3
threeDsResult threeDsResult Cf. 4.27
subPaymentInfo createSubPaymentInfo Cf. 4.4
customerInfo createCustomerInfo Cf. 4.5
shippingInfo createShippingInfo Cf. 4.6
extraInfo createExtraInfo Cf. 4.7
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 Description Obligatoire
threeDSBrand string Brand de la carte ("VISA" ou "MASTERCARD") threeDSEnrolled string
Statut enrôlement porteur :
"Y" : Enrôlé
"N" : Non enrôlé
"U" : Inconnu
threeDSStatus string
Statut authentification du porteur:
"Y" : Authentifié 3DS
"N" : Erreur Authentification
"U" : Authentification impossible
"A" : Essai d’authentification threeDSEci string Indicateur de commerce Electronique threeDSXid string Numéro de transaction 3DS
threeDSCavv string Certificat de l’ACS
threeDSCavvAlgorithm string
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.
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 Type Description
errorCode int Code d’erreur (cf. 3)
extendedErrorCode String Précision sur le code d’erreur transactionStatus int Statut de la transaction (cf. 6)
timestamp long Timestamp permettant la génération de signature unique signature String 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 27/56
5. S IGNATURE
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.
______________________________________________________________________________________________
6. S TATUT D ’ UNE TRANSACTION
Les différents statuts de la transaction (transactionStatus) peuvent être :
Valeur transactionStatus transactionStatusLabel
"0" Initial (en traitement)
Réservé à un usage spécifique "INITIAL"
"1"
A valider :
Cas d’un paiement créé en validation manuelle et pour lequel l’autorisation a été acceptée.
"AUTHORISED_TO_VALIDATE"
"2"
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é.
" REFUSED "
"3"
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.
"WAITING_AUTHORISATION_TO_VALIDATE"
"4"
En attente de remise :
Cas d’un paiement accepté, validé, et dont la date de présentation est inférieure à 6 jours.
"AUTHORISED"
"5"
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.
"WAITING_AUTHORISATION"
"6"
Remisée :
Cas d’une transaction acceptée et remise en banque.
"CAPTURED"
"7"
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.
"EXPIRED"
"8"
Refusé :
Cas d’un paiement refusé quel que soit le motif (demande d’autorisation, contrôles locaux etc...)
" REFUSED "
"9"
Annulé :
Cas d’un paiement annulé par le marchand depuis le BO ou via une requête cancel
"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 29/56
7. D ESCRIPTION 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.
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 31/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 Type Description Obligatoire
createInfo createPaymentInfo Cf. 4.1
wsSignature String 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
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 33/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>
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 Description Obligatoire
PaReq String Message codé, retourné par l’appel de la méthode sendVEReqAndBuildPaReqTx
TermUrl String URL de retour dans laquelle sera analysé le retour de l’authentification 3-D Secure
MD String
‘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/vads-
payment/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
______________________________________________________________________________________________