En vigueur depuis le début de l’année 2018, la deuxième Directive sur les Services de Paiement (DSP2) redéfinit les normes de sécurité des paiements en ligne. Compte tenu de la forte croissance du commerce en ligne en Europe, elle vise à apporter plus de sécurité lors de la phase du paiement, tout en luttant plus activement contre les tentatives de fraude.
Pour consulter le texte de loi à ce sujet, vous pouvez cliquer ici.
Tel est l’objectif de la DSP2 : renforcer et accroître la confiance des e-shoppers
Avec la mise en application des normes techniques de réglementation (« Regulatory Technical Standards » ou RTS) découlant de la DSP2 depuis le 14 septembre 2019, de nouvelles exigences en termes d’authentification forte devront être appliquées à l’ensemble des transactions effectuées sur Internet pour une meilleure protection des consommateurs.
Il est donc nécessaire de vous mettre en conformité avec le 3-D Secure v2, nouvelle version du protocole d’EMVCo (organisme regroupant des représentants des principaux réseaux de cartes et des leaders de l’industrie du paiement) normalisant le processus d’authentification forte pour les paiements en ligne.
N.B. : Le standard 3-D Secure ne s’applique que pour les paiements par carte (Visa, Mastercard, CB, American Express) et non pour les paiements réalisés via des méthodes de paiement alternatives ou locales (Klarna, iDEAL, Bancontact…).
En tant que prestataire de services de paiement, HiPay est là pour vous accompagner et faciliter votre transition vers ces nouvelles modalités d’authentification.
Ce qui change à partir du 14 septembre 2019
Aujourd’hui, le marchand ou son prestataire de paiement décide de recourir à l’authentification forte des transactions en fonction de sa politique de gestion de la fraude via un déclenchement du 3-D Secure 1.0. Les clients finaux sont alors redirigés vers une page de leur banque, où ils doivent, pour prouver leur identité, saisir un code à usage unique, généralement reçu par SMS.
À partir du 14 septembre 2019, la décision d’appliquer l’authentification forte sera prise par l’émetteur, banque du porteur de la carte (le consommateur). L’émetteur prendra cette décision en fonction des nombreux critères définis par la DSP2 (limitations, exemptions, gestion du taux de fraude…) et de l’analyse de plus de 150 données collectées à chaque processus d’achat.
Ainsi, afin de se conformer aux nouvelles exigences de la DSP2 et d’améliorer l’expérience utilisateur, le protocole 3-D Secure v2 a été développé pour bénéficier d’une authentification plus dynamique, plus sûre, et intégrant des méthodes innovantes d’authentification, comme les solutions d’authentification biométriques.
Mais surtout, la version 2 du protocole permettra aux marchands de proposer des parcours d’achat plus intégrés à leur environnement.
Lorsque les émetteurs jugeront que les données envoyées permettent d'identifier le porteur, ou que la transaction répond à certains critères d’éligibilité, le processus d’authentification sera complètement transparent pour le consommateur.
À l’inverse, lorsque les données analysées ne permettront pas d’identifier le porteur, une authentification forte sera requise.
Dans les deux cas, le transfert de responsabilité vers l’émetteur sera appliqué.
Bien comprendre le processus d’authentification forte
Cette nouvelle exigence impose aux clients de s’authentifier fortement lors de la finalisation de leurs achats, c’est-à-dire de combiner deux facteurs indépendants d’authentification.
Ces facteurs d’authentification peuvent être :
quelque chose de connu par le client (exemple : mot de passe, question secrète, code secret, etc.),
quelque chose appartenant au client (exemple : téléphone portable, appareil connecté, token, carte à puce, etc.),
quelque chose caractérisant le client (exemple : empreinte digitale, reconnaissance faciale ou vocale, reconnaissance d’iris, etc.).
La réponse technique à ces nouvelles exigences liées à l’authentification forte passe par la mise en place du 3-D Secure v2.
Pour être conforme à cette nouvelle réglementation, il est donc nécessaire :
- d’intégrer les champs requis pour le bon fonctionnement du 3-D Secure v2,
- d’évaluer le périmètre de vos transactions pouvant être exemptées d’authentification forte.
Transactions hors périmètre et exemptées d’authentification forte
Certaines transactions pourront bénéficier d’une exemption d’authentification forte; d’autres sont hors du champ de la DSP2.
Grâce aux outils de lutte anti-fraude de HiPay, nos équipes travailleront conjointement avec les marchands afin de permettre une mise en place optimale des exemptions, avec pour objectif de maximiser la fluidité des parcours d’achat, tout en luttant activement contre la fraude.
Pour plus d’informations sur les exemptions possibles, veuillez consulter notre page Web dédiée à la DSP2.
HiPay vous accompagne dans la mise en conformité avec la DSP2
Afin d’être conforme avec les exigences définies dans la DSP2, HiPay vous accompagne dans l’évolution de votre intégration technique.
Pour cela, HiPay a simplifié la mise en place du 3-D Secure v2, en minimisant les contraintes d’intégration de votre côté.
La mise en place du nouveau protocole ne modifie pas l’architecture actuelle entre le marchand et HiPay.
Cependant, afin de maximiser le succès de vos transactions et de simplifier les parcours d’achat de vos clients, il est fortement recommandé de collecter les nouveaux types de données décrits ci-dessous et de les transmettre à HiPay.
Nous vous invitons d’ores et déjà à prendre connaissance des nouveaux champs à intégrer, décrits dans le tableau qui suit.
Pour nos marchands utilisant nos modules CMS (Magento, PrestaShop, WooCommerce) ou nos SDK (iOS, Android, PHP, JavaScript), nous vous communiquerons leurs dates de publication. |
---|
Nouveaux champs à intégrer aux API /order et /hpayment existantes
Nom de l'objet / champ | Requis | Description |
---|---|---|
Identité du client | Oui |
|
Adresse de facturation | Oui |
|
Titulaire de la carte | Oui |
Nom du titulaire de la carte (pour la tokenization)
|
account_info | Non | Informations relatives au compte du client |
device_channel | Oui | Appareil depuis lequel la transaction est initiée |
browser_info | Oui | Informations de navigation du client |
merchant_risk_statement | Non | Informations relatives à la commande du client, permettant d'effectuer une évaluation du risque de celle-ci |
recurring_info | Non | Informations relatives à une transaction récurrente |
Remarque : tous les champs non requis sont fortement conseillés.
account_info [customer]
Nom de champ | Format | Requis | Description / Remarque / Exemple de valeur |
---|---|---|---|
account_change |
YYYYMMDD Integer |
Non |
Date de la dernière modification réalisée par le client sur son compte, incluant l'adresse de livraison et de facturation, l'ajout d'un moyen de paiement ou d'un utilisateur Remarque : Mettre en place un champ sur votre table utilisateur permettant d'enregistrer toute modification réalisée par l'utilisateur sur son compte, puis récupérer cette valeur. Exemple de valeur : 20180507 |
opening_account_date |
YYYYMMDD Integer |
Non |
Date de création du compte client Remarque : Mettre en place un champ sur votre table utilisateur permettant d'enregistrer la date de création du compte client. Exemple de valeur : 20180507 |
password_change |
YYYYMMDD Integer |
Non |
Date de la dernière modification du mot de passe du compte client Remarque : Mettre en place un champ sur votre table utilisateur permettant de signaler toute modification du mot de passe du compte client, puis récupérer cette valeur. Exemple de valeur : 20180507 |
account_info [purchase]
Nom de champ | Format | Requis | Description / Remarque / Exemple de valeur |
---|---|---|---|
count | Integer (4) | Non |
Nombre de commande(s) du client durant les six derniers mois (tous moyens de paiement confondus) Remarque : Récupérer le nombre de commandes, quel que soit le moyen de paiement utilisé et quel que soit le statut de la commande effectuée par le client (ex. : remboursée, annulée, etc.). Exemple de valeur : 2 |
card_stored_24h | Integer (3) | Non |
Nombre de tentative(s) d'ajout de carte dans le compte client au cours des dernières 24 heures Remarque : Mettre en place une table qui enregistre les tentatives de sauvegarde de carte par un client avec la date et l'heure de la tentative. Exemple de valeur : 0 |
payment_attempts_24h | Integer (3) | Non |
Nombre de transaction(s) (paiements par carte de paiement) du client dans les 24 dernières heures Remarque : Récupérer le nombre de commandes du client à Date Heure - 24H avec un paiement effectué par carte bancaire.
0 |
payment_attempts_1y | Integer (3) | Non |
Nombre de transaction(s) (paiements par carte de paiement) du client dans les 12 derniers mois Remarque : Récupérer le nombre de commandes du client à Date Heure - 365J avec un paiement effectué par carte bancaire. Exemple de valeur : 0 |
account_info [payment]
Nom de champ | Format | Requis | Remarque / Exemple de valeur |
---|---|---|---|
enrollment_date |
YYYYMMDD Integer |
Non |
Remarque : Pour un paiement en un clic, renseigner la date à laquelle la carte de paiement a été sauvegardée dans le compte client. Si le paiement est effectué avec une carte enregistrée, récupérer la date à laquelle la carte a été sauvegardée dans le compte client. Exemple de valeur : 20180507 |
account_info [shipping]
Nom de champ | Format | Requis |
Description / Remarque / Exemple de valeur / Valeurs possibles |
---|---|---|---|
shipping_used_date |
YYYYMMDD Integer |
Non |
Date de la première commande du client effectuée avec cette adresse de livraison Exemple de valeur : 20180507 |
name_indicator | Integer (1) | Non |
Indique si le nom du client est identique à celui de l'adresse de livraison pour cette transaction Valeurs possibles : 1 = Nom sur le compte identique à celui pour la livraison |
suspicious_activity | Integer (1) | Non |
Indique si le marchand a rencontré des activités suspicieuses (dont de la fraude) sur ce compte client Remarque : Si vous avez souscrit à HiPay Sentinel, vous n'avez pas à renseigner cette information. Si vous n'avez pas souscrit à HiPay Sentinel, vous devez nous envoyer la valeur (1 ou 2) correspondant à l'information de votre système anti-fraude. Valeurs possibles : 1 = Aucune activité suspecte observée |
Exemple JSON :
"account_info": {
"customer": {
"account_change": 20180507,
"opening_account_date": 20180507,
"password_change": 20180507
},
"purchase": {
"count": 2,
"card_stored_24h": 0,
"payment_attempts_24h": 0,
"payment_attempts_1y": 0
},
"payment": {
"enrollment_date": 20180507,
},
"shipping": {
"shipping_used_date": 20180507,
"name_indicator": 1,
"suspicious_activity": 1
}
}
device_channel
Format | Requis | Description / Remarque / Valeurs possibles |
---|---|---|
Integer (1) | Oui |
Indique le canal utilisé pour initier la transaction Valeurs possibles : 2 = Browser (BRW) |
browser_info
Si votre intégration utilise les méthodes Hosted Fields / Hosted Payments, les données browser_info vous seront retournées dans la réponse de la méthode getPaymentData (en format JSON).
Si vous utilisez un CMS, les données browser_info seront récupérées et envoyées à HiPay de façon automatique.
Si vous n’utilisez pas de CMS ni les méthodes Hosted Fields / Hosted Payments, mais que vous utilisez le SDK JavaScript HiPay, vous pouvez appeler la méthode getBrowserInfo pour récupérer les données browser_info.
Dans tout autre cas, vous devez récupérer directement les données browser_info pour nous les fournir.
browser_info [java_enabled]
Format | Requis | Description / Remarque |
---|---|---|
Boolean | Oui |
Booléen représentant la possibilité pour le navigateur du client d'exécuter du Java Remarque : Utiliser la méthode Java suivante : navigator.javaEnabled() |
browser_info [javascript_enabled]
Format | Requis | Description / Remarque / Valeurs possibles |
---|---|---|
Boolean | Oui |
Booléen représentant la possibilité pour le navigateur du client d'exécuter du JavaScript Remarque : Par défaut à true Valeurs possibles : True False |
browser_info [language]
Format | Requis | Description / Remarque / Exemple de valeur |
---|---|---|
String (5) | Oui |
Valeur représentant la langue du navigateur du client comme définie dans IETF BCP47 Remarque : Utiliser la méthode JavaScript suivante : navigator.language Exemple de valeur : fr-FR |
browser_info [color_depth]
Format | Requis | Description / Remarque / Valeurs possibles |
---|---|---|
Integer (1 - 2) | Seulement si javascript_enabled = oui |
Valeur représentant la profondeur de la palette de couleurs pour afficher une image, en bits/pixel Remarque : Utiliser la méthode JavaScript suivante : window.screen.colorDepth Valeurs possibles : 1 = 1 bit |
browser_info [screen_height]
Format | Requis | Description / Remarque / Exemple de valeur |
---|---|---|
Integer (1 - 6) | Seulement si javascript_enabled = oui |
Hauteur totale de l'écran du client (en pixels) Remarque : Utiliser la méthode JavaScript suivante : window.screen.height Exemple de valeur : 1080 |
browser_info [screen_width]
Format | Requis | Description / Remarque / Exemple de valeur |
---|---|---|
Integer (1 - 6) | Seulement si javascript_enabled = oui |
Largeur totale de l'écran du client (en pixels) Remarque : Utiliser la méthode JavaScript suivante : window.screen.width Exemple de valeur : 1920 |
browser_info [timezone]
Format | Requis | Description / Remarque / Exemple de valeur |
---|---|---|
String (1 - 5) | Seulement si javascript_enabled = oui |
Décalage horaire en minutes entre l'heure UTC et l'heure locale du navigateur du titulaire de la carte Remarque : Utiliser la méthode JavaScript suivante : new Date().getTimezoneOffset() Exemple de valeur : 300 |
browser_info [ipaddr]
Format | Requis | Description / Exemple de valeur |
---|---|---|
String | Oui |
Adresse IP du client effectuant l'achat Exemple de valeur : 127.0.0.1 |
browser_info [http_accept]
Format | Requis | Description / Exemple de valeur |
---|---|---|
String | Oui |
Cet élément doit comprendre le contenu exact de l'en-tête HTTP Accept, tel qu'envoyé au marchand depuis le navigateur du client. Exemple de valeur : */* |
browser_info [http_user_agent]
Format | Requis | Description / Exemple de valeur |
---|---|---|
String | Oui |
Cet élément doit comprendre le contenu exact de l'en-tête HTTP User_Agent, tel qu'envoyé au marchand depuis le navigateur du client. Exemple de valeur : Mozilla/4.0 |
Exemple JSON pour toute la section browser_info :
"browser_info": {
"java_enabled": true,
"javascript_enabled": true,
"ipaddr": "127.0.0.1",
"http_accept": "*/*",
"http_user_agent": "Mozilla/4.0",
"language": "fr-FR",
"color_depth": 1,
"screen_height": 1080,
"screen_width": 1920,
"timezone": "300"
}
merchant_risk_statement [email_delivery_address]
Format | Requis | Description / Remarque / Exemple de valeur |
---|---|---|
String (254) | Non |
Adresse électronique de livraison pour les produits dématérialisés Remarque : Renseigner si la commande contient au moins un produit dématérialisé. Exemple de valeur : jeanne.dupont@test.com |
merchant_risk_statement [delivery_time_frame]
Format | Requis | Description / Remarque / Valeurs possibles |
---|---|---|
Integer (1) | Non |
Information sur le délai de livraison de la commande Remarque : En fonction de la méthode de livraison et du transporteur choisis par le client pour la commande, récupérer un délai approximatif de livraison. Valeurs possibles : 1 = Livraison électronique |
merchant_risk_statement [purchase_indicator]
Format | Requis | Description / Remarque / Valeurs possibles |
---|---|---|
Integer (1) | Non |
Information sur la disponibilité des produits Remarque : Renseigner la valeur 2 (disponibilité future) uniquement si aucun produit de la commande en cours n'est en stock. Valeurs possibles : 1 = Marchandise disponible |
merchant_risk_statement [pre_order_date]
Format | Requis | Description / Remarque / Exemple de valeur |
---|---|---|
YYYYMMDD Integer (8) |
Non |
Date prévisionnelle d'approvisionnement dans le cas d'une pré-commande Remarque : Si aucun produit n'est en stock lors de la commande (purchase_indicator = 2), renseigner la date de réapprovisionnement. Exemple de valeur : 20190925 |
merchant_risk_statement [reorder_indicator]
Format | Requis | Description / Remarque / Valeurs possibles |
---|---|---|
Integer (1) | Non |
Indique si le client a déjà commandé les mêmes produits avec les mêmes quantités Remarque : Rechercher dans l'historique des commandes du client si une commande a déjà été effectuée pour les mêmes références produits et les mêmes quantités. Valeurs possibles : 1 = Commandé pour la première fois |
merchant_risk_statement [shipping_indicator]
Format | Requis | Description / Remarque / Valeurs possibles |
---|---|---|
Integer (1) | Non |
Information concernant l'adresse de livraison Remarque : Renseigner cette information en fonction des typologies de produit de la commande et du mode de livraison. 5 = Biens numériques (services en ligne, cartes cadeaux électroniques, ou codes promotionnels) 1 = Livraison à l'adresse de facturation du titulaire de la carte Valeurs possibles : 1 = Livraison à l'adresse de facturation du titulaire de la carte |
merchant_risk_statement [gift_card]
Nom de champ | Format | Requis | Description / Remarque / Exemple de valeur |
---|---|---|---|
amount | Number | Non |
Concerne l'achat de cartes prépayées ou de cartes cadeaux : montant total des cartes achetées Remarque : Si la commande contient des produits de type carte cadeau ou prépayée, récupérer le montant total des cartes achetées. Exemple de valeur : 15.00 |
count | Integer | Non |
Concerne l'achat de cartes prépayées ou de cartes cadeaux : nombre total de cartes achetées Remarque : Si la commande contient des produits de type carte cadeau ou prépayée, récupérer le nombre total de cartes achetées. Exemple de valeur : 0 |
currency | String (3) | Non |
Concerne l'achat de cartes prépayées ou de cartes cadeaux : code ISO 4217 de la devise des cartes Remarque : Si la commande contient des produits de type carte cadeau ou prépayée, récupérer la devise des cartes. Exemple de valeur : EUR |
Exemple JSON :
"merchant_risk_statement": {
"email_delivery_address": "jeanne.dupont@test.com",
"delivery_time_frame": 1,
"purchase_indicator": 1,
"pre_order_date": 20190925,
"reorder_indicator": 1,
"shipping_indicator": 1,
"gift_card": {
"amount": 15,
"count": 1,
"currency": "EUR"
}
}
recurring_info [expiration_date]
Format | Requis | Description / Exemple de valeur |
---|---|---|
YYYYMMDD Integer |
Non |
Dans le cadre d'une transaction récurrente, date après laquelle plus aucune autorisation ne doit être réalisée Exemple de valeur : 20180507 |
recurring_info [frequency]
Format | Requis | Description / Exemple de valeur |
---|---|---|
Integer (4) | Non |
Dans le cadre d'une transaction récurrente, indique le nombre de jour(s) minimum entre les autorisations Exemple de valeur : 31 |
Exemple JSON :
"recurring_info:" {
"expiration_date": 20200318,
"frequency": 31
}
Exemple complet PHP :
$data = array(
// Informations commande
"orderid"=> "hipay-test-12345678910",
"description"=> "test product 01",
"long_description"=> "full description of test product 01",
"payment_product"=> "mastercard",
"cardtoken"=> "daaf85868bcaee8klniazereiuop7b0ce133e88d",
"eci"=> "7",
"authentication_indicator"=> "1",
"operation"=> "authorization",
"currency"=> "EUR",
"amount"=> 100,
"shipping"=> 1,
"tax"=> 1,
"tax_rate"=> 1,
"custom_data" => '{
"shipping_method":"click and collect",
"first_order":"0",
"products_list":"First product, Second product",
"_reporting_data_1":"my custom data 1",
"_reporting_data_2":"my custom data 2",
"_reporting_data_3":"my custom data 3",
"_reporting_data_4":"my custom data 4",
"_reporting_data_5":"my custom data 5"
}',
// Informations client
"email"=> "jane.doe@test.com",
"phone"=> "01234567890",
"birthdate"=> "19890525",
"gender"=> "f",
"firstname"=> "Jane",
"lastname"=> "Doe",
"country"=> "FR",
"streetaddress"=> "10 rue de la facturation",
"streetaddress2"=> "",
"city"=> "Paris",
"zipcode"=> "75012",
"shipto_firstname"=> "Jane",
"shipto_lastname"=> "Doe",
"shipto_streetaddress"=> "20 rue de la livraison",
"shipto_streetaddress2"=> "",
"shipto_city"=> "Paris",
"shipto_zipcode"=> "75012",
"shipto_country"=> "FR",
"cid"=> "123456",
"ipaddr"=> "xxx.xx.xxx.xx",
"accept_url"=> "",
"decline_url"=> "",
"pending_url"=> "",
"exception_url"=> "",
"cancel_url"=> "",
//Informations DSP2
"account_info"=> "{
'customer': {
'account_change': 20180507,
'opening_account_date': 20180507,
'password_change': 20180507,
},
'purchase': {
'count': 2,
'card_stored_24h': 0,
'payment_attempts_24h': 0,
'payment_attempts_1y': 0
},
'payment': {
'enrollment_date': 20180507
},
'shipping': {
'shipping_used_date': 20180507,
'name_indicator': 1,
'suspicious_activity': 1
}
}",
"device_channel"=> 2,
"browser_info"=> "{
'java_enabled': true,
'javascript_enabled': true,
'ipaddr': '127.0.0.1',
'http_accept': '*/*',
'http_user_agent': 'Mozilla/4.0',
'language': 'fr-FR',
'color_depth': 1,
'screen_height': 0,
'screen_width': 0,
'timezone': '300'
}",
"merchant_risk_statement"=> "{
'email_delivery_address': 'jane.doe@test.com',
'delivery_time_frame': 1,
'purchase_indicator': 1,
'pre_order_date': 20190925,
'reorder_indicator': 1,
'shipping_indicator': 1,
'gift_card': {
'amount': 15,
'count': 1,
'currency': 'EUR' }
}",
"recurring_info"=> "{
'expiration_date': 20200318,
'frequency': 31
}"
);
Nom de l'objet / champ | Requis | Description |
---|---|---|
Identité du client | Oui |
|
Adresse de facturation | Oui |
|
account_info | Non | Informations relatives au compte du client |
device_channel | Oui | Appareil depuis lequel la transaction est initiée |
merchant_risk_statement | Non | Informations relatives à la commande du client, permettant d'effectuer une évaluation du risque de celle-ci |
recurring_info | Non | Informations relatives à une transaction récurrente |
Remarque : tous les champs non requis sont fortement conseillés.
account_info [customer]
Nom de champ | Format | Requis | Description / Remarque / Exemple de valeur |
---|---|---|---|
account_change |
YYYYMMDD Integer |
Non |
Date de la dernière modification réalisée par le client sur son compte, incluant l'adresse de livraison et de facturation, l'ajout d'un moyen de paiement ou d'un utilisateur Remarque : Mettre en place un champ sur votre table utilisateur permettant d'enregistrer toute modification réalisée par l'utilisateur sur son compte, puis récupérer cette valeur. Exemple de valeur : 20180507 |
opening_account_date |
YYYYMMDD Integer |
Non |
Date de création du compte client Remarque : Mettre en place un champ sur votre table utilisateur permettant d'enregistrer la date de création du compte client. Exemple de valeur : 20180507 |
password_change |
YYYYMMDD Integer |
Non |
Date de la dernière modification du mot de passe du compte client Remarque : Mettre en place un champ sur votre table utilisateur permettant de signaler toute modification du mot de passe du compte client, puis récupérer cette valeur. Exemple de valeur : 20180507 |
account_info [purchase]
Nom de champ | Format | Requis | Description / Remarque / Exemple de valeur |
---|---|---|---|
count | Integer (4) | Non |
Nombre de commande(s) du client durant les six derniers mois (tous moyens de paiement confondus) Remarque : Récupérer le nombre de commandes, quel que soit le moyen de paiement utilisé et quel que soit le statut de la commande effectuée par le client (ex. : remboursée, annulée, etc.). Exemple de valeur : 2 |
card_stored_24h | Integer (3) | Non |
Nombre de tentative(s) d'ajout de carte dans le compte client au cours des dernières 24 heures Remarque : Mettre en place une table qui enregistre les tentatives de sauvegarde de carte par un client avec la date et l'heure de la tentative. Exemple de valeur : 0 |
payment_attempts_24h | Integer (3) | Non |
Nombre de transaction(s) (paiements par carte de paiement) du client dans les 24 dernières heures Remarque : Récupérer le nombre de commandes du client à Date Heure - 24H avec un paiement effectué par carte bancaire.
0 |
payment_attempts_1y | Integer (3) | Non |
Nombre de transaction(s) (paiements par carte de paiement) du client dans les 12 derniers mois Remarque : Récupérer le nombre de commandes du client à Date Heure - 365J avec un paiement effectué par carte bancaire. Exemple de valeur : 0 |
account_info [payment]
Nom de champ | Format | Requis | Remarque / Exemple de valeur |
---|---|---|---|
enrollment_date |
YYYYMMDD Integer |
Non |
Remarque : Pour un paiement en un clic, renseigner la date à laquelle la carte de paiement a été sauvegardée dans le compte client. Si le paiement est effectué avec une carte enregistrée, récupérer la date à laquelle la carte a été sauvegardée dans le compte client. Exemple de valeur : 20180507 |
account_info [shipping]
Nom de champ | Format | Requis |
Description / Remarque / Exemple de valeur / Valeurs possibles |
---|---|---|---|
shipping_used_date |
YYYYMMDD Integer |
Non |
Date de la première commande du client effectuée avec cette adresse de livraison Exemple de valeur : 20180507 |
name_indicator | Integer (1) | Non |
Indique si le nom du client est identique à celui de l'adresse de livraison pour cette transaction Valeurs possibles : 1 = Nom sur le compte identique à celui pour la livraison |
suspicious_activity | Integer (1) | Non |
Indique si le marchand a rencontré des activités suspicieuses (dont de la fraude) sur ce compte client Remarque : Si vous avez souscrit à HiPay Sentinel, vous n'avez pas à renseigner cette information. Si vous n'avez pas souscrit à HiPay Sentinel, vous devez nous envoyer la valeur (1 ou 2) correspondant à l'information de votre système anti-fraude. Valeurs possibles : 1 = Aucune activité suspecte observée |
Exemple JSON :
"account_info": {
"customer": {
"account_change": 20180507,
"opening_account_date": 20180507,
"password_change": 20180507
},
"purchase": {
"count": 2,
"card_stored_24h": 0,
"payment_attempts_24h": 0,
"payment_attempts_1y": 0
},
"payment": {
"enrollment_date": 20180507,
},
"shipping": {
"shipping_used_date": 20180507,
"name_indicator": 1,
"suspicious_activity": 1
}
}
device_channel
Format | Requis | Description / Remarque / Valeurs possibles |
---|---|---|
Integer (1) | Oui |
Indique le canal utilisé pour initier la transaction Valeurs possibles : 2 = Browser (BRW) |
merchant_risk_statement [email_delivery_address]
Format | Requis | Description / Remarque / Exemple de valeur |
---|---|---|
String (254) | Non |
Adresse électronique de livraison pour les produits dématérialisés Remarque : Renseigner si la commande contient au moins un produit dématérialisé. Exemple de valeur : jeanne.dupont@test.com |
merchant_risk_statement [delivery_time_frame]
Format | Requis | Description / Remarque / Valeurs possibles |
---|---|---|
Integer (1) | Non |
Information sur le délai de livraison de la commande Remarque : En fonction de la méthode de livraison et du transporteur choisis par le client pour la commande, récupérer un délai approximatif de livraison. Valeurs possibles : 1 = Livraison électronique |
merchant_risk_statement [purchase_indicator]
Format | Requis | Description / Remarque / Valeurs possibles |
---|---|---|
Integer (1) | Non |
Information sur la disponibilité des produits Remarque : Renseigner la valeur 2 (disponibilité future) uniquement si aucun produit de la commande en cours n'est en stock. Valeurs possibles : 1 = Marchandise disponible |
merchant_risk_statement [pre_order_date]
Format | Requis | Description / Remarque / Exemple de valeur |
---|---|---|
YYYYMMDD Integer (8) |
Non |
Date prévisionnelle d'approvisionnement dans le cas d'une pré-commande Remarque : Si aucun produit n'est en stock lors de la commande (purchase_indicator = 2), renseigner la date de réapprovisionnement. Exemple de valeur : 20190925 |
merchant_risk_statement [reorder_indicator]
Format | Requis | Description / Remarque / Valeurs possibles |
---|---|---|
Integer (1) | Non |
Indique si le client a déjà commandé les mêmes produits avec les mêmes quantités Remarque : Rechercher dans l'historique des commandes du client si une commande a déjà été effectuée pour les mêmes références produits et les mêmes quantités. Valeurs possibles : 1 = Commandé pour la première fois |
merchant_risk_statement [shipping_indicator]
Format | Requis | Description / Remarque / Valeurs possibles |
---|---|---|
Integer (1) | Non |
Information concernant l'adresse de livraison Remarque : Renseigner cette information en fonction des typologies de produit de la commande et du mode de livraison. 5 = Biens numériques (services en ligne, cartes cadeaux électroniques, ou codes promotionnels) 1 = Livraison à l'adresse de facturation du titulaire de la carte Valeurs possibles : 1 = Livraison à l'adresse de facturation du titulaire de la carte |
merchant_risk_statement [gift_card]
Nom de champ | Format | Requis | Description / Remarque / Exemple de valeur |
---|---|---|---|
amount | Number | Non |
Concerne l'achat de cartes prépayées ou de cartes cadeaux : montant total des cartes achetées Remarque : Si la commande contient des produits de type carte cadeau ou prépayée, récupérer le montant total des cartes achetées. Exemple de valeur : 15.00 |
count | Integer | Non |
Concerne l'achat de cartes prépayées ou de cartes cadeaux : nombre total de cartes achetées Remarque : Si la commande contient des produits de type carte cadeau ou prépayée, récupérer le nombre total de cartes achetées. Exemple de valeur : 1 |
currency | String (3) | Non |
Concerne l'achat de cartes prépayées ou de cartes cadeaux : code ISO 4217 de la devise des cartes Remarque : Si la commande contient des produits de type carte cadeau ou prépayée, récupérer la devise des cartes. Exemple de valeur : EUR |
Exemple JSON :
"merchant_risk_statement": {
"email_delivery_address": "jeanne.dupont@test.com",
"delivery_time_frame": 1,
"purchase_indicator": 1,
"pre_order_date": 20190925,
"reorder_indicator": 1,
"shipping_indicator": 1,
"gift_card": {
"amount": 15,
"count": 1,
"currency": "EUR"
}
}
recurring_info [expiration_date]
Format | Requis | Description / Exemple de valeur |
---|---|---|
YYYYMMDD Integer |
Non |
Dans le cadre d'une transaction récurrente, date après laquelle plus aucune autorisation ne doit être réalisée Exemple de valeur : 20180507 |
recurring_info [frequency]
Format | Requis | Description / Exemple de valeur |
---|---|---|
Integer (4) | Non |
Dans le cadre d'une transaction récurrente, indique le nombre de jour(s) minimum entre les autorisations Exemple de valeur : 31 |
Exemple JSON :
"recurring_info:" {
"expiration_date": 20200318,
"frequency": 31
}
Exemple complet PHP :
$data = array(
// Design et paramétrage de la page de paiement
"template" =>"basic-js",
"time_to_limit_to_pay" =>"",
"css" =>"",
"language" =>"fr_FR",
"merchant_display_name" =>"My company name",
"display_selector"=>"1",
// Informations commande
"orderid" => "hipay-test-12345678910",
"description" => "produit test 01",
"long_description" => "produit test 01 description complète",
"payment_product" => "mastercard",
"cardtoken" => "daaf85868bcaee8klniazereiuop7b0ce133e88d",
"eci" => "7",
"authentication_indicator" => "1",
"operation" => "authorization",
"currency" => "EUR",
"amount" => 100,
"shipping"=> 1,
"tax" => 1,
"tax_rate" => 1,
"custom_data" =>
'{
"shipping_method":"click and collect",
"first_order":"0",
"products_list": "First product, Second product",
"_reporting_data_1":"my custom data 1",
"_reporting_data_2":"my custom data 2",
"_reporting_data_3":"my custom data 3",
"_reporting_data_4":"my custom data 4",
"_reporting_data_5":"my custom data 5"
}',
// Informations client
"email" => "jeanne.dupont@test.com",
"phone"=> "01234567890",
"birthdate"=> "19890525",
"gender"=> "f",
"firstname"=> "Jeanne",
"lastname"=> "Dupont",
"country"=> "FR",
"streetaddress"=> "10 rue de la facturation",
"streetaddress2"=> "",
"city"=> "Paris",
"zipcode"=> "75012",
"shipto_firstname"=> "Jeanne",
"shipto_lastname"=> "Dupont",
"shipto_streetaddress"=> "20 rue de la livraison",
"shipto_streetaddress2"=> "",
"shipto_city"=> "Paris",
"shipto_zipcode"=> "75012",
"shipto_country"=> "FR",
"cid"=> "123456",
"ipaddr"=> "xxx.xx.xxx.xx",
"accept_url" => "",
"decline_url" => "",
"pending_url" => "",
"exception_url" => "",
"cancel_url" => "",
// Informations DSP2
"account_info" =>
"{
'customer':
{
'account_change': 20180507,
'opening_account_date': 20180507,
'password_change': 20180507,
},
'purchase':
{
'count': 2,
'card_stored_24h': 0,
'payment_attempts_24h': 0,
'payment_attempts_1y': 0
},
'payment':
{
'enrollment_date': 20180507
},
'shipping':
{
'shipping_used_date': 20180507,
'name_indicator': 1,
'suspicious_activity': 1
}
}",
"device_channel"=> 2,
"merchant_risk_statement"=> "{
'email_delivery_address': 'jeanne.dupont@test.com',
'delivery_time_frame': 1,
'purchase_indicator': 1,
'pre_order_date': 20190925,
'reorder_indicator': 1,
'shipping_indicator': 1,
'gift_card':
{
'amount': 15,
'count': 1,
'currency': 'EUR'
}
}",
"recurring_info"=>
"{
'expiration_date': 20200318,
'frequency': 31
}"
);
Tests
Pour tester l'envoi ainsi que le format de tous les champs DSP2 sur la plateforme de "stage" de HiPay, vous devez :
- envoyer une transaction dans la devise EUR ;
- envoyer un montant total de la commande entre 100 € et 200 € ;
- utiliser un moyen de paiement affecté par la DSP2.
En cas de paramètres manquants ou invalides, l'erreur renvoyée est de la forme suivante :
The following DSP2 fields are invalid or missing: browser_info.java_enabled, device_channel
Le code d'erreur associé est 1010201 (invalid parameter).
Dates importantes
- 11 septembre 2019 :
La Banque de France a autorisé un plan de migration de 18 mois pour la mise en conformité des paiements électroniques avec la DSP2 (pour plus d’informations, veuillez lire le communiqué de presse).
- 1er avril 2020 :
Authentification forte obligatoire pour toutes les transactions supérieures à 500 €
- 1er avril 2021 :
Authentification forte obligatoire pour toutes les transactions e-commerce
SDK et modules disponibles et mis à jour pour la DSP2
- JavaScript SDK
https://developer.hipay.com/online-payments/sdk-reference/sdk-js - PHP SDK
https://developer.hipay.com/online-payments/sdk-reference/sdk-php - PrestaShop 1.6 - 1.7 module
https://developer.hipay.com/cms-modules/prestashop/prestashop-enterprise - Magento 1 module
https://developer.hipay.com/cms-modules/magento/magento-1-enterprise - Magento 2 module
https://developer.hipay.com/cms-modules/magento/magento-2-enterprise - Android SDK
https://developer.hipay.com/mobile-payments/android/android-sdk-configuration - WooCommerce module
https://developer.hipay.com/cms-modules/woocommerce/woocommerce-enterprise - iOS SDK
https://developer.hipay.com/mobile-payments/ios/ios-sdk-configuration
Commentaires
0 commentaire
Cet article n'accepte pas de commentaires.