Difference between revisions of "Connecteur JSON"
(→Champs optionnels relatifs au panier) |
(→Analyser la réponse de paiement) |
||
Line 8,441: | Line 8,441: | ||
</td> | </td> | ||
</tr> | </tr> | ||
+ | |||
+ | <td width="141"> | ||
+ | <strong>Repli VADS</strong> | ||
+ | </td> | ||
+ | <td width="225"> | ||
+ | responseCode = 05 | ||
+ | acquirerResponseCode = A1 | ||
+ | </td> | ||
+ | <td width="229"> | ||
+ | Le paiement a été refusé par l'acquéreur car il manque les données 3-D Secure dans la demande d'autorisation. | ||
+ | Veuillez retenter le paiement avec une cinématique 3-D Secure. | ||
+ | </td> | ||
+ | </tr> | ||
+ | |||
<tr> | <tr> | ||
<td width="141"> | <td width="141"> | ||
Line 8,484: | Line 8,498: | ||
</table> | </table> | ||
+ | |||
=== Etape 3: Tester sur l’environnement de test=== | === Etape 3: Tester sur l’environnement de test=== | ||
Revision as of 18:00, 6 September 2019
Contents
- 1 Introduction
- 2 Comprendre le paiement avec Mercanet Paypage JSON
- 3 Démarrer avec Mercanet Paypage JSON en 5 étapes
- 3.1 Etape 1: Inscrire la boutique en production
- 3.2 Etape 2: Effectuer un paiement
- 3.2.1 Générer la requête de paiement
- 3.2.2 Exemple de formulaire de redirection vers PayPage
- 3.2.3 Traiter les erreurs lors de l’initialisation du paiement
- 3.2.4 Renseigner les champs de la requête
- 3.2.4.1 Champs génériques
- 3.2.4.2 Champs optionnels relatifs à la fraude
- 3.2.4.3 Champ optionnel relatif aux pages de paiement
- 3.2.4.4 Champs optionnels relatifs à l’authentification du porteur
- 3.2.4.5 Champs optionnels relatifs aux moyens de paiement
- 3.2.4.6 Champs optionnels relatifs au paiement échelonné
- 3.2.4.7 Champs optionnel relatifs à l’adresse de facturation du client
- 3.2.4.8 Champs optionnels relatifs à l’adresse du client
- 3.2.4.9 Champs optionnels relatifs à l’adresse de livraison du client
- 3.2.4.10 Champs optionnels relatifs aux données du titulaire de la carte
- 3.2.4.11 Champs optionnels relatifs au panier
- 3.2.4.12 Champs optionnels relatifs au transactionId Mercanet 1.0
- 3.2.4.13 Champs optionnels relatifs à la gestion des risques
- 3.2.4.14 Champs optionnels relatifs aux données vendeurs (cas des marketplace)
- 3.2.4.15 Champs optionnels relatifs à AMEX-EA
- 3.2.5 Paramétrer la requête de paiement
- 3.2.5.1 Affichage dynamique des moyens de paiement
- 3.2.5.2 Affichage du ticket par Mercanet
- 3.2.5.3 Canal de paiement
- 3.2.5.4 Paiement en fin de journée
- 3.2.5.5 Paiement différé
- 3.2.5.6 Paiement à l’expédition
- 3.2.5.7 Paiement échelonné
- 3.2.5.8 Paiement immédiat
- 3.2.5.9 Acceptation multidevises
- 3.2.5.10 Règlement en devises
- 3.2.5.11 Conversion dynamique des devises (DCC)
- 3.2.5.12 Débrayage dynamique du 3D Secure
- 3.2.5.13 Débrayage 3D Secure pour paiement Oneclick
- 3.2.5.14 Inscription et paiement Oneclick
- 3.2.5.15 Prestataire agissant pour le compte d’un commerçant
- 3.2.6 Traiter la réponse de paiement
- 3.2.6.1 Renseigner l’URL de la réponse manuelle
- 3.2.6.2 Renseigner l’URL de la réponse automatique
- 3.2.6.3 Résoudre les problèmes de réception des réponses
- 3.2.6.4 Récupérer les champs des réponses
- 3.2.6.5 Champs optionnels relatifs aux contrôles de fraude
- 3.2.6.6 Syntaxe des Listes d’objets complexes dans les réponses
- 3.2.7 Analyser la réponse de paiement
- 3.3 Etape 3: Tester sur l’environnement de test
- 3.4 Etape 4: Valider le passage en production
- 3.5 Etape 5: Démarrer en production
Introduction
Mercanet est une solution de paiement e-commerce multicanale sécurisée conforme à la norme PCI DSS. Elle permet à tout commerçant d’accepter et de gérer des transactions de paiement en prenant en compte les règles métiers liées à son activité (paiement à la livraison, paiement différé, paiement récurrent, paiement fractionné, …). L’objectif du présent document est d’expliquer la mise en œuvre de la solution Mercanet Paypage JSON jusqu’au démarrage en production.
A qui s’adresse ce document
Ce document est destiné aux commerçants qui souhaitent souscrire à l’offre Mercanet et utiliser un connecteur fondé sur les échanges HTTPS en mode JSON entre leur site Web et les serveurs de paiement Mercanet Paypage JSON. C’est un guide d’implémentation qui s’adresse à votre l’équipe technique. Pour avoir une vue d’ensemble de la solution Mercanet, nous vous conseillons de consulter les documents suivants:
Prérequis
Une connaissance élémentaire des standards relatifs aux langages de programmation Web pratiqués aujourd’hui, tels que Java, PHP ou .Net, est nécessaire pour développer la connexion à Mercanet Paypage JSON.
Remarque
Tous les exemples de code de ce document sont fournis à titre d’exemple, il convient de les adapter à votre site Web afin qu’ils soient pleinement exploitables. |
---|
Gestion de la clé secrète
Lors de votre inscription, BNP Paribas met à disposition sur l’extranet Mercanet Download, une clé secrète qui permet de sécuriser les échanges entre votre site et le serveur Mercanet. Vous êtes responsable de sa conservation et devez prendre toutes les mesures pour:
- en restreindre l’accès,
- la sauvegarder de manière chiffrée,
- ne jamais la copier sur un disque non sécurisé,
- ne jamais l’envoyer (e-mail, courrier) de manière non sécurisée.
La compromission de la clé secrète et son utilisation par un tiers malveillant perturberait le fonctionnement normal de votre boutique, et pourrait notamment générer des transactions et des opérations de caisse injustifiées (des remboursements par exemple). En cas de compromission d’une clé secrète, vous êtes tenu d’en demander au plus vite la révocation puis le renouvellement via l’extranet Mercanet Download.
Remarque
C’est la même clé secrète qui est utilisée sur les différents connecteurs Paypage, Office et Walletpage. |
---|
Contacter l’assistance technique
[Pour toute question technique ou demande d'assistance, cliquer ici pour plus d'informations.]
Comprendre le paiement avec Mercanet Paypage JSON
Le principe général d’un processus de paiement est le suivant:
- Lorsque le client procède au paiement, une requête de paiement doit être envoyée au connecteur Mercanet. BNP Paribas vous fournit l’URL de ce connecteur. La requête est alors vérifiée, et chiffrée si elle est valable (elle est nommée RedirectionData dans le système). La requête est envoyée au moyen d’un formulaire en mode POST via HTTPS. Toute autre solution capable d’envoyer une requête de cette nature fonctionne également.
- Le site du commerçant redirige l’application appelante vers les pages de paiement Mercanet. Le client doit saisir les informations du moyen de paiement pour que le serveur de paiement Mercanet prenne en charge la transaction. Il convient de noter que les détails du paiement peuvent être saisis directement sur le serveur qui propose le moyen de paiement (par exempledans le cas de PayPal ou d’un mandat Sepa). À la fin du processus de paiement, qu’il soit réussi ou non, deux réponses sont créées et envoyées à l’adresse URL précisée lors du 1er flux.
Il y a deux notifications de réponses indépendantes: - Les réponses manuelles sont envoyées sous format HTTP(S) POST par le serveur de paiement à l’URL de réponse manuelle. Cette URL est précisée dans la requête de paiement et est utilisée lorsque le client clique le bouton «Continuer» de la page de paiement. Elle est la page de destination vers laquelle le client est redirigé à la fin du paiement. Comme il n’y a aucune garantie que le client clique sur ce bouton, vous n’avez aucune garantie de recevoir la réponse manuelle.
- Les réponses automatiques sont envoyées indépendamment des réponses manuelles. Elles utilisent également les requêtes HTTP(S) POST envoyées par les serveurs de paiement Mercanet mais cette fois-ci moyennant l’URL de réponse automatique précisée dans la requête de paiement. Cela signifie que vous recevez la réponse dès que le paiement est effectué dans les pages de paiement Mercanet.
Remarque
Si le paiement a échoué, et dès que le client est redirigé vers votre site Web, il n’est plus possible de revenir aux pages de paiement Mercanet pour tenter de payer à nouveau ou pour corriger les données de carte. Le rôle de votre site Web est d’initialiser une nouvelle requête de paiement, en commençant par l’appel au connecteur Mercanet Paypage. |
---|
Démarrer avec Mercanet Paypage JSON en 5 étapes
Etape 1: Inscrire la boutique en production
Afin d’inscrire votre boutique en production, vous devez remplir le formulaire d’inscription envoyé par BNP Paribas et le retourner à ce dernier.
Lors de la saisie du formulaire, vous désignez un contact administratif et un contact technique afin que BNP Paribas puisse vous communiquer les informations nécessaires pour démarrer votre boutique.
BNP Paribas procède alors à l’enregistrement de la boutique et vous retourne votre identifiant commerçant (MerchantId) ainsi que vos identifiants et mots de passe Mercanet Download (récupération de la clé secrète) et Mercanet Extranet (gestion de caisse) par mail.
Remarque
Pour Mercanet Extranet l’identifiant et le mot de passe sont envoyés au contact administratif. Pour Mercanet Download, l’identifiant est envoyé au contact administratif et le mot de passe au contact technique.
|
---|
Etape 2: Effectuer un paiement
La requête de paiement consiste en un appel d’un service Web REST (JSON) au connecteur de la passerelle de paiement.
Générer la requête de paiement
Tous les champs nécessaires pour la transaction (voir les détails dans le chapitre «Renseigner les champs de la requête ») doivent être fournis.
La valeur du champ interfaceVersion doit être fixée à IR_WS_2.20.
Syntaxe de la requête
La requête est construite conformément au format JSON:
{“<nom du champ>” : ”<nom de la valeur>”, “<nom du champ>” : “<nom de la valeur>”, “nom du champ” : “Nom de la valeur” etc., “seal” : “valeur de seal” }
Exemple d’une requête de paiement d’un montant de 10 euros :
{"amount" : "1000","automaticResponseUrl" : "https://responseurl.com","currencyCode" : "978","interfaceVersion" : "IR_WS_2.20","keyVersion" : "1","merchantId" : "211000021310001","normalReturnUrl" : "https://responseurl2.com","orderChannel" : "INTERNET","transactionReference" : "1232015021717313","seal" : "858005903b91ae3b3a076e29aca7dc6314c05aa6f929c439ecfce1de17ea7e39"}
La syntaxe utilisée pour créer une liste en JSON suit la norme. Voici un résumé de cette structure pour les deux principaux types de listes : les listes de champs simples (par ex. chaînes de caractères) et les listes d’objets.
Il est possible d’avoir une liste de valeurs pour un même champ :
…,"nom du champ" : ["valeur1","valeur2"],…
Exemple avec le champ paymentMeanBrandList valorisé avec VISA et MASTERCARD:
…,"paymentMeanBrandList" : ["VISA","MASTERCARD"],…
Si un champ contient une liste d’objets complexes, sa représentation est construite conformément au format suivant :
…,"nom du champ" : [{"nom du sous-champ1":"valeur1","nom du sous-champ2":"valeur2"},{"nom du souschamp1":”valeur3", "nom du sous-champ2":"valeur4"}],…
Exemple d’une requête de paiement avec une liste d’objets complexes pour le champ shoppingCartDetail contenant deux produits nommés apple et mango :
{"amount" : "1000","automaticResponseUrl" : "https://responseurl.com","currencyCode" : "978","interfaceVersion" : "IR_WS_2.20","keyVersion" : "1","merchantId" : "211000021310001","normalReturnUrl" : "https://responseurl2.com","orderChannel" : "INTERNET","shoppingCartDetail" : {"shoppingCartItemList" : [{"productCode" : "123","productName" : "apple"},{"productCode" : "456","productName" : "mango"}],"shoppingCartTotalAmount" : "1000"},"transactionReference" : "1232015021717313","seal" : "fac5bc8e5396d77a8b31a2a79a38750feea71b22106a2cec88efa3641a947345"}
Présence des champs de la requête
Certains champs de la requête de paiement ne sont obligatoires que :
- Lors de l'utilisation de certains moyens de paiement, veuillez consulter le guide du moyen de paiement concerné pour savoir quels champs sont obligatoires
- En fonction de la configuration de votre boutique, veuillez consulter le guide de configuration des fonctionnalités pour savoir quels champs sont obligatoires
- Dans certains cas d'usages (ex: paiement récurrent), veuillez consulter le guide de configuration des fonctionnalités pour savoir quels champs sont obligatoires
Ces champs sont désignés avec la mention "conditionnel".
Sécurisation de la requête
La requête de paiement contient les paramètres de la transaction et est envoyée par le navigateur Web du client. Théoriquement, il est possible pour un pirate d’intercepter la requête et de modifier son contenu avant que les données n’atteignent le serveur de paiement.
De ce fait, il est nécessaire de renforcer la sécurité pour assurer l’intégrité des paramètres de la transaction envoyée. La solution Mercanet répond à ce besoin par échange de signatures.
Un contrôle effectif de la signature comporte deux éléments:
- l’intégrité des messages de requête et de réponse; l’absence de modifications lors de l’échange,
- l’authentification de l’émetteur et du destinataire, car ils se partagent la même clé secrète.
Remarque
Si votre clé secrète est compromise, ou si vous supposez que c’est le cas, vous devez impérativement demander son renouvellement en vous connectant à Mercanet Download. |
---|
Comment sécuriser la requête
La sécurisation de la requête est effectuée en calculant la valeur «hashée» conformément aux paramètres de la transaction. Ensuite, la clé secrète y est ajoutée. Toutes les chaînes de caractères sont converties en UTF-8 avant le «hashage».
L’algorithme de «hashage» génère un résultat irréversible. Lorsqu’un tel message est reçu, le destinataire doit recalculer la valeur «hashée» pour la comparer à celle reçue. Toute différence indique que les données échangées ont été falsifiées ou que le destinataire et l’émetteur ne partage pas la même clé secrète.
Le résultat doit être envoyé sous forme hexadécimale la donnée nommée Seal.
Calcul de la donnée Seal
La valeur de la donnée Seal est calculée comme suit: Pour l’algorithme HMAC-SHA :
- Concaténation des valeurs des champs de données dans l’ordre alphabétique des noms de champs, sauf pour les champs keyVersion et sealAlgorithm
- Obtention de l’encodage UTF-8 des données du résultat précédent
- HMAC avec chiffrement SHA256 des octets obtenus avec la clé secrète
Cette procédure peut être résumée comme suit :
HMAC-SHA256( UTF-8(sortedDataValues), UTF-8(secretKey))
Exemples de code pour encoder
- Exemple d’encodage Hmac Sha256 en Php 5
<?php … // Seal computation thanks to hash sorted data hash with merchant key $data_to_send=$amount.$captureDay.$captureMode.$cardCSCValue.$cardExpiryDate.$cardNumber.$cardSeqNumber.$currency_code.$customerId.$customerIpAddress.$interfaceVersion.$merchantId.$merchantTransactionDateTime.$orderChannel.$orderId.$returnContext.$transactionReference; $data_to_send= utf8_encode($data_to_send) $seal=hash_hmac('sha256', $data_to_send, $secretKey); … ?>
«data_to_send» et «secretKey» doivent utiliser un jeu de caractères UTF-8. Référez-vous à la fonction utf8_encode pour la conversion de caractères ISO-8859-1 en UTF-8.
- Exemple d’encodage Hmac Sha256 en Java
import java.security.InvalidKeyException; import java.security.NoSuchAlgorithmException; import javax.crypto.Mac; import javax.crypto.spec.SecretKeySpec; public class ExampleHMACSHA256 { /** * table to convert a nibble to a hex char. */ static final char[] hexChar = { '0' , '1' , '2' , '3' , '4' , '5' , '6' , '7' , '8' , '9' , 'a' , 'b' , 'c' , 'd' , 'e' , 'f'}; /** * Fast convert a byte array to a hex string * with possible leading zero. * @param b array of bytes to convert to string * @return hex representation, two chars per byte. */ public static String encodeHexString ( byte[] b ) { StringBuffer sb = new StringBuffer( b.length * 2 ); for ( int i=0; i<b.length; i++ ) { // look up high nibble char sb.append( hexChar [( b[i] & 0xf0 ) >>> 4] ); // look up low nibble char sb.append( hexChar [b[i] & 0x0f] ); } return sb.toString(); } /** * Computes the seal * @param Data the parameters to cipher * @param secretKey the secret key to append to the parameters * @return hex representation of the seal, two chars per byte. */ public static String computeSeal(String data, String secretKey) throws Exception { Mac hmacSHA256 = Mac.getInstance("HmacSHA256"); SecretKeySpec keySpec = new SecretKeySpec(secretKey.getBytes(), "HmacSHA256"); hmacSHA256.init(keySpec); return encodeHexString(hmacSHA256.doFinal(data.getBytes())); } /** * @param args */ public static void main(String[] args) { try { System.out.println (computeSeal("parameters", "key")); } catch (Exception e) { e.printStackTrace(); } } }
- Exemple d’encodage Hmac Sha256 en .net
(Effectué à l’aide d’un simple formulaire nommé « Form1 » contenant deux champs texte pour saisir txtMercanet et txtSecretKey, ainsi qu’un autre champ pour afficher lblHEX)
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.Security.Cryptography; namespace ExampleDotNET { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void cmdGO_Click(object sender, EventArgs e) { String sChaine = txtSips.Text; UTF8Encoding utf8 = new UTF8Encoding(); Byte[] encodedBytes = utf8.GetBytes(sChaine); byte[] shaResult; HMAC hmac = new HMAC.Create("HMACSHA256"); var key = "YourSecretKey"; hmac.Key = utf8.GetBytes(key); hmac.Initialize(); shaResult = hmac.ComputeHash(encodedBytes); lblHEX.Text = ByteArrayToHEX(shaResult); } private string ByteArrayToHEX(byte[] ba) { StringBuilder hex = new StringBuilder(ba.Length * 2); foreach (byte b in ba) hex.AppendFormat("{0:x2}", b); return hex.ToString(); } } }
Exemples d'appel de Mercanet
Exemple simple d'appel de Mercanet
L'exemple simple ci-dessous, écrit en PHP, vous permet de comprendre comment envoyer une requête de paiement à Mercanet :
<?php // Données à envoyer à Mercanet $transactionReference = "test" . rand(100000,999999); // Génère un numéro de transaction aléatoire $amount = "1200"; // Montant de la transaction en centime $currencyCode = "978"; // Code de la devise $normalReturnUrl = "https://www.marchand.com/normal_return.php"; // URL de retour pour récupérer le résultat du paiement sur le site e-commerce du marchand $merchandId = "211000021310001"; // Identifiant du marchand de test $secretKey = "S9i8qClCnb2CZU3y3Vn0toIOgz3z_aBi79akR30vM9o"; // Clé secrète du marchand liée au marchand de test $keyVersion = "1"; // Version de la clé secrète liée au marchand de test $orderChannel = "INTERNET"; // Canal de commande utilisé $interfaceVersion = "IR_WS_2.20"; // Version de l'interface JSON // Calcul de la signature des données $dataForSeal = $amount.$currencyCode.$interfaceVersion.$merchandId.$normalReturnUrl.$orderChannel.$transactionReference; // Ne pas mettre les champs keyVersion et sealAlgorithm $dataToSend = utf8_encode($dataForSeal); // conversion du champ Data en UTF8 $seal=hash_hmac('sha256', $dataToSend, $secretKey); // hmac avec SHA256 des valeurs des données envoyées en UTF8 (triées par nom de champs) // Contruit la requête des données à envoyer à Mercanet $paymentRequest = '{"amount" : "'.$amount.'","currencyCode" : "'.$currencyCode.'","interfaceVersion" : "'.$interfaceVersion.'","keyVersion" : "'.$keyVersion.'","merchantId" : "'.$merchandId.'","normalReturnUrl" : "'.$normalReturnUrl.'","orderChannel" : "'.$orderChannel.'","transactionReference" : "'.$transactionReference.'","seal" : "'.$seal.'"}'; // Envoi des données à Mercanet $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, "https://payment-webinit-mercanet.test.sips-atos.com/rs-services/v2/paymentInit" ); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true ); curl_setopt($ch, CURLOPT_POST, true ); curl_setopt($ch, CURLOPT_POSTFIELDS, $paymentRequest); curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json', 'Accept:application/json')); curl_setopt($ch, CURLOPT_PORT, 443); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); $result = curl_exec($ch); $info = curl_getinfo($ch); if (!$result) { Print "curl error: " . curl_error($ch) . "\n"; curl_close($ch); die(); } if ($info['http_code'] != 200) { Print "service error: " . $info['http_code'] . "\n"; Print "return: " . $result . "\n"; curl_close($ch); die(); } curl_close($ch); if (strlen($result) == 0) { Print "service did not sent back data\n"; die(); } $result_array = json_decode($result); // Appel de Mercanet avec les données de redirection retournées par Mercanet if ($result_array->redirectionStatusCode == "00") { echo "<html><body><form name=\"redirectForm\" method=\"POST\" action=\"" . $result_array->redirectionUrl . "\">" . "<input type=\"hidden\" name=\"redirectionVersion\" value=\"". $result_array->redirectionVersion . "\">" . "<input type=\"hidden\" name=\"redirectionData\" value=\"". $result_array->redirectionData . "\">" . "<noscript><input type=\"submit\" name=\"Go\" value=\"Click to continue\"/></noscript> </form>" . "<script type=\"text/javascript\"> document.redirectForm.submit(); </script>" . "</body></html>"; } ?>
[Démonstration d'un paiement simple]
Exemple d'un paiement N fois
[Démonstration d'un paiement en n fois]
Exemple simple de traitement de la réponse de Mercanet
L'exemple simple ci-dessous, écrit en PHP, vous permet de comprendre comment réceptionner la réponse de Mercanet :
<?php $chaine = ""; foreach($_POST as $k => $v) { if (strlen($v) > 0) { $chaine .= $k . '=' . $v ."<br>"; } } echo "Retour = " . $chaine; ?>
Dans le programme de retour, il faut :
- vérifier le seal retourné par Mercanet pour s'assurer que c'est bien Mercanet qui a fait la réponse au site e-commerce du marchand,
- vérifier le résultat du paiement avec le champ responseCode contenu dans le champ POST Data
- mettre à jour la commande du client avec le résultat du paiement
Kit de démarrage
Veuillez trouver ci-après un exemple de programme plus complet écrit en PHP vous permettant de mettre en oeuvre l'appel à la page de paiement de Mercanet :
Vous pourrez tester les différents moyens de paiement:
- Paiement simple
- paiement en N fois
- Paiement différé
- Paiement One click
Il vous suffit pour cela de télécharger le fichier zip ci-dessus et de décompresser le contenu du fichier zip sur votre serveur Web.
Exemple de formulaire de redirection vers PayPage
En réponse à cette requête, vous devez recevoir une réponse (également en JSON) contenant les champs suivants :
Nom du champ |
Description |
---|---|
redirectionData |
Token de la requête à fournir lors de la redirection vers les pages de de paiement. |
redirectionStatusCode |
Liste des codes réponse possibles. |
redirectionStatusMessage |
Court message donnant le statut de l’initialisation. |
redirectionUrl |
URL des pages de paiement Sips vers lesquelles il faut rediriger le client. |
redirectionVersion |
Version de la redirection. |
seal |
Seal de sortie. |
reponseEncoding |
Type d’encodage utilisé dans les réponses. |
Si l’initialisation du paiement s’est correctement déroulée, le champ redirectionStatusCode doit être valorisé à « 00 ». Les champs redirectionData, redirectionVersion et redirectionUrl seront également valorisés pour permettre la redirection vers les pages de paiement Sips.
Pour rediriger le client vers les pages de paiement, vous devez implémenter un formulaire de type POST envoyant les deux champs suivant : redirectionData et redirectionVersion. Le formulaire POST devra rediriger le client vers l’URL fourni dans le champ redirectionUrl.
Ci-dessous, voici un exemple de formulaire qui devra être soumis de façon automatique :
<form method="post" action=”value of redirectionURL”> <input type="hidden" name="redirectionVersion" value=”value of redirectionVersion”> <input type="hidden" name="redirectionData" value=”value of redirectionData”> </form>
Traiter les erreurs lors de l’initialisation du paiement
Tous les champs reçus par Mercanet Paypage JSON à travers le connecteur font l’objet d’une vérification individuelle. Le tableau ci-dessous présente la liste des messages d’erreur pouvant s’afficher lors de cette étape ainsi que les solutions à mettre en œuvre.
redirectionStatusCode |
Description |
---|---|
00 |
Situation normale suivie du processus normal d'affichage des pages de paiement. |
03 |
L’identifiant commerçant ou le contrat acquéreur sont invalides. |
12 |
Les paramètres de la transaction sont invalides. Vérifiez les paramètres de la requête. |
30 |
Le format de la requête est invalide. |
34 |
Problème de sécurité, par ex. le sceau calculé est incorrect. |
94 |
La transaction existe déjà. |
99 |
Service temporairement indisponible |
4 cas sont possibles :
- redirectionStatusCode = 00
Ce cas doit être suivi de la redirection de l’utilisateur vers la page de paiement.
- redirectionStatusCode = 03, 12, 30, 34
Ces codes d’erreur indiquent que la requête comporte un problème qui doit être résolu. Le processus de paiement doit alors être interrompu.
- redirectionStatusCode = 94
La référence de transaction a déjà été utilisée. Le commerçant doit réessayer avec une autre référence de transaction.
- redirectionStatusCode = 99
Problème de disponibilité du service de paiement. Le commerçant doit essayer de renvoyer la requête. Il convient d’utiliser une nouvelle référence de transaction pour éviter un code de réponse 94.
Renseigner les champs de la requête
Champs génériques
Champ |
Présence |
Version |
Commentaires |
---|---|---|---|
amount |
Obligatoire |
WS_1.0 |
|
currencyCode |
Obligatoire |
WS_1.0 |
|
interfaceVersion |
Obligatoire |
WS_1.0 |
|
keyVersion |
Obligatoire |
WS_2.2 |
|
merchantId |
Obligatoire |
WS_1.0 |
|
normalReturnUrl |
Obligatoire |
WS_1.0 |
|
orderChannel |
Obligatoire |
WS_2.1 |
|
transactionReference |
Obligatoire |
WS_1.0 |
Facultatif si vous utilisez le S10TransactionReference |
s10TransactionReference |
Obligatoire |
WS_2.7 |
Facultatif si vous utilisez le transactionReference. Voir ci-dessous |
seal |
Obligatoire |
WS_2.0 |
|
authenticationData |
Facultatif |
WS_2.2 |
|
automaticResponseUrl |
Facultatif |
WS_1.0 |
|
billingAddress |
Facultatif |
WS_2.2 |
Voir ci-dessous |
billingContact |
Facultatif |
WS_2.2 |
Voir ci-dessous |
billingFirstDate |
Facultatif |
WS_2.5 |
|
bypassReceiptPage |
Facultatif |
WS_2.0 |
Voir ci-dessous |
bypassDcc |
Facultatif |
WS_2.11 |
|
captureDay |
Facultatif |
WS_1.0 |
|
captureMode |
Facultatif |
WS_1.0 |
|
customer3DSTransactionDate |
Facultatif |
WS_2.5 |
|
customerAddress |
Facultatif |
WS_2.2 |
Voir ci-dessous |
customerContact |
Facultatif |
WS_2.2 |
Voir ci-dessous |
customerData |
Facultatif |
WS_2.2 |
Voir ci-dessous |
customerBillingNb |
Facultatif |
WS_2.5 |
|
customerDeliverySuccessFlag |
Facultatif |
WS_2.5 |
|
customerEmail |
Facultatif |
WS_1.0 |
Uniquement disponible dans WS_1.0 et WS_2.0 |
customerId |
Facultatif |
WS_2.0 |
|
customerIpAddress |
Facultatif |
WS_2.1 |
|
customerLanguage |
Facultatif |
WS_1.0 |
|
customerPhoneValidationMethod |
Facultatif |
WS_2.5 |
|
customerRegistrationDateOnline |
Facultatif |
WS_2.5 |
|
customerRegistrationDateProxi |
Facultatif |
WS_2.5 |
|
deliveryAddress |
Facultatif |
WS_2.2 |
Voir ci-dessous |
deliveryContact |
Facultatif |
WS_2.2 |
Voir ci-dessous |
deliveryData |
Facultatif |
WS_2.6 |
Voir ci-dessous |
deliveryFirstDate |
Facultatif |
WS_2.5 |
|
evidenceAcquisitionDate |
Facultatif |
WS_2.5 |
|
evidenceNumber |
Facultatif |
WS_2.5 |
|
evidenceType |
Facultatif |
WS_2.5 |
|
fraudData |
Facultatif |
WS_2.1 |
Voir ci-dessous |
hashAlgorithm1 |
Facultatif |
WS_2.1 |
|
hashAlgorithm2 |
Facultatif |
WS_2.1 |
|
hashSalt1 |
Facultatif |
WS_2.1 |
|
hashSalt2 |
Facultatif |
WS_2.1 |
|
holderAdditionalReference |
Facultatif |
WS_2.9 |
|
holderAddress |
Facultatif |
WS_2.2 |
Voir ci-dessous |
holderContact |
Facultatif |
WS_2.2 |
Voir ci-dessous |
holderData |
Facultatif |
WS_2.2 |
Voir ci-dessous |
instalmentData |
Facultatif |
WS_2.6 |
Voir ci-dessous |
intermediateServiceProviderId |
Facultatif |
WS_2.11 |
|
invoiceReference |
Facultatif |
WS_2.0 |
|
mandateId |
Facultatif |
WS_2.5 |
|
merchantSessionId |
Facultatif |
WS_2.0 |
|
merchantTransactionDateTime |
Facultatif |
WS_2.0 |
|
merchantWalletID |
Facultatif |
WS_2.2 |
|
orderContext |
Facultatif |
WS_2.16 |
Voir ci-dessous |
orderId |
Facultatif |
WS_1.0 |
|
paymentMeanBrandList |
Facultatif |
WS_1.0 |
Ce champ est une liste JSON. |
paymentMeanData |
Facultatif |
WS_2.2 |
Voir ci-dessous |
paymentPattern |
Conditionnel |
WS_2.1 |
Ce champ est obligatoire pour certains moyens de paiement. Pour de plus amples informations, référez-vous au guide de mise en œuvre du moyen de paiement concerné. |
paypageData |
Facultatif |
WS_2.0 |
Voir ci-dessous |
responseEncoding |
Facultatif |
WS_2.19 |
Ce champ permet de choisir l’encodage à utiliser dans les réponses. |
responseKeyVersion |
Facultatif |
WS_2.0 |
|
returnContext |
Facultatif |
WS_2.0 |
|
riskManagementCustomDataList |
Facultatif |
WS_2.9 |
Ce champ est une liste JSON d’objets riskManagementCustomData. Voir ci-dessous |
sealAlgorithm |
Facultatif |
WS_2.9 |
|
shoppingCartDetail |
Facultatif |
WS_2.6 |
Voir ci-dessous |
statementReference |
Facultatif |
WS_2.1 |
|
subMerchantAddress |
Facultatif |
WS_2.15 |
Voir ci-dessous |
subMerchantCategoryCode |
Facultatif |
WS_2.15 |
|
subMerchantId |
Facultatif |
WS_2.15 |
|
subMerchantLegalId |
Facultatif |
WS_2.15 |
|
subMerchantShortName |
Facultatif |
WS_2.15 |
|
templateName |
Facultatif |
WS_2.1 |
|
transactionActors |
Facultatif |
WS_2.2 |
|
transactionOrigin |
Facultatif |
WS_2.0 |
|
travelContext |
Facultatif |
WS_2.16 |
Voir ci-dessous |
valueDate |
Facultatif |
WS_2.5 |
|
subMerchantName |
Facultatif |
WS_2.20 |
|
subMerchantContractNumber |
Facultatif |
WS_2.20 |
|
customerAccountHistoric |
Facultatif |
WS_2.21 |
Voir la partie Containers |
merchantName |
Facultatif |
WS_2.23 |
Permet de modifier le nom affiché sur la page d'authentification 3-D Secure |
customerTimestampIpAddress |
Facultatif |
WS_2.26 |
Champs optionnels relatifs à la fraude
- Contenu de fraudData
Champ |
Présence |
Version |
Commentaires |
---|---|---|---|
allowedCardArea |
Facultatif |
WS_2.1 |
|
allowedCardCountryList |
Facultatif |
WS_2.1 |
Ce champ est une liste JSON. |
allowedIpArea |
Facultatif |
WS_2.1 |
|
allowedIpCountryList |
Facultatif |
WS_2.1 |
Ce champ est une liste JSON. |
bypass3DS |
Facultatif |
WS_2.1 |
|
bypassCtrlList |
Facultatif |
WS_2.1 |
Ce champ est une liste JSON. |
bypassInfoList |
Facultatif |
WS_2.1 |
Ce champ est une liste JSON. |
deniedCardArea |
Facultatif |
WS_2.1 |
|
deniedCardCountryList |
Facultatif |
WS_2.1 |
Ce champ est une liste JSON. |
deniedIpArea |
Facultatif |
WS_2.1 |
|
deniedIpCountryList |
Facultatif |
WS_2.1 |
Ce champ est une liste JSON. |
riskManagementDynamicSettingList |
Facultatif |
WS_2.10 |
|
merchantCustomerAuthentMethod |
Facultatif |
WS_2.23 |
Ce champ est une liste JSON d’objets riskManagementDynamicSetting. |
challengeMode3DS |
Facultatif |
WS_2.21 |
|
addressDeliveryBillingMatchIndicator |
Facultatif |
WS_2.21 |
|
nameDeliveryCustomerMatchIndicator |
Facultatif |
WS_2.21 |
|
reorderProductIndicator |
Facultatif |
WS_2.21 |
|
productAvailabilityIndicator |
Facultatif |
WS_2.21 |
- Contenu de riskManagementDynamicSetting :
Champ |
Présence |
Version |
Commentaires |
---|---|---|---|
riskManagementDynamicParam |
Conditionnel |
WS_2.10 |
|
riskManagementDynamicValue |
Conditionnel |
WS_2.10 |
Champ optionnel relatif aux pages de paiement
- Contenu de paypageData:
Champ |
Présence |
Version |
Commentaires |
---|---|---|---|
bypassReceiptPage |
Facultatif |
WS_2.0 |
Champs optionnels relatifs à l’authentification du porteur
- Contenu de authenticationData :
Champ |
Présence |
Version |
Commentaires |
---|---|---|---|
issuerWalletPolicy |
Facultatif |
WS_2.2 |
Voir ci-dessous |
cardAuthPolicy |
Facultatif |
WS_2.8 |
Voir ci-dessous |
- Contenu de issuerWalletPolicy:
Champ |
Présence |
Version |
Commentaires |
---|---|---|---|
check3DS |
Facultatif |
WS_2.2 |
|
checkCSC |
Facultatif |
WS_2.2 |
- Contenu de cardAuthPolicy:
Champ |
Présence |
Version |
Commentaires |
---|---|---|---|
checkAVS |
Facultatif |
WS_2.8 |
|
ignoreAddressCheckResult |
Facultatif |
WS_2.8 |
|
ignorePostcodeCheckResult |
Facultatif |
WS_2.8 |
|
ignoreCSCCheckResult |
Facultatif |
WS_2.17 |
Champs optionnels relatifs aux moyens de paiement
- Contenu de paymentMeanData :
Champ |
Présence |
Version |
Commentaires |
---|---|---|---|
paypal |
Facultatif |
WS_2.2 |
Voir ci-dessous |
sdd |
Facultatif |
WS_2.2 |
Voir ci-dessous |
cofinoga3xcb |
Facultatif |
WS_2.2 |
Voir ci-dessous |
passbe |
Facultatif |
WS_2.5 |
Voir ci-dessous |
accord |
Facultatif |
WS_2.6 |
Voir ci-dessous |
facilypay |
Facultatif |
WS_2.6 |
Voir ci-dessous |
cetelemNxcb |
Facultatif |
WS_2.9 |
Voir ci-dessous |
presto |
Facultatif |
WS_2.10 |
Voir ci-dessous |
cofidis3x |
Facultatif |
WS_2.11 |
Voir ci-dessous |
cofidis4x |
Facultatif |
WS_2.12 |
Voir ci-dessous |
unEuroCom |
Facultatif |
WS_2.11 |
Voir ci-dessous |
cofinoga |
Facultatif |
WS_2.15 |
Voir ci-dessous |
cetelem3x |
Facultatif |
WS_2.16 |
Voir ci-dessous |
cetelem4x |
Facultatif |
WS_2.16 |
Voir ci-dessous |
franfinance3xcb |
Facultatif |
WS_2.18 |
Voir ci-dessous |
franfinance4xcb |
Facultatif |
WS_2.18 |
Voir ci-dessous |
visaCheckout |
Facultatif |
WS_2.21 |
Voir ci-dessous |
- Contenu de paypal:
Champ |
Présence |
Version |
Commentaires |
---|---|---|---|
landingPage |
Facultatif |
WS_2.2 |
|
addrOverride |
Facultatif |
WS_2.2 |
|
invoiceId |
Facultatif |
WS_2.2 |
|
dupFlag |
Facultatif |
WS_2.2 |
|
dupDesc |
Facultatif |
WS_2.2 |
|
dupCustom |
Facultatif |
WS_2.2 |
|
dupType |
Facultatif |
WS_2.2 |
|
mobile |
Facultatif |
WS_2.2 |
|
orderDescription |
Facultatif |
WS_2.16 |
- Contenu de sdd:
Champ |
Présence |
Version |
Commentaires |
---|---|---|---|
mandateAuthentMethod |
Facultatif |
WS_2.2 |
|
mandateUsage |
Facultatif |
WS_2.2 |
|
mandateCertificationType |
Facultatif |
WS_2.5 |
- Contenu de cofinoga3xcb:
Champ |
Présence |
Version |
Commentaires |
---|---|---|---|
creditIndicator |
Facultatif |
WS_2.2 |
- Contenu de passbe:
Champ |
Présence |
Version |
Commentaires |
---|---|---|---|
settlementModeList |
Facultatif |
WS_2.5 |
- Contenu de facilypay:
Champ |
Présence |
Version |
Commentaires |
---|---|---|---|
settlementMode |
Facultatif |
WS_2.6 |
|
settlementModeVersion |
Facultatif |
WS_2.6 |
|
receiverType |
Facultatif |
WS_2.6 |
|
depositRefundIndicator |
Facultatif |
WS_2.6 |
- Contenu de accord:
Champ |
Présence |
Version |
Commentaires |
---|---|---|---|
settlementMode |
Facultatif |
WS_2.6 |
- Contenu de cetelemNxcb:
Champ |
Présence |
Version |
Commentaires |
---|---|---|---|
nxcbTransactionReference1 |
Facultatif |
WS_2.9 |
|
nxcbTransactionReference2 |
Facultatif |
WS_2.9 |
|
s10NxcbTransactionId1 |
Facultatif |
WS_2.9 |
|
s10NxcbTransactionId2 |
Facultatif |
WS_2.9 |
- Contenu de presto:
Champ |
Présence |
Version |
Commentaires |
---|---|---|---|
financialProduct |
Conditionnel |
WS_2.10 |
Uniquement obligatoire pour une transaction Presto |
paymentMeanCustomerId |
Conditionnel |
WS_2.10 |
Uniquement obligatoire pour une transaction Presto |
prestoCardType |
Facultatif |
WS_2.10 |
- Contenu de cofidis3x:
Champ |
Présence |
Version |
Commentaires |
---|---|---|---|
basket |
Facultatif |
WS_2.20 |
|
cofidisDisplayCancelButton |
Facultatif |
WS_2.11 |
|
cofidisPrivateData |
Facultatif |
WS_2.11 |
|
preScoreValue |
Facultatif |
WS_2.11 |
- Contenu de cofidis4x:
Champ |
Présence |
Version |
Commentaires |
---|---|---|---|
cofidisDisplayCancelButton |
Facultatif |
WS_2.12 |
|
cofidisPrivateData |
Facultatif |
WS_2.12 |
|
preScoreValue |
Facultatif |
WS_2.12 |
- Contenu de unEuroCom:
Champ |
Présence |
Version |
Commentaires |
---|---|---|---|
cofidisPrivateData |
Facultatif |
WS_2.11 |
|
preScoreValue |
Facultatif |
WS_2.11 |
- Contenu de cofinoga:
Champ |
Présence |
Version |
Commentaires |
---|---|---|---|
paymentMeanTradeOptionList |
Facultatif |
WS_2.15 |
paymentMeanTradeOption est un conteneur décrit ci-dessous. |
- Contenu de paymentMeanTradeOption:
Champ |
Présence |
Version |
Commentaires |
---|---|---|---|
paymentMeanTradingName |
Facultatif |
WS_2.15 |
|
settlementModeList |
Facultatif |
WS_2.15 |
- Contenu de cetelem3x:
Champ |
Présence |
Version |
Commentaires |
---|---|---|---|
cetelemPrivateMerchantData |
Facultatif |
WS_2.16 |
|
cetelemPrivateData |
Facultatif |
WS_2.16 |
- Contenu de cetelem4x
Champ |
Présence |
Version |
Commentaires |
---|---|---|---|
cetelemPrivateMerchantData |
Facultatif |
WS_2.16 |
|
cetelemPrivateData |
Facultatif |
WS_2.16 |
- Contenu de franfinance3xcb :
Champ |
Présence |
Version |
Commentaires |
---|---|---|---|
authenticationKey |
Conditionnel |
WS_2.18 |
Obligatoire uniquement pour une transaction Franfinance |
pageCustomizationCode |
Optionnel |
WS_2.18 |
|
redirectionTimer |
Optionnel |
WS_2.18 |
|
testEnvironment |
Optionnel |
WS_2.18 |
|
birthPlaceCode |
Optionnel |
WS_2.18 |
|
conversionCurrency |
Optionnel |
WS_2.26 |
|
convertedAmount |
Optionnel |
WS_2.26 |
- Contenu de franfinance4xcb :
Champ |
Présence |
Version |
Commentaires |
---|---|---|---|
authenticationKey |
Conditionnel |
WS_2.18 |
Obligatoire uniquement pour une transaction Franfinance |
pageCustomizationCode |
Optionnel |
WS_2.18 |
|
redirectionTimer |
Optionnel |
WS_2.18 |
|
testEnvironment |
Optionnel |
WS_2.18 |
|
birthPlaceCode |
Optionnel |
WS_2.18 |
|
conversionCurrency |
Optionnel |
WS_2.26 |
|
convertedAmount |
Optionnel |
WS_2.26 |
- Contenu de visaCheckout
Champ |
Présence |
Version |
Commentaires |
---|---|---|---|
visaCheckoutCallID |
Optionnel |
WS_2.21 |
Champs optionnels relatifs au paiement échelonné
- Contenu de instalmentData:
Champ |
Présence |
Version |
Commentaires |
---|---|---|---|
number |
Facultatif |
WS_2.2 |
|
datesList |
Facultatif |
WS_2.2 |
Ce champ est une liste JSON. |
transactionReferencesList |
Conditionnel |
WS_2.2 |
Ce champ est une liste JSON. |
s10transactionIdsList |
Conditionnel |
WS_2.7 |
Ce champ est une liste JSON. |
amountsList |
Facultatif |
WS_2.2 |
Ce champ est une liste JSON. |
Champs optionnel relatifs à l’adresse de facturation du client
- Contenu de billingAdress:
Champ |
Présence |
Version |
Commentaires |
---|---|---|---|
addressAdditional1 |
Facultatif |
WS_2.2 |
|
addressAdditional2 |
Facultatif |
WS_2.2 |
|
addressAdditional3 |
Facultatif |
WS_2.2 |
|
city |
Facultatif |
WS_2.2 |
|
company |
Facultatif |
WS_2.2 |
|
country |
Facultatif |
WS_2.2 |
|
postBox |
Facultatif |
WS_2.2 |
|
state |
Facultatif |
WS_2.2 |
|
street |
Facultatif |
WS_2.2 |
|
streetNumber |
Facultatif |
WS_2.2 |
|
zipCode |
Facultatif |
WS_2.2 |
- Contenu de billingContact :
Champ |
Présence |
Version |
Commentaires |
---|---|---|---|
|
Facultatif |
WS_2.2 |
|
firstname |
Facultatif |
WS_2.2 |
|
gender |
Facultatif |
WS_2.2 |
|
lastname |
Facultatif |
WS_2.2 |
|
mobile |
Facultatif |
WS_2.2 |
|
phone |
Facultatif |
WS_2.2 |
|
title |
Facultatif |
WS_2.2 |
- Contenu de customerAccountHistoric :
Champ |
Présence |
Version |
Commentaires |
---|---|---|---|
creationDate |
Facultatif |
WS_2.21 |
|
numberOfAttemptsAddCard24Hours |
Facultatif |
WS_2.21 |
|
numberOfPurchase180Days |
Facultatif |
WS_2.21 |
|
numberOfTransaction24Hours |
Facultatif |
WS_2.21 |
|
suspiciousActivityIndicator |
Facultatif |
WS_2.21 |
|
firstPurchaseDate |
Facultatif |
WS_2.24 |
|
lastPurchaseDate |
Facultatif |
WS_2.24 |
|
numberOfPurchase |
Facultatif |
WS_2.26 |
Champs optionnels relatifs à l’adresse du client
- Contenu de customerAddress:
Champ |
Présence |
Version |
Commentaires |
---|---|---|---|
addressAdditional1 |
Facultatif |
WS_2.2 |
|
addressAdditional2 |
Facultatif |
WS_2.2 |
|
addressAdditional3 |
Facultatif |
WS_2.2 |
|
city |
Facultatif |
WS_2.2 |
|
company |
Facultatif |
WS_2.2 |
|
country |
Facultatif |
WS_2.2 |
|
postBox |
Facultatif |
WS_2.2 |
|
state |
Facultatif |
WS_2.2 |
|
street |
Facultatif |
WS_2.2 |
|
streetNumber |
Facultatif |
WS_2.2 |
|
zipCode |
Facultatif |
WS_2.2 |
|
businessName |
Facultatif |
WS_2.17 |
- Contenu de customerContact:
Champ |
Présence |
Version |
Commentaires |
---|---|---|---|
|
Facultatif |
WS_2.2 |
|
firstname |
Facultatif |
WS_2.2 |
|
gender |
Facultatif |
WS_2.2 |
|
lastname |
Facultatif |
WS_2.2 |
|
mobile |
Facultatif |
WS_2.2 |
|
phone |
Facultatif |
WS_2.2 |
|
title |
Facultatif |
WS_2.2 |
|
intials |
Facultatif |
WS_2.12 |
|
legalId |
Facultatif |
WS_2.17 |
|
positionOccupied |
Facultatif |
WS_2.17 |
|
workPhone |
Facultatif |
WS_2.21 |
- Contenu de customerData:
Champ |
Présence |
Version |
Commentaires |
---|---|---|---|
birthCity |
Facultatif |
WS_2.2 |
|
birthCountry |
Facultatif |
WS_2.2 |
|
birthDate |
Facultatif |
WS_2.2 |
|
birthZipCode |
Facultatif |
WS_2.2 |
|
nationalityCountry |
Facultatif |
WS_2.2 |
|
newPwd |
Facultatif |
WS_2.2 |
|
pwd |
Facultatif |
WS_2.2 |
|
maidenName |
Facultatif |
WS_2.18 |
Champs optionnels relatifs à l’adresse de livraison du client
- Contenu de deliveryAddress:
Champ |
Présence |
Version |
Commentaires |
---|---|---|---|
addressAdditional1 |
Facultatif |
WS_2.2 |
|
addressAdditional2 |
Facultatif |
WS_2.2 |
|
addressAdditional3 |
Facultatif |
WS_2.2 |
|
city |
Facultatif |
WS_2.2 |
|
company |
Facultatif |
WS_2.2 |
|
country |
Facultatif |
WS_2.2 |
|
postBox |
Facultatif |
WS_2.2 |
|
state |
Facultatif |
WS_2.2 |
|
street |
Facultatif |
WS_2.2 |
|
streetNumber |
Facultatif |
WS_2.2 |
|
zipCode |
Facultatif |
WS_2.2 |
- Contenu de deliveryContact:
Champ |
Présence |
Version |
Commentaires |
---|---|---|---|
|
Facultatif |
WS_2.2 |
|
firstname |
Facultatif |
WS_2.2 |
|
gender |
Facultatif |
WS_2.2 |
|
lastname |
Facultatif |
WS_2.2 |
|
mobile |
Facultatif |
WS_2.2 |
|
phone |
Facultatif |
WS_2.2 |
|
title |
Facultatif |
WS_2.2 |
|
initials |
Facultatif |
WS_2.11 |
|
legalId |
Facultatif |
WS_2.17 |
|
positionOccupied |
Facultatif |
WS_2.17 |
|
workPhone |
Facultatif |
WS_2.21 |
- Contenu de deliveryData:
Champ |
Présence |
Version |
Commentaires |
---|---|---|---|
deliveryChargeAmount |
Facultatif |
WS_2.6 |
|
estimatedDeliveryDate |
Facultatif |
WS_2.6 |
|
estimatedDeliveryDelay |
Facultatif |
WS_2.7 |
|
deliveryMode |
Facultatif |
WS_2.6 |
|
deliveryMethod |
Facultatif |
WS_2.6 |
|
deliveryOperator |
Facultatif |
WS_2.6 |
|
estimatedDeliveryDelay |
Facultatif |
WS_2.6 |
|
deliveryAddressCreationDate |
Facultatif |
WS_2.21 |
|
electronicDeliveryIndicator |
Facultatif |
WS_2.21 |
|
deliveryAddressStatus |
Facultatif |
WS_2.26 |
Champs optionnels relatifs aux données du titulaire de la carte
- Contenu de holderAddress:
Champ |
Présence |
Version |
Commentaires |
---|---|---|---|
addressAdditional1 |
Facultatif |
WS_2.2 |
|
addressAdditional2 |
Facultatif |
WS_2.2 |
|
addressAdditional3 |
Facultatif |
WS_2.2 |
|
city |
Facultatif |
WS_2.2 |
|
company |
Facultatif |
WS_2.2 |
|
country |
Facultatif |
WS_2.2 |
|
postBox |
Facultatif |
WS_2.2 |
|
state |
Facultatif |
WS_2.2 |
|
street |
Facultatif |
WS_2.2 |
|
streetNumber |
Facultatif |
WS_2.2 |
|
zipCode |
Facultatif |
WS_2.2 |
- Contenu de holderContact:
Champ |
Présence |
Version |
Commentaires |
---|---|---|---|
|
Facultatif |
WS_2.2 |
|
firstname |
Facultatif |
WS_2.2 |
|
gender |
Facultatif |
WS_2.2 |
|
lastname |
Facultatif |
WS_2.2 |
|
mobile |
Facultatif |
WS_2.2 |
|
phone |
Facultatif |
WS_2.2 |
|
title |
Facultatif |
WS_2.2 |
|
initials |
Facultatif |
WS_2.11 |
|
legalId |
Facultatif |
WS_2.17 |
|
positionOccupied |
Facultatif |
WS_2.17 |
|
workPhone |
Facultatif |
WS_2.21 |
- Contenu de holderData:
Champ |
Présence |
Version |
Commentaires |
---|---|---|---|
birthDate |
Facultatif |
WS_2.6 |
Champs optionnels relatifs au panier
- Contenu de shoppingCartDetail:
Champ |
Présence |
Version |
Commentaires |
---|---|---|---|
shoppingCartTotalAmount |
Facultatif |
WS_2.6 |
|
shoppingCartTotalQuantity |
Facultatif |
WS_2.6 |
|
shoppingCartTotalTaxAmount |
Facultatif |
WS_2.7 |
|
mainProduct |
Facultatif |
WS_2.6 |
|
shoppingCartItemList |
Facultatif |
WS_2.6 |
Ce champ est une liste JSON d’objets shoppingCartItem. |
mainProductCategoryList |
Facultatif |
WS_2.24 |
|
discountAmount |
Facultatif |
WS_2.24 |
- Contenu de shoppingCartItem:
Champ |
Présence |
Version |
Commentaires |
---|---|---|---|
productName |
Facultatif |
WS_2.6 |
|
productDescription |
Facultatif |
WS_2.6 |
|
productCode |
Facultatif |
WS_2.6 |
|
productSKU |
Facultatif |
WS_2.6 |
|
productUnitAmount |
Facultatif |
WS_2.6 |
|
productQuantity |
Facultatif |
WS_2.6 |
|
productTaxRate |
Facultatif |
WS_2.6 |
|
productUnitTaxAmount |
Facultatif |
WS_2.6 |
|
productCategory |
Facultatif |
WS_2.6 |
Champs optionnels relatifs au transactionId Mercanet 1.0
- Contenu de s10TransactionReference:
Champ |
Présence |
Version |
Commentaires |
---|---|---|---|
s10TransactionId |
Facultatif |
WS_2.7 |
|
s10TransactionIdDate |
Facultatif |
WS_2.7 |
Champs optionnels relatifs à la gestion des risques
- Contenu de riskManagementCustomData:
Champ |
Présence |
Version |
Commentaires |
---|---|---|---|
riskManagementCustomSequence |
Facultatif |
WS_2.9 |
|
riskManagementCustomValue |
Facultatif |
WS_2.9 |
Champs optionnels relatifs aux données vendeurs (cas des marketplace)
- Contenu de subMerchantAddress:
Champ |
Présence |
Version |
Commentaires |
---|---|---|---|
addressAdditional1 |
Facultatif |
WS_2.15 |
|
addressAdditional2 |
Facultatif |
WS_2.15 |
|
addressAdditional3 |
Facultatif |
WS_2.15 |
|
city |
Facultatif |
WS_2.15 |
|
company |
Facultatif |
WS_2.15 |
|
country |
Facultatif |
WS_2.15 |
|
postBox |
Facultatif |
WS_2.15 |
|
state |
Facultatif |
WS_2.15 |
|
street |
Facultatif |
WS_2.15 |
|
streetNumber |
Facultatif |
WS_2.15 |
|
zipCode |
Facultatif |
WS_2.15 |
Champs optionnels relatifs à AMEX-EA
- Contenu de orderContext:
Champ |
Présence |
Version |
Commentaires |
---|---|---|---|
customerHostName |
Facultatif |
WS_2.16 |
|
customerBrowserType |
Facultatif |
WS_2.16 |
|
customerANI |
Facultatif |
WS_2.16 |
|
customerANIInformationIdentifier |
Facultatif |
WS_2.16 |
- Contenu de travelContext:
Champ |
Présence |
Version |
Commentaires |
---|---|---|---|
departureDate |
Facultatif |
WS_2.16 |
|
passengerName |
Facultatif |
WS_2.16 |
|
originAirport |
Facultatif |
WS_2.16 |
|
numberOfRoutingCities |
Facultatif |
WS_2.16 |
|
routingCityList |
Facultatif |
WS_2.16 |
Ce champ est une liste JSON. |
numberOfAirlineCarriers |
Facultatif |
WS_2.16 |
|
airlineCarrierList |
Facultatif |
WS_2.16 |
Ce champ est une liste JSON. |
fareBasis |
Facultatif |
WS_2.16 |
|
numberOfPassengers |
Facultatif |
WS_2.16 |
|
destinationAirport |
Facultatif |
WS_2.16 |
|
reservationCode |
Facultatif |
WS_2.16 |
Paramétrer la requête de paiement
Voici un exemple de paramétrage de la requête de paiement pour chaque fonctionnalité disponible dans Mercanet Paypage JSON (le détail de ces fonctionnalités est décrit dans le guide des fonctionnalités).
Affichage dynamique des moyens de paiement
Il faut filtrer ceux qui s’afficheront dans la page de sélection des moyens de paiement grâce au champ paymentMeanBrandList:
.. ,"paymentMeanBrandList":["VISA","PAYPAL"],..
Affichage du ticket par Mercanet
La page de confirmation du paiement, affichée par défaut par Mercanet peut être désactivée. Cette désactivation se fait par le champ paypageData.bypassReceiptPage:
..,"paypageData":{"bypassReceiptPage":"true"},..
Canal de paiement
Pour choisir votre canal de paiement, vous devez remplir le champ orderChannel dans la requête de paiement:
..,"orderChannel":"INTERNET",..
Paiement en fin de journée
Dans le cas d’un paiement en fin de journée, il suffit de remplir les champs captureMode et captureDay:
..,"captureDay":"0","captureMode":"AUTHOR_CAPTURE",..
Paiement différé
Dans le cas d’un paiement à remiser N jours après l’acceptation en ligne, il suffit de remplir les champs captureMode et captureDay(3 jours dans notre exemple) :
..,"captureDay":"3","captureMode":"AUTHOR_CAPTURE",..
Paiement à l’expédition
Dans le cas d’un paiement à l’expédition, la transaction est envoyée en paiement lors votre validation, il faut juste remplir les champs captureMode et captureDay(3 jours de délai possible avant validation dans notre exemple) :
..,"captureDay":"3","captureMode":"VALIDATION",..
Paiement échelonné
Dans le cas d’un paiement en plusieurs échéances liées à une même transaction, il faut renseigner le champ paymentPattern à INSTALMENT et fournir le détail des échéances dans le champ instalmentData (600€ payés en 3 échéances dans notre exemple) :
.."amount":"60000",..,"transactionReference":"tref1",..,"instalmentData":{"amountsList":["10000","20000","30000"],"datesList":["20170504","20170603","20170703"],"number":"3","transactionReferencesList":["tref1","tref2","tref3"]},..,"paymentPattern":"INSTALMENT",…
Paiement immédiat
Si vous souhaitez un paiement immédiat (disponible uniquement pour certains moyens de paiement), la transaction est payée lors de l’autorisation en ligne :
..,"captureMode":"IMMEDIATE",..
Acceptation multidevises
Dans le casdes transactions multidevises le code devise doit être spécifié dans la requête. C’est dans le contrat d’acquisition qu’est précisée la devise de règlement.
..,"currencyCode":"840",..
Règlement en devises
L’acceptation et le règlement sont effectués dans la même devise qui doit être spécifiée dans la requête. Le règlement en devises est une option du contrat d’acquisition.
..,"currencyCode":"826",..
Conversion dynamique des devises (DCC)
Dans le cas où un service financier de conversion dynamique de devise (DCC) est utilisé, le code devise de référence doit être spécifié:
....,"currencyCode":"978",..
Débrayage dynamique du 3D Secure
Pour désactiver dynamiquement l’authentification 3D Secure, il faut spécifier cette action dans le champ fraudData.bypass3DS:
..,{"bypass3DS":"ALL"},..
Débrayage 3D Secure pour paiement Oneclick
Pour désactiver dynamiquement l’authentification 3D Secure pour les paiements en One click, il faut spécifier cette action dans le champ fraudData.bypass3DS:
..,{"bypass3DS":"MERCHANTWALLET"},..
Inscription et paiement Oneclick
Pour un paiement One click, l’identifiant du wallet du client doit être renseigné dans le champ merchantWalletId.
.. ,"merchantWalletId":"1205987",..
Prestataire agissant pour le compte d’un commerçant
Il faut passer l’identifiant du prestataire dans la requête dans le champ intermediateServiceProvider et utiliser la clé secrète de ce dernier pour calculer la donnée Seal:
..,"intermediateServiceProviderId":"241591",..
Traiter la réponse de paiement
Deux types de réponse sont prévus. Bien que les protocoles, formats et contenus soient exactement les mêmes, ces deux réponses doivent être gérées différemment car elles répondent à deux besoins différents. Les réponses de paiements sont des réponses HTTP(S) POST envoyées aux l’URL normalReturnUrl (obligatoire) et automaticResponseUrl (optionnel) précisées dans la requête. Vous devez mettre en place le système permettant de décoder ces réponses, afin de connaitre le résultat du paiement.
Nom du champ |
Commentaires / Règles |
---|---|
data |
Concaténation des champs dans la réponse |
encode |
Type d’encodage utilisé pour la donnée Data, voir responseEncoding |
seal |
Signature du message réponse |
interfaceVersion |
Version de l’interface du connecteur |
Si la valeur de la donnée Encode est “base64” ou “base64url”, la donnée Data doit-être décodée en Base64/Base64Url pour retrouver la chaîne des champs concaténée.
La chaîne concaténée est structurée comme suit: clé1=valeur1|clé2=valeur2…
Le sceau (donnée Seal) des 2 réponses est «hashé» avec le même algorithme utilisé en entrée et fourni dans le champ sealAlgorithm. Si aucune valeur n’a été définie, la valeur SHA-256 est utilisée par défaut.
Remarque
Pour qu’un sceau soit calculé avec l'algorithme HMAC-SHA-256, les paramètres d'entrée de la requête doivent contenir le champ sealAlgorithm avec la valeur suivante : “HMAC-SHA-256”. |
---|
La valeur de la donnée Seal est calculée comme suit :
Pour l’algorithme HMAC-SHA :
- Utilisation de la clé secrète partagée pour générer la variante HMAC du message
- Utilisation de la donnée Data uniquement (encodée si l’option correspondante est choisie)
- Codage UTF-8 des données constituant le résultat de l’opération précédente
- « Hashage » HMAC-SHA des octets obtenus
Cette procédure peut être résumée comme suit :
HMAC-SHA256( UTF-8(Data), UTF-8(secretKey))
Pour l’algorithme SHA-256 (bien que celui-ci soit la valeur par défaut, cet algorithme n’est plus recommandé à ce jour) :
- Concaténation de la donnée Data et de la clé secrète (encodée si l’option correspondante est choisie)
- Codage UTF-8 des données constituant le résultat de l’opération précédente
- « Hashage » SHA256 des octets obtenus
Cette procédure peut être résumée comme suit :
SHA256( UTF-8(Data+secretKey ) )
Renseigner l’URL de la réponse manuelle
L’objectif principal de la réponse manuelle est de rediriger le client vers votre site Web avec le résultat du paiement pour que vous puissiez prendre la bonne décision le concernant. Par exemple, en cas d’erreur, vous pouvez suggérer de retenter le paiement. Dans le cas de paiement réussi, vous pouvez afficher un message de remerciement et commencer à expédier les marchandises.
À la dernière étape, un bouton «Continuer» est affiché sur la page de paiement chez Mercanet avec un lien de redirection vers votre site. Lorsque le client clique sur ce bouton, le serveur Mercanet le redirige vers l’adresse URL contenue dans le champ normalReturnUrl fourni dans la requête. La redirection est une requête HTTP(S) POST qui contient les données de la réponse, tels que décrits ci-dessus. Il est de votre responsabilité de récupérer ces paramètres et de vérifier la signature pour ainsi assurer l’intégrité des données de la réponse. De plus, vous êtes responsable d’afficher les messages pertinents (relatifs aux détails de la réponse) à votre client.
Ce champ normalReturnUrl est également utilisé pour tous les résultats de paiement (annulation, refus ...) afin de rediriger vers votre site.
Il est important de noter qu’il est impossible de garantir la réception de la réponse, celle-ci étant envoyée par le navigateur Web du client. Tout d’abord, le client a la possibilité de ne pas cliquer sur le lien. Ensuite, la connexion qu’il utilise peut tout simplement avoir un problème et bloquer l’envoi de cette réponse. Par conséquent, celle-ci ne peut pas constituer la base unique pour vos processus métier.
Remarque
La version actuelle d’InterfaceVersion est HP_2.21. Veuillez consulter le dictionnaire de données Mercanet pour une description complète des paramètres inclus dans la réponse. |
---|
Renseigner l’URL de la réponse automatique
La réponse automatique est envoyée seulement si le champ automaticResponseUrl a été envoyé dans la requête de paiement. Si tel est le cas, le serveur Mercanet envoie une réponse HTTP(S) POST à l’adresse URL reçue. Les champs de la réponse automatique sont identiques à ceux de la réponse manuelle. La seule différence entre les deux procédures est que la réponse automatique est envoyée directement par le serveur Mercanet sans passer par le navigateur Web du client. Par conséquent, elle est bien plus fiable car elle est toujours envoyée. Le serveur Mercanet n’attend aucune réponse après l’envoi de la réponse automatique. Il vous appartient de récupérer les différentes données de la réponse, vérifier la signature pour vous assurer de l’intégrité des champs de la réponse et, par conséquent, mettre à jour votre back office.
Remarque
La version actuelle d’InterfaceVersion est HP_2.21. Veuillez consulter le dictionnaire de données Mercanet pour une description complète des paramètres inclus dans la réponse. |
---|
Remarque : attention !
La réponse automatique est systématique, asynchrone et renvoyée par le réseau : elle est par définition dépendante des problèmes techniques potentiels des différents éléments de ce réseau et peut donc parfois être reçue avec un retard plus ou moins conséquent, voire même ne jamais être reçue. Si une réponse automatique n’est pas reçue, vous pouvez obtenir le résultat d’un paiement en appelant la méthode getTransactionData de l’interface Office Server, ou en analysant le contenu du journal des transactions. |
---|
Résoudre les problèmes de réception des réponses
Ci-dessous, vous trouverez une liste des problèmes les plus couramment observés qui bloquent la réception des réponses automatiques et manuelles. Assurez-vous de les avoir vérifiés avant d’appeler le service d’assistance technique.
- Vérifiez si les adresses URL de réponse sont fournies dans la requête de paiement et si elles sont valides. Pour le faire, vous pouvez tout simplement les copier et coller dans votre navigateur.
- Les adresses URL fournies doivent être accessibles depuis l’extérieur, c’est-à-dire de l’Internet. Le contrôle d’accès (identifiant/mot de passe ou filtre IP) ou le pare-feu peuvent bloquer l’accès à votre serveur.
- L’accès aux adresses URL de réponse doit être confirmé dans le journal des notifications de votre serveur Web.
- Si vous utilisez un port non standard, il doit être compris entre 80 et 9999 pour assurer la compatibilité avec Mercanet.
- Il est impossible d’ajouter des paramètres de contexte aux adresses URL de réponse. Certains champs peuvent être néanmoins utilisés, par exemple, les champs orderID ou returnContext sont prévus pour les paramètres supplémentaires. Éventuellement, vous pouvez vous servir du champ sessionId pour retrouver les renseignements sur votre client à la fin du processus de paiement.
Dans certains cas d’erreurs, le serveur Mercanet n’est pas capable de signer le message de réponse. Cela s’applique, par exemple, à l’erreur «MerchantID inconnu» et au cas où la clé secrète est inconnue de Mercanet. Pour ces raisons, le serveur de paiement envoie une réponse sans signature dans le champ Seal.
Récupérer les champs des réponses
Le contenu des réponses Mercanet PayPage automatiques et manuelles est identique. Le contenu peut varier en fonction du résultat (réussi ou autre).
Champ |
version |
Commentaires |
---|---|---|
acceptanceSystemApplicationId* |
HP_2.18 |
|
acquirerNativeResponseCode* |
HP_2.12 |
|
acquirerResponseCode* |
HP_2.0 |
|
acquirerResponseIdentifier* |
HP_2.8 |
|
acquirerResponseMessage* |
HP_2.8 |
|
additionalAuthorisationNumber* |
HP_2.8 |
|
amount |
HP_1.0 |
idem requête |
authorisationId* |
HP_1.0 |
|
authorisationTypeLabel* |
HP_2.18 |
|
authorMessageReference* |
HP_2.18 |
|
avsAddressResponseCode* |
HP_2.17 |
|
avsPostcodeResponseCode* |
HP_2.17 |
|
captureDay |
HP_1.0 |
Champ de la requête qui peut-être surchargé par Mercanet |
captureLimiteDate* |
HP_2.3 |
|
captureMode |
HP_1.0 |
Champ de la requête qui peut-être surchargé par Mercanet. |
cardCSCResultCode* |
HP_2.0 |
|
cardProductCode* |
HP_2.12 |
|
cardProductName* |
HP_2.12 |
|
cardProductProfile* |
HP_2.12 |
|
cardProductUsageLabel* |
HP_2.18 |
|
complementaryCode** |
HP_1.0 |
|
complementaryInfo* |
HP_2.0 |
|
creditorId* |
HP_2.7 |
|
currencyCode |
HP_1.0 |
idem requête |
customerBusinessName |
HP_2.17 |
|
customerCompanyName |
HP_2.17 |
|
customerEmail |
HP_2.0 |
idem requête |
customerId |
HP_2.0 |
idem requête |
customerIpAddress |
HP_2.0 |
idem requête ou recalculé par Mercanet Paypage si absent |
customerLegalId |
HP_2.17 |
|
customerMobilePhone |
HP_2.1 |
idem requête |
customerPositionOccupied |
HP_2.17 |
|
dccAmount* |
HP_2.3 |
|
dccCurrencyCode* |
HP_2.3 |
|
dccExchangeRate* |
HP_2.3 |
|
dccExchangeRateValidity* |
HP_2.3 |
|
dccProvider* |
HP_2.3 |
|
dccStatus* |
HP_2.3 |
|
dccResponseCode* |
HP_2.3 |
|
dueDate |
HP_2.3 |
|
guarantheeIndicator* |
HP_2.0 |
|
hashPan1* |
HP_2.0 |
|
hashPan2* |
HP_2.0 |
|
holderAuthentMethod** |
HP_2.4 |
|
holderAuthentProgram* |
HP_2.5 |
|
holderAuthentRelegation* |
HP_2.0 |
|
holderAuthentStatus* |
HP_2.0 |
|
holderContactEmail* |
HP_2.20 |
|
instalmentAmountsList* |
HP_2.6 |
|
instalmentDatesList* |
HP_2.6 |
|
instalmentNumber* |
HP_2.6 |
|
instalmentTransactionReferencesList* |
HP_2.6 |
|
interfaceVersion* |
HP_1.0 |
|
invoiceReference |
HP_2.10 |
|
issuerCode* |
HP_2.12 |
|
issuerCountryCode* |
HP_2.12 |
|
issuerEnrollementIndicator* |
HP_2.0 |
|
issuerWalletInformation |
HP_2.9 |
|
keyVersion* |
HP_1.0 |
idem requête |
mandateAuthentMethod* |
HP_2.2 |
|
mandateCertificationType* |
HP_2.7 |
|
mandateId* |
HP_2.3 |
|
mandateUsage* |
HP_2.2 |
|
maskedPan** |
HP_1.0 |
|
merchantId |
HP_1.0 |
idem requête |
merchantSessionId |
HP_2.0 |
idem requête |
merchantTransactionDateTime |
HP_2.0 |
idem requête |
merchantWalletId |
HP_2.0 |
idem requête |
orderChannel |
HP_2.0 |
idem requête. |
orderId |
HP_1.0 |
idem requête |
panEntryMode* |
HP_2.4 |
|
panExpiryDate* |
HP_2.0 |
|
paymentAttemptNumber |
HP_2.18 |
|
paymentMeanBrand* |
HP_1.0 |
|
paymentMeanBrandSelectionStatus* |
HP_2.14 |
|
paymentMeanData* |
HP_2.2 |
|
paymentMeanId* |
HP_2.6 |
|
paymentMeanTradingName* |
HP_2.8 |
|
paymentMeanType* |
HP_1.0 |
|
paymentPattern* |
HP_2.0 |
idem requête |
preAuthenticationColor |
HP_2.10 |
|
preAuthenticationInfo |
HP_2.10 |
|
preAuthenticationProfile |
HP_2.10 |
|
preAuthenticationProfileValue* |
HP_2.14 |
|
preAuthenticationRuleResultList* |
HP_2.14 |
Une liste d’objet preAuthenticationRuleResult. |
preAuthenticationThreshold |
HP_2.10 |
|
preAuthenticationValue |
HP_2.10 |
|
preAuthorisationProfile* |
HP_2.14 |
|
preAuthorisationProfileValue* |
HP_2.14 |
|
preAuthorisationRuleResultList* |
HP_2.14 |
Une liste d’objet preAuthorisationRuleResult. |
responseCode |
HP_1.0 |
|
returnContext |
HP_1.0 |
idem requête |
s10TransactionId |
HP_2.9 |
|
s10TransactionIdDate |
HP_2.9 |
|
s10transactionIdsList* |
HP_2.11 |
|
scoreColor* |
HP_2.0 |
|
scoreInfo* |
HP_2.0 |
|
scoreProfile* |
HP_2.0 |
|
scoreThreshold* |
HP_2.0 |
|
scoreValue* |
HP_2.0 |
|
settlementMode |
HP_2.7 |
|
settlementModeComplement |
HP_2.13 |
|
statementReference* |
HP_2.4 |
|
tokenPan* |
HP_2.0 |
|
transactionActors* |
HP_2.2 |
idem requête |
transactionDateTime* |
HP_1.0 |
|
transactionOrigin* |
HP_2.0 |
idem requête |
transactionPlatform |
HP_2.16 |
Usage futur (systématiquement valorisé à ‘PROD’ pour le moment) |
transactionReference |
HP_1.0 |
|
walletType* |
HP_2.4 |
- champs renseignés s’ils sont disponibles, en fonction de l’état de la transaction et du moyen de paiement choisi.
Champs optionnels relatifs aux contrôles de fraude
- Contenu de preAuthenticationRuleResult
Champ |
Version |
Commentaires |
---|---|---|
ruleCode |
HP_2.14 |
|
ruleType |
HP_2.14 |
|
ruleWeight |
HP_2.14 |
|
ruleSetting |
HP_2.14 |
|
ruleResultIndicator |
HP_2.14 |
|
ruleDetailedInfo |
HP_2.14 |
|
- Contenu de preAuthorisationRuleResult
Champ |
Version |
Commentaires |
---|---|---|
ruleCode |
HP_2.14 |
|
ruleType |
HP_2.14 |
|
ruleWeight |
HP_2.14 |
|
ruleSetting |
HP_2.14 |
|
ruleResultIndicator |
HP_2.14 |
|
ruleDetailedInfo |
HP_2.14 |
|
Syntaxe des Listes d’objets complexes dans les réponses
Le format d'une liste d'objets complexes dans les réponses automatiques et manuelles est défini comme suit: (surligné en jaune)
..|amount=1000|currencyCode=978|<span>objectNameList=[{"field1":"value1a", "field2":"value2a","field3":"value3a"…},{"field1":"value1b", "field2":"value2b","field3":"value3b"}…]|transactionReference=1452687287828|..
Le contenu de la liste est enveloppé dans une paire de crochets [ ].
Chaque entrée de la liste est enveloppé dans une paire d'accolades { }.
Chaque champ est représenté comme "nomChamp" = "valeurChamp".
Notez que le nom et la valeur du champ sont tous deux enveloppés dans une paire de doubles guillemets "".
Les paires de nom/valeur adjacents sont séparés par une virgule.
Exemple du champ preAuthorisationRuleResultList
Détail des règles fraude executées en préautorisation (surligné en jaune)
..|amount=1000|currencyCode=978|<span>preAuthorisationRuleResultList=[ {”ruleCode”:"SC",”ruleType”:"NG",”ruleWeight”:"I",”ruleSetting”:"S",”ruleResultIndicator”:"0",“ruleDetailedInfo”:"TRANS=1:5;CUMUL=1000:99999900"}, {”ruleCode”:"GC",”ruleType”:"NG",”ruleWeight”:"D",”ruleSetting”:"N",”ruleResultIndicator”:"0",“ruleDetailedInfo”:""}, {”ruleCode”:"CR",”ruleType”:"NG",”ruleWeight”:"D",”ruleSetting”:"S",”ruleResultIndicator”:"N",“ruleDetailedInfo”:"CARD_COUNTRY=USA"}] |transactionReference=1452687287828|..
Analyser la réponse de paiement
Etat |
Champs de la réponse |
Action à réaliser |
---|---|---|
Paiement accepté |
responseCode = 00 acquirerResponseCode = 00 garanteeIndicator = Y,N,U, vide |
Vous pouvez livrer la commande en fonction du niveau de garantie que vous souhaitez (champ garanteeIndicator) |
Refus Fraude Mercanet GONOGO |
responseCode = 05 complementaryCode = XX preAuthorisationRuleResultList |
Le paiement a été refusé par le moteur de fraude Mercanet que vous avez configuré. Ne livrez pas la marchandise. Analysez le détail des règles fraudes exécutées par Mercanet pour connaitre la cause du refus (champ preAuthorisationRuleResultList). |
Refus Fraude Mercanet GONOGO |
responseCode = 05 complementaryCode = XX preAuthorisationRuleResultList |
Le paiement a été refusé par le moteur de fraude Mercanet que vous avez configuré. Ne livrez pas la marchandise. Analysez le détail des règles fraudes exécutées par Mercanet pour connaitre la cause du refus (champ preAuthorisationRuleResultList). |
Refus Fraude Mercanet BUSINESS SCORE |
responseCode = 05
scoreColor = RED, BLACK |
Le paiement a été refusé par le moteur de fraude Mercanet que vous avez configuré Ne livrez pas la marchandise. Analysez le détail des règles fraudes exécutées par Mercanet pour connaitre la cause du refus (champ preAuthorisationRuleResultList). |
Warning Fraude Mercanet BUSINESS SCORE |
responseCode = 05 scoreColor = ORANGE scoreValue = X (score de la transaction) scoreThreshold = X,Y (seuil orange, seuil vert) |
Le paiement a été autorisé par l’acquéreur mais le moteur de fraude Mercanet émet un warning par rapport aux règles que vous avez configurées. Analysez le détail des règles fraudes exécutées par Mercanet pour connaitre la cause du warning (champ preAuthorisationRuleResultList). Si transaction non risquée alors acceptez la avec la fonction acceptChallenge. Si transaction risquée alors refusez la avec la fonction refuseChallenge. Les fonctions acceptChallenge et refuseChallenge sont disponibles sur l’extranet et les connecteurs office. |
Refus 3D Secure |
reponseCode = 05 holderAuthenStatus = FAILURE |
L’authentification de l’acheteur a échoué, ce n’est pas nécessairement un cas de fraude. Vous pouvez proposer à votre client de payer avec autre moyen de paiement en générant une nouvelle requête |
Refus bancaire acquéreur |
responseCode = 05 acquirerResponseCode = XX |
L’autorisation est refusée pour un motif non lié à la fraude. Vous pouvez proposer à votre client de payer avec autre moyen de paiement en générant une nouvelle requête. |
Repli VADS |
responseCode = 05 acquirerResponseCode = A1 |
Le paiement a été refusé par l'acquéreur car il manque les données 3-D Secure dans la demande d'autorisation. Veuillez retenter le paiement avec une cinématique 3-D Secure. |
</tr>
Refus fraude acquéreur |
responseCode = 34 acquirerResponseCode = XX |
Autorisation refusée pour cause de fraude. Ne livrez pas la commande. |
Refus nombre max essais atteint |
responseCode = 75 acquirerResponseCode = XX |
L’acheteur a fait plusieurs tentatives toutes échouées car les informations saisies n’étaient pas correctes. Deux possibilités: Difficulté pour votre client pour renseigner les informations cartes Tentative de carding (recherche de numéros de cartes possibles) Prenez contact avec votre client pour définir la suite à donner. |
Refus suite problème technique |
responseCode = 90, 99 acquirerResponseCode = 90 à 98 |
Problème technique temporaire lors du traitement de la transaction. Proposez à votre client de refaire un paiement ultérieurement. |
Etape 3: Tester sur l’environnement de test
Une fois le développement de la connexion à Mercanet Paypage réalisé, vous pouvez effectuer un test sur le serveur Mercanet Paypage de test.
Pour effectuer ce test, il faut utiliser les identifiants en fonction de mode d’identification des transactions que vous souhaitez :
URL de test du serveur https://payment-webinit.mercanet.test.sips-atos.com/rs-services/v2/paymentInit
[Les informations sur la boutique de test à utiliser est décrite ici].
Ce serveur de test n’est pas raccordé aux serveurs bancaires réels car sa fonction est de valider la connexion entre votre site Web et le serveur de paiement.
Mercanet Paypage simule donc l’appel aux serveurs d’autorisation pour vous permettre de tester les différents résultats d’un paiement.
Les tests s'effectuent avec des cartes de tests (cf paragraphe suivant).
Remarque
Puisque l’identifiant Marchand est partagé entre tous les commerçants/prospects, il existe un risque de doublon de transactionReference. Par conséquent, il est vivement recommandé que tous les transactionReference soient préfixés par le nom de la future boutique qui sera utilisée dans l’environnement de production. Cela facilite aussi le support en cas d’appel à l’assistance technique. |
---|
Tester des transactions
Etape 4: Valider le passage en production
Une fois la connexion de votre site web à Mercanet paypage testée, vous êtes à présent en mesure de valider la connexion à Mercanet Paypage de production.
Si vous souhaitez personnaliser vos pages de paiement, vous pouvez utiliser notre outil CustomPages, permettant de tester et visualiser le rendu sur les pages de paiement. Pour cela, merci de vous référer à la documentation CustomPages afin d’utiliser l’outil.
Au préalable, nous conseillons d’isoler votre site web du public pour éviter que des clients effectuent des transactions pendant cette phase de validation.
Pour basculer sur le serveur de production, vous devez changer l’URL pour vous connecter au serveur Mercanet de production en utilisant les identifiants reçus lors l’inscription merchantId, secretKey et keyVersion).
Information | Valeur |
---|---|
URL Mercanet | https://payment-webinit.mercanet.bnpparibas.net/rs-services/v2/paymentInit |
merchantId | Identifiant de la boutique reçu par mail |
SecretKey | Clé secrète que vous récupérez via l’extranet Mercanet Download |
KeyVersion | Version clé secrète récupérée sur Mercanet Download (logiquement 1 pour la 1ère clé) |
Remarque
Une erreur fréquente est d’oublier un de ces 4 paramètres ce qui conduit systématiquement à une erreur. |
---|
Comment valider le bon fonctionnement en production
Immédiatement
- Faîtes une transaction avec une carte de paiement réelle (si possible la vôtre)
Si la transaction est acceptée, elle sera envoyée en banque pour créditer votre compte commerçant et débiter le compte carte.
- Vérifier que vos pages de paiement intègrent vos paramètres de personnalisation
- Consultez la transaction via Mercanet Office Extranet à partir du transactionReference
Le lendemain
- Vérifiez la présence de la transaction dans le journal des transactions
- Vérifiez sur votre compte que l’opération a bien été créditée
- Remboursez la transaction via Mercanet Office Extranet (optionnel)
Le surlendemain
- Vérifiez que l’opération de remboursement apparait dans le journal des opérations
- Vérifiez sur votre compte commerçant le débit suite au remboursement
Etape 5: Démarrer en production
Une fois la validation du passage en production effectuée, ouvrez votre site au public pour permettre à vos clients d’acheter et de payer.
Dans la journée
- Surveillez le taux d’acceptation (nombre de responseCode 00/nombre total de transactions).
- Vérifiez la nature des refus non bancaires
- Problème technique: responseCode 90, 97, 99
- Fraude: responseCode 34
- Nombre max de tentatives de paiement atteint: responseCode 75
Le lendemain
- Vérifiez dans le journal des transactions la présence de toutes les transactions traitées (acceptées et refusées)
- Vérifiez dans le journal des opérations les opérations que vous avez effectuées ainsi que les remises (option du journal)