Introduction
Mercanet est une solution de paiement de commerce électronique multicanale sécurisée conforme à la norme PCI DSS. Elle vous permet d’accepter et de gérer des transactions de paiement en prenant en compte les règles métiers liées à votre activité (paiement à la livraison, paiement différé, paiement récurrent, paiement en plusieurs fois, …).
L’objectif du présent document est d’expliquer la mise en œuvre de la solution jusqu’au démarrage en production.
À qui s'adresse ce document
Ce document s'adresse aux commerçants qui souhaitent souscrire à l'offre Mercanet et proposer le paiement intégré à leur application mobile Android.
C'est un guide d'implémentation qui s'adresse à votre équipe technique.
Pour avoir une vue d'ensemble de la solution Mercanet, nous vous conseillons de consulter les documents suivants :
Pour avoir une vue d'ensemble du connecteur In-App, nous vous conseillons également de consulter le document :
Prérequis
Une connaissance des standards relatifs aux langages de programmation Mobile pratiqués aujourd'hui est nécessaire pour pouvoir développer une application mobile Android se connectant au SDK proposé via In-App.
Avant d'implémenter le SDK, il est également nécessaire d'avoir suivi les étapes de mise en place du connecteur In-App (cf. documentation In-App).
Téléchargement du SDK Android
Vous pouvez télécharger le SDK Android via ce lien.
Les signatures du SDK sont présentées ci dessous.
Type | Signature |
---|---|
MD5 | 40fea6b163e48659cf289561339125e8 |
SHA256 | 93521df24b3eedd902ba3f7bb61a88e8c2db0657afb54e955625fdfd6655dc39 |
SHA512 | a604722120aaf811b9c10636847dbf1415ca8417aedfc083b285b19847d48e477ff31d2157aff8d27e0412bc8e4b64ba0076ddccd39eec375afd2699bafa7f0c |
Historique du SDK Android
Version | Date | Description |
---|---|---|
24.1.0 | Janvier 2024 |
Suppression des dépendances. Remplacé par des méthodes natives de l'API Android Correction des vulnérabilités Sonar |
23.1.0 | Janvier 2023 |
Ajout du champs paymentMeanCoBadgingBrandList sur la méthode getWalletData |
22.5.0 | Juillet 2022 |
Ajout du champs issuingCountryCode sur les réponses |
21.5.2 | Juillet 2021 |
Utilisation des Activity à la place des Context |
21.4.1 | Juin 2021 |
Ajout des champs paymentMeanBrand et paymentMeanBrandSelectionStatus sur les méthodes walletOrder, walletCheckEnrollment et addCard |
21.3.2 | Avril 2021 |
Ajout du service paymentTokenGenerate GDPR: Suppression des champs Email, AndroidId, SimSerialNumber, deviceName et IMEI du deviceContext |
21.2.0 | Février 2021 |
Changement de format du champs paymentMeanId de String à Integer |
Démarrer l'implémentation du SDK en 3 étapes
Étape 1 : importer le SDK dans un projet Android
Exemple avec Ecplise IDE
Pour utiliser cette bibliothèque dans votre application Java, ajoutez le JAR du SDK au dossier de compilation du projet.
- Faites un clique droit sur votre projet :
- Sélectionnez Properties ;
- Cliquez sur Java Build Path ;
- Dans l'onglet Libraries, cliquez sur Add JARs ;
- Sélectionnez le JAR du SDK et cliquez sur OK.
Exemple avec Android Studio
Pour utiliser cette bibliothèque dans votre application Android Studio et Gradle, ajoutez le fichier AAR du SDK au dossier libs.
- Dans le fichier build.gradle, ajoutez le code suivant dans la partie repositories ;
flatDir {
dirs 'libs'
}
- ajoutez la dépendance suivante :
compile(name: 'sdk-24.1.0', ext: 'aar')
Permissions du Manifeste
Ajoutez les entrées suivantes au manifeste Android de l'application :
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
Le SDK a besoin de ces permissions pour récupérer les informations du téléphone :
Information de l'appareil | À partir de la version | Commentaires |
---|---|---|
Détecteur de débogueur | 1.0 | |
Détecteur d’émulateur | 1.0 | |
Opérateur | 1.0 | |
Téléphone rooté | 1.0 | |
Ecran allumé ? | 1.0 | |
Version android API | 1.0 |
Étape 2 : utiliser les fonctions disponibles
Toutes les méthodes nécessaires se trouvent dans la classe publique PaymentManager.
Fonctions de paiement
Fonction cardOrder
sdkOperationName
=CARDORDER.Format de la requête cardOrder
Paramètres | Présence | Type | Commentaires | |
---|---|---|---|---|
activity | Obligatoire | Activity | Utilisé pour récupérer les données du téléphone depuis le contexte d'une Activity Android | |
cardCSCValue | Facultatif | String | Cryptogramme visuel | |
cardExpiryDate | Obligatoire | String | Date d'expiration | |
cardNumber | Facultatif | String | Numéro de carte | |
paymentMeanBrand | Facultatif | String | Moyen de paiement sélectionné | |
paymentMeanBrandSelectionStatus | Facultatif | String | Statut de sélection du moyen de paiement | |
publicKeyValue | Obligatoire | String | Valeur cryptée de la clé publique | Récupérés à partir de la requête d'initialisation |
redirectionData | Obligatoire | String | Token unique contenant le contexte de la transaction | |
redirectionUrl | Obligatoire | String | Adresse d'URL fournie en sortie de l'orderInitialize | |
redirectionVersion | Obligatoire | String | Version de l'interface |
Format de la réponse cardOrder (objet OrderResponse)
Nom du champ | Format | Commentaire |
---|---|---|
acquirerResponseCode | String | Code réponse acquéreur |
amount | String | Montant de la transaction |
authentExemptionReasonList | Liste de String | Exemption retenue par l'émetteur |
authorisationId | String | Identifiant d'autorisation |
authorisationTypeLabel | String | Intitulé du type de la demande d'autorisation |
authorMessageReference | String | Identifiant partagé avec l'acquéreur lors du traitement de la demande d'autorisation |
captureDay | String | Délai de capture |
captureMode | String | Mode de capture |
cardData | CardData | Contient les informations relative à la carte (Voir la partie Containers) |
cardExpiryDate | String (yyyyMM) | Date d'expiration de la carte |
currencyCode | String | Code de la devise |
customerId | String | Identifiant client |
errorFieldName | String | Nom du champ à l'origine de l'erreur |
guaranteeIndicator | String | Niveau de garantie de paiement |
guaranteeLimitDateTime | Date | Date limite du niveau de garantie de paiement |
holderAuthentMethod | String | Nom de la méthode appliquée pour identifier le porteur du moyen de paiement |
holderAuthentProgram | String | Programme d'authentification |
holderAuthentRelegationCode | String | Code indiquant si l’émetteur accepte ou refuse le transfert de responsabilité |
holderAuthentResponseCode | String | Code réponse du processus d'authentification porteur |
holderAuthentStatus | String | Résultat du processus d'authentification porteur |
holderAuthentType | String | Type d'authentification du porteur appliqué par l'émetteur de la carte. Champ valorisé en 3-D Secure v2. |
inAppResponseCode | String | Code réponse du serveur Mercanet |
invoiceReference | String | Référence de la facture |
issuerWalletInformation | String | Informations données par le fournisseur de portefeuilles virtuels à destination du commerçant en réponse à la demande de création de la transaction |
maskedPan | String | Numéro de carte masqué |
merchantId | String | Identifiant du commerçant |
merchantWalletId | String | Identifiant du portefeuille virtuel du client |
orderChannel | String | Canal de commande |
orderId | String | Identifiant de commande |
panEntryMode | String | Mode de lecture du numéro de carte |
paymentMeanBrand | String | Moyen de paiement sélectionné |
paymentMeanBrandSelectionStatus | String | Statut du choix de la marque de la carte |
paymentMeanType | String | Type du moyen de paiement (carte, virement, prélèvement, …). Il regroupe un ensemble de paymentMeanBrand. |
paymentPattern | String | Mode de paiement (simple, récurrent, etc.) |
returnContext | String | Valeur transférée à la requête de paiement |
s10TransactionReference | S10TransactionReference | Contient les informations sur l'identification de la transaction, compatibles avec Mercanet 1.0 (Voir la partie Containers) |
statementReference | String | Référence fournie par le commerçant qui est envoyée dans le flux de remise en paiement. Cette référence apparait sur les relevés de compte du porteur. |
transactionDateTime | Date | Date et heure du traitement de la transaction par le serveur Mercanet(exprimé dans le time zone du serveur Mercanet) |
transactionOrigin | String | Origine d’une transaction (ex : nom du programme), valorisée par le commerçant |
transactionPlatform | String | Plateforme d'exécution de la transaction |
transactionReference | String | Identifiant de la transaction |
walletType | String | Type de portefeuille virtuel |
Fonction walletOrder
sdkOperationName
=WALLETORDER.Format de la requête walletOrder
Paramètres | Présence | Type | Commentaires | |
---|---|---|---|---|
activity | Obligatoire | Activity | Utilisé pour récupérer les données du téléphone depuis le contexte d'une Activity Android | |
cardCSCValue | Facultatif | String | Cryptogramme visuel | |
paymentMeanBrand | Facultatif | String | Moyen de paiement sélectionné. Si la valeur n'est pas fournie, la valeur utilisée est celle précédemment enregistrée dans le wallet. | |
paymentMeanBrandSelectionStatus | Facultatif | String | Statut de sélection du moyen de paiement. Si la valeur n'est pas fournie, la valeur utilisée est celle précédemment enregistrée dans le wallet | |
paymentMeanId | Obligatoire | Integer | Identifiant de la carte sélectionnée | |
publicKeyValue | Obligatoire | String | Valeur cryptée de la clé publique | Récupérés à partir de la requête d'initialisation |
redirectionData | Obligatoire | String | Token unique contenant le contexte de la transaction | |
redirectionUrl | Obligatoire | String | Adresse d'URL fournie en sortie de l'orderInitialize | |
redirectionVersion | Obligatoire | String | Version de l’interface |
Format de la réponse walletOrder (objet OrderResponse)
Nom du champ | Format | Commentaire |
---|---|---|
acquirerResponseCode | String | Code réponse acquéreur |
amount | String | Montant de la transaction |
authentExemptionReasonList | Liste de String | Exemption retenue par l'émetteur |
authorisationId | String | Identifiant d'autorisation |
authorisationTypeLabel | String | Intitulé du type de la demande d'autorisation |
authorMessageReference | String | Identifiant partagé avec l'acquéreur lors du traitement de la demande d'autorisation |
captureDay | String | Délai de capture |
captureMode | String | Mode de capture |
cardData | CardData | Contient les informations relative à la carte (Voir la partie Containers) |
cardExpiryDate | String (yyyyMM) | Date d'expiration de la carte |
currencyCode | String | Code de la devise |
customerId | String | Identifiant client |
errorFieldName | String | Nom du champ à l'origine de l'erreur |
guaranteeIndicator | String | Niveau de garantie de paiement |
guaranteeLimitDateTime | Date | Date limite du niveau de garantie de paiement |
holderAuthentMethod | String | Nom de la méthode appliquée pour identifier le porteur du moyen de paiement |
holderAuthentProgram | String | Programme d'authentification |
holderAuthentRelegationCode | String | Code indiquant si l’émetteur accepte ou refuse le transfert de responsabilité |
holderAuthentResponseCode | String | Code réponse du processus d'authentification porteur |
holderAuthentStatus | String | Résultat du processus d'authentification porteur |
holderAuthentType | String | Type d'authentification du porteur appliqué par l'émetteur de la carte. Champ valorisé en 3-D Secure v2. |
inAppResponseCode | String | Code réponse du serveur Mercanet |
invoiceReference | String | Référence de la facture |
issuerWalletInformation | String | Informations données par le fournisseur de portefeuilles virtuels à destination du commerçant en réponse à la demande de création de la transaction |
maskedPan | String | Numéro de carte masqué |
merchantId | String | Identifiant du commerçant |
merchantWalletId | String | Identifiant du portefeuille virtuel du client |
orderChannel | String | Canal de commande |
orderId | String | Identifiant de commande |
panEntryMode | String | Mode de lecture du numéro de carte |
paymentMeanBrand | String | Moyen de paiement sélectionné |
paymentMeanBrandSelectionStatus | String | Statut du choix de la marque de la carte |
paymentMeanType | String | Type du moyen de paiement (carte, virement, prélèvement, …). Il regroupe un ensemble de paymentMeanBrand. |
paymentPattern | String | Mode de paiement (simple, récurrent, etc.) |
returnContext | String | Valeur transférée à la requête de paiement |
s10TransactionReference | S10TransactionReference | Contient les informations sur l'identification de la transaction, compatibles avec Mercanet 1.0 (Voir la partie Containers) |
statementReference | String | Référence fournie par le commerçant qui est envoyée dans le flux de remise en paiement. Cette référence apparait sur les relevés de compte du porteur. |
transactionDateTime | Date | Date et heure du traitement de la transaction par le serveur Mercanet(exprimé dans le time zone du serveur Mercanet) |
transactionOrigin | String | Origine d’une transaction (ex : nom du programme), valorisée par le commerçant |
transactionPlatform | String | Plateforme d'exécution de la transaction |
transactionReference | String | Identifiant de la transaction |
walletType | String | Type de portefeuille virtuel |
Fonction paymentProviderOrder
sdkOperationName
=PAYMENTPROVIDERORDER
et paymentMeanBrand
=BCMCMOBILE.Format de la requête paymentProviderOrder
Paramètres | Présence | Type | Commentaires | |
---|---|---|---|---|
activity | Obligatoire | Activity | Utilisé pour récupérer les données du téléphone depuis le contexte d'une Activity Android | |
publicKeyValue | Obligatoire | String | Valeur cryptée de la clé publique | Récupérés à partir de la requête d'initialisation |
redirectionData | Obligatoire | String | Token unique contenant le contexte de la transaction | |
redirectionUrl | Obligatoire | String | Adresse d'URL fournie en sortie de l'orderInitialize | |
redirectionVersion | Obligatoire | String | Version de l’interface |
Format de la réponse paymentProviderOrder (objet PaymentProviderResponse)
Nom du champ | Format | Commentaire |
---|---|---|
errorFieldName | String | Nom du champ à l'origine de l'erreur |
inAppResponseCode | String | Code réponse de Mercanet |
outerRedirectionUrl | String | URL Intent destinée à réveiller l'application BCMC |
redirectionUrl | String | URL de redirection pour l'appel suivant |
transactionContextData | String | Contexte de la transaction |
transactionContextVersion | String | Version du contexte de la transaction |
Fonction getTransactionData
Format de la requête getTransactionData
Paramètres | Présence | Type | Commentaires | |
---|---|---|---|---|
activity | Obligatoire | Activity | Utilisé pour récupérer les données du téléphone depuis le contexte d'une Activity Android | |
transactionContextData | Obligatoire | String | Contexte de la transaction | Récupérés à partir de la requête au paymentProviderOrder |
transactionContextVersion | Obligatoire | String | Version du contexte de la transaction | |
redirectionUrl | Obligatoire | String | URL de redirection pour l'appel suivant |
Format de la réponse getTransactionData (objet GetTransactionDataResponse)
Nom du champ | Format | Commentaire |
---|---|---|
acquirerResponseCode | String | Code réponse acquéreur |
authentExemptionReasonList | Liste de String | Exemption retenue par l'émetteur |
authorisationId | String | Identifiant d'autorisation |
authorisationTypeLabel | String | Intitulé du type de la demande d'autorisation |
authorMessageReference | String | Identifiant partagé avec l'acquéreur lors du traitement de la demande d'autorisation |
captureLimitDate | String | Délai de capture |
captureMode | String | Mode de capture |
cardData | CardData | Contient les informations relative à la carte (Voir la partie Containers) |
cardExpiryDate | String (yyyyMM) | Date d'expiration de la carte |
currencyCode | String | Code de la devise |
customerId | String | Identifiant client |
errorFieldName | String | Nom du champ à l'origine de l'erreur |
guaranteeIndicator | String | Niveau de garantie de paiement |
guaranteeLimitDateTime | Date | Date limite du niveau de garantie de paiement |
holderAuthentMethod | String | Nom de la méthode appliquée pour identifier le porteur du moyen de paiement |
holderAuthentProgram | String | Programme d'authentification |
holderAuthentRelegationCode | String | Code indiquant si l’émetteur accepte ou refuse le transfert de responsabilité |
holderAuthentResponseCode | String | Code réponse du processus d'authentification porteur |
holderAuthentStatus | String | Résultat du processus d'authentification porteur |
holderAuthentType | String | Type d'authentification du porteur appliqué par l'émetteur de la carte. Champ valorisé en 3-D Secure v2. |
inAppResponseCode | String | Code réponse du serveur Mercanet |
invoiceReference | String | Référence de la facture |
issuerWalletInformation | String | Informations données par le fournisseur de portefeuilles virtuels à destination du commerçant en réponse à la demande de création de la transaction |
maskedPan | String | Numéro de carte masqué |
merchantId | String | Identifiant du commerçant |
merchantWalletId | String | Identifiant du portefeuille virtuel du client |
orderChannel | String | Canal de commande |
orderId | String | Identifiant de commande |
originAmount | String | Montant d'origine de la transaction |
panEntryMode | String | Mode de lecture du numéro de carte |
paymentMeanBrand | String | Moyen de paiement sélectionné |
paymentMeanBrandSelectionStatus | String | Statut du choix de la marque de la carte |
paymentMeanType | String | Type du moyen de paiement (carte, virement, prélèvement, …). Il regroupe un ensemble de paymentMeanBrand. |
paymentPattern | String | Mode de paiement (simple, récurrent, etc.) |
returnContext | String | Valeur transférée à la requête de paiement |
s10TransactionReference | S10TransactionReference | Contient les informations sur l'identification de la transaction, compatibles avec Mercanet 1.0 (Voir la partie Containers) |
statementReference | String | Référence fournie par le commerçant qui est envoyée dans le flux de remise en paiement. Cette référence apparait sur les relevés de compte du porteur. |
transactionDateTime | Date | Date et heure du traitement de la transaction par le serveur Mercanet(exprimé dans le time zone du serveur Mercanet) |
transactionOrigin | String | Origine d’une transaction (ex : nom du programme), valorisée par le commerçant |
transactionPlatform | String | Plateforme d'exécution de la transaction |
transactionReference | String | Identifiant de la transaction |
transactionStatus | String | Statut de la transaction |
walletType | String | Type de portefeuille virtuel |
Fonction cardCheckEnrollment
sdkOperationName
=THREEDSECUREANDORDER.Format de la requête cardCheckEnrollment
Paramètres | Présence | Type | Commentaires | |
---|---|---|---|---|
activity | Obligatoire | Activity | Utilisé pour récupérer les données du téléphone depuis le contexte d'une Activity Android | |
cardCSCValue | Facultatif | String | Cryptogramme visuel | |
cardExpiryDate | Obligatoire | String | Date d'expiration | |
cardNumber | Facultatif | String | Numéro de carte | |
paymentMeanBrand | Facultatif | String | Moyen de paiement sélectionné | |
paymentMeanBrandSelectionStatus | Facultatif | String | Statut de sélection du moyen de paiement | |
publicKeyValue | Obligatoire | String | Valeur cryptée de la clé publique | Récupérés à partir de la requête d'initialisation |
redirectionData | Obligatoire | String | Token unique contenant le contexte de la transaction | |
redirectionUrl | Obligatoire | String | Adresse d'URL fournie en sortie de l'orderInitialize | |
redirectionVersion | Obligatoire | String | Version de l'interface |
Format de la réponse cardCheckEnrollment (objet CardCheckEnrollmentResponse)
Nom du champ | Format | Commentaire |
---|---|---|
authentRedirectionUrl | String | URL de redirection ACS |
errorFieldName | String | Nom du champ à l'origine de l'erreur |
maskedPan | String | Numéro de PAN masqué |
paReqMessage | String | Message PaReq utilisé pour l'authentification ACS |
redirectionStatusCode | String | Code réponse de Mercanet |
redirectionUrl | String | URL de redirection pour l'appel suivant |
tokenPan | String | Identifiant unique d'un PAN |
transactionContextData | String | Contexte de la transaction |
transactionContextVersion | String | Version du contexte de la transaction |
En fonction de la réponse, votre application doit rediriger le client vers l'ACS (Voir la partie Formulaire POST vers l'ACS).
Fonction walletCheckEnrollment
sdkOperationName
=THREEDSECUREANDWALLETORDER.Format de la requête walletCheckEnrollment
Paramètres | Présence | Type | Commentaires | |
---|---|---|---|---|
activity | Obligatoire | Activity | Utilisé pour récupérer les données du téléphone depuis le contexte d'une Activity Android | |
cardCSCValue | Facultatif | String | Cryptogramme visuel | |
paymentMeanBrand | Facultatif | String | Moyen de paiement sélectionné. Si la valeur n'est pas fournie, la valeur utilisée est celle précédemment enregistrée dans le wallet. | |
paymentMeanBrandSelectionStatus | Facultatif | String | Statut de sélection du moyen de paiement. Si la valeur n'est pas fournie, la valeur utilisée est celle précédemment enregistrée dans le wallet | |
paymentMeanId | Obligatoire | Integer | Identifiant de la carte sélectionnée | |
publicKeyValue | Obligatoire | String | Valeur cryptée de la clé publique | Récupérés à partir de la requête d'initialisation |
redirectionData | Obligatoire | String | Token unique contenant le contexte de la transaction | |
redirectionUrl | Obligatoire | String | Adresse d'URL fournie en sortie de l'orderInitialize | |
redirectionVersion | Obligatoire | String | Version de l’interface |
Format de la réponse walletCheckEnrollment (objet WalletCheckEnrollmentResponse)
Nom du champ | Format | Commentaire |
---|---|---|
authentRedirectionUrl | String | URL de redirection ACS |
errorFieldName | String | Nom du champ à l'origine de l'erreur |
maskedPan | String | Numéro de PAN masqué |
paReqMessage | String | Message PaReq utilisé pour l'authentification ACS |
paymentMeanBrand | String | Marque de la carte |
paymentMeanBrandSelectionStatus | String | Statut de sélection de la marque de la carte |
redirectionStatusCode | String | Code réponse de Mercanet |
redirectionUrl | String | URL de redirection pour l'appel suivant |
tokenPan | String | Identifiant unique d'un PAN |
transactionContextData | String | Contexte de la transaction |
transactionContextVersion | String | Version du contexte de la transaction |
En fonction de la réponse, votre application doit rediriger le client vers l'ACS (Voir la partie Formulaire POST vers l'ACS).
Fonction cardValidateAuthenticationAndOrder
Format de la requête cardValidateAuthenticationAndOrder
Paramètres | Présence | Type | Commentaires | |
---|---|---|---|---|
activity | Obligatoire | Activity | Utilisé pour récupérer les données du téléphone depuis le contexte d'une Activity Android | |
paResMessage | Obligatoire | String | Réponse d'authentification du payeur. L'algorithme standard "URL Encode" doit être appliqué au champ paResMessage reçu de l'ACS. | |
transactionContextData | Obligatoire | String | Contexte de la transaction | Récupérés à partir de la requête au cardCheckEnrollment ou au walletCheckEnrollment |
transactionContextVersion | Obligatoire | String | Version du contexte de la transaction | |
redirectionUrl | Obligatoire | String | URL pour l'appel suivant |
Format de la réponse cardValidateAuthenticationAndOrder (objet OrderResponse)
Nom du champ | Format | Commentaire |
---|---|---|
acquirerResponseCode | String | Code réponse acquéreur |
amount | String | Montant de la transaction |
authentExemptionReasonList | Liste de String | Exemption retenue par l'émetteur |
authorisationId | String | Identifiant d'autorisation |
authorisationTypeLabel | String | Intitulé du type de la demande d'autorisation |
authorMessageReference | String | Identifiant partagé avec l'acquéreur lors du traitement de la demande d'autorisation |
captureDay | String | Délai de capture |
captureMode | String | Mode de capture |
cardData | CardData | Contient les informations relative à la carte (Voir la partie Containers) |
cardExpiryDate | String (yyyyMM) | Date d'expiration de la carte |
currencyCode | String | Code de la devise |
customerId | String | Identifiant client |
errorFieldName | String | Nom du champ à l'origine de l'erreur |
guaranteeIndicator | String | Niveau de garantie de paiement |
guaranteeLimitDateTime | Date | Date limite du niveau de garantie de paiement |
holderAuthentMethod | String | Nom de la méthode appliquée pour identifier le porteur du moyen de paiement |
holderAuthentProgram | String | Programme d'authentification |
holderAuthentRelegationCode | String | Code indiquant si l’émetteur accepte ou refuse le transfert de responsabilité |
holderAuthentResponseCode | String | Code réponse du processus d'authentification porteur |
holderAuthentStatus | String | Résultat du processus d'authentification porteur |
holderAuthentType | String | Type d'authentification du porteur appliqué par l'émetteur de la carte. Champ valorisé en 3-D Secure v2. |
inAppResponseCode | String | Code réponse du serveur Mercanet |
invoiceReference | String | Référence de la facture |
issuerWalletInformation | String | Informations données par le fournisseur de portefeuilles virtuels à destination du commerçant en réponse à la demande de création de la transaction |
maskedPan | String | Numéro de carte masqué |
merchantId | String | Identifiant du commerçant |
merchantWalletId | String | Identifiant du portefeuille virtuel du client |
orderChannel | String | Canal de commande |
orderId | String | Identifiant de commande |
panEntryMode | String | Mode de lecture du numéro de carte |
paymentMeanBrand | String | Moyen de paiement sélectionné |
paymentMeanBrandSelectionStatus | String | Statut du choix de la marque de la carte |
paymentMeanType | String | Type du moyen de paiement (carte, virement, prélèvement, …). Il regroupe un ensemble de paymentMeanBrand. |
paymentPattern | String | Mode de paiement (simple, récurrent, etc.) |
returnContext | String | Valeur transférée à la requête de paiement |
s10TransactionReference | S10TransactionReference | Contient les informations sur l'identification de la transaction, compatibles avec Mercanet 1.0 (Voir la partie Containers) |
statementReference | String | Référence fournie par le commerçant qui est envoyée dans le flux de remise en paiement. Cette référence apparait sur les relevés de compte du porteur. |
transactionDateTime | Date | Date et heure du traitement de la transaction par le serveur Mercanet(exprimé dans le time zone du serveur Mercanet) |
transactionOrigin | String | Origine d’une transaction (ex : nom du programme), valorisée par le commerçant |
transactionPlatform | String | Plateforme d'exécution de la transaction |
transactionReference | String | Identifiant de la transaction |
walletType | String | Type de portefeuille virtuel |
Fonctions de gestion de Wallet
Fonction getWalletData
sdkOperationName
=GETWALLETDATA.Format de la requête getWalletData
Paramètres | Présence | Type | Commentaires | |
---|---|---|---|---|
activity | Obligatoire | Activity | Utilisé pour récupérer les données du téléphone depuis le contexte d'une Activity Android | |
publicKeyValue | Obligatoire | String | Valeur cryptée de la clé publique | Récupérés à partir de la requête d'initialisation |
redirectionData | Obligatoire | String | Token unique contenant le contexte de la transaction | |
redirectionUrl | Obligatoire | String | Adresse d'URL fournie en sortie de l'orderInitialize | |
redirectionVersion | Obligatoire | String | Version de l’interface |
Format de la réponse getWalletData (objet GetWalletDataResponse)
Nom du champ | Format | Commentaire |
---|---|---|
errorFieldName | String | Nom du champ à l'origine de l'erreur |
inAppResponseCode | String | Code réponse du serveur Mercanet |
walletCreationDateTime | Date | Date de création du wallet |
walletPaymentMeanData | Liste de WalletPaymentMeanData | Liste des cartes sauvegardée dans le wallet (Voir la partie Containers) |
Fonction addCard
sdkOperationName
=ADDCARD.Format de la requête addCard
Paramètres | Présence | Type | Commentaires | |
---|---|---|---|---|
activity | Obligatoire | Activity | Utilisé pour récupérer les données du téléphone depuis le contexte d'une Activity Android | |
cardExpiryDate | Obligatoire | String | Date d'expiration de la carte | |
cardNumber | Obligatoire | String | Numéro de la carte | |
paymentMeanAlias | Obligatoire | String | Alias de la carte | |
paymentMeanBrand | Facultatif | String | Marque de la carte | |
paymentMeanBrandSelectionStatus | Facultatif | String | Statut du choix de la marque de la carte | |
publicKeyValue | Obligatoire | String | Valeur cryptée de la clé publique | Récupérés à partir de la requête d'initialisation |
redirectionData | Obligatoire | String | Token unique contenant le contexte de la transaction | |
redirectionUrl | Obligatoire | String | Adresse d'URL fournie en sortie de l'orderInitialize | |
redirectionVersion | Obligatoire | String | Version de l’interface |
Format de la réponse addCard (objet AddCardResponse)
Nom du champ | Format | Commentaire |
---|---|---|
errorFieldName | String | Nom du champ à l'origine de l'erreur |
inAppResponseCode | String | Code réponse du serveur Mercanet |
paymentMeanId | String | Identifiant du moyen de paiement dans le wallet |
maskedPan | String | PAN masqué de la carte |
walletActionDateTime | Date | Date d'ajout dans le wallet |
Fonction deletePaymentMean
sdkOperationName
=DELETEPAYMENTMEAN.Format de la requête deletePaymentMean
Paramètres | Présence | Type | Commentaires | |
---|---|---|---|---|
activity | Obligatoire | Activity | Utilisé pour récupérer les données du téléphone depuis le contexte d'une Activity Android | |
paymentMeanId | Obligatoire | Integer | Identifiant du moyen de paiement à supprimer | |
publicKeyValue | Obligatoire | String | Valeur cryptée de la clé publique | Récupérés à partir de la requête d'initialisation |
redirectionData | Obligatoire | String | Token unique contenant le contexte de la transaction | |
redirectionUrl | Obligatoire | String | Adresse d'URL fournie en sortie de l'orderInitialize | |
redirectionVersion | Obligatoire | String | Version de l’interface |
Format de la réponse deletePaymentMean (objet DeletePaymentMeanResponse)
Nom du champ | Format | Commentaire |
---|---|---|
errorFieldName | String | Nom du champ à l'origine de l'erreur |
inAppResponseCode | String | Code réponse du serveur Mercanet |
walletActionDateTime | Date | Date d'ajout dans le wallet |
Fonction de consultation des données carte
Fonction getCardData
sdkOperationName
=GETCARDDATA.Format de la requête getCardData
Paramètres | Présence | Type | Commentaires | |
---|---|---|---|---|
activity | Obligatoire | Activity | Utilisé pour récupérer les données du téléphone depuis le contexte d'une Activity Android | |
cardIIN | Facultatif | String | IIN de la carte | Au moins un de ces champs doit être fourni en requête |
cardNumber | Facultatif | String | Numéro de la carte | |
publicKeyValue | Obligatoire | String | Valeur cryptée de la clé publique | Récupérés à partir de la requête d'initialisation |
redirectionData | Obligatoire | String | Token unique contenant le contexte de la transaction | |
redirectionUrl | Obligatoire | String | Adresse d'URL fournie en sortie de l'orderInitialize | |
redirectionVersion | Obligatoire | String | Version de l’interface |
Format de la réponse getCardData (objet GetCardDataResponse)
Nom du champ | Format | Commentaire |
---|---|---|
cardDataList | Liste de CardData | Liste de conteneur CardData contenant les informations de la carte (en cas de carte cobadgée plusieurs occurrences peuvent apparaître - exemple : carte CB/Visa). (Voir la partie Containers) |
errorFieldName | String | Nom du champ à l'origine de l'erreur |
inAppResponseCode | String | Code réponse du serveur Mercanet |
Containers
CardData
Nom du champ | Format | Commentaire |
---|---|---|
cardBrand | String | Marque de la carte |
cardCorporateIndicator | String | Indicateur de carte commerciale |
cardEffectiveDateIndicator | String | Indicateur de date de début de validité de la carte |
cardProductCode | String | Code produit de la carte |
cardProductName | String | Libellé du code produit de la carte |
cardProductProfile | String | Code profil de la carte |
cardProductUsageLabel | String | Libellé du profil de la carte qui est exposé sur le ticket électronique de paiement selon les directives MPADS |
cardScheme | String | Nom du réseau associé à la carte |
cardSeqNumberIndicator | String | Indicateur d'existence d'un numéro de séquence |
issuerCode | String | Code émetteur de la carte |
issuerCountryCode | String | Code pays de l'émetteur de la carte |
issuerName | String | Nom de l'émetteur de la carte |
issuerRegionCode | String | Code région de l'émetteur de la carte |
issuingCountryCode | String | Code pays dans lequel la carte est émise |
panCheckAlgorithm | String | Algorithme de vérification appliqué au PAN |
panLengthMax | Short | Taille maximale du PAN |
panLengthMin | Short | Taille minimale du PAN |
S10TransactionReference
Nom du champ | Format | Commentaire | |
---|---|---|---|
s10TransactionId | String | Identifiant alternatif de la transaction compatible avec Mercanet 1.0 | Le couple
s10TransactionId/s10TransactionIdDate assure l’unicité de la
transaction 1.0. L’utilisation de ce couple en lieu et
place de la donnée transactionReference dépend de la configuration
du commerçant. |
s10TransactionIdDate | String | Date de la transaction (exprimée dans le time zone du serveur Mercanet) |
WalletPaymentMeanData
Nom du champ | Format | Commentaire |
---|---|---|
maskedPan | String | PAN masqué de la carte |
panExpiryDate | Date | Date d'expiration de la carte |
paymentMeanAlias | String | Alias de la carte |
paymentMeanBrand | String | Marque de la carte |
paymentMeanId | Integer | Identifiant du moyen de paiement dans le wallet |
Formulaire POST de redirection
Formulaire POST vers l'ACS
- PaReq message : retourné par l'appel précédent dans le champ paReqMessage ;
- MD (Merchant Data) : champ comportant des données sur le statut du commerçant qui doivent être retournées à ce dernier. Ce champ doit être utilisé pour récupérer la session sur votre site web ;
- TermUrl : l’URL du commerçant vers laquelle la réponse finale doit être envoyée après authentification de l’utilisateur final (champs de réponse PaRes et MD). Il doit s’agir d’une URL de votre site web vers laquelle l’utilisateur final doit être redirigé.
Sous Android, il est possible d'appeler une fonction Android dans une WebView depuis du code JavaScript. Dès lors, TermUrl peut être une page web qui pousse les champs POST reçus vers l'application Android du commerçant à l'aide d'une méthode JavascriptInterface.
Exemple d'un AcsWebViewActivity qui obtient le PaRes à partir d'une authentification ACS :
public class AcsWebViewActivity extends Activity {
public static final String EXTRA_ACS_URL = "EXTRA_ACS_URL";
public static final String EXTRA_PARES = "EXTRA_PARES";
public static final String EXTRA_PAREQ = "EXTRA_PAREQ";
public static final String EXTRA_MD = "EXTRA_MD";
private WebView webView;
final Handler myHandler = new Handler();
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_acs_web_view);
final JavaScriptInterface myJavaScriptInterface = new JavaScriptInterface();
webView = (WebView) findViewById(R.id.webView);
webView.getSettings().setJavaScriptEnabled(true);
webView.addJavascriptInterface(myJavaScriptInterface, "AndroidFunction");
webView.getSettings().setLoadWithOverviewMode(true);
webView.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
return false;
}
});
String data = "<script>window.onload = function(){"
+ "document.forms['acs'].submit();}</script>"
+ "Please wait..."
+ "<form method=\"POST\" name=\"acs\" action=\"" + getIntent().getStringExtra(EXTRA_ACS_URL) + "\" style=\"display:none;\">"
+ "<input type=\"text\" name=\"MD\" value=\"" + getIntent().getStringExtra(EXTRA_MD) + "\">"
+ "<input type=\"text\" name=\"TermUrl\" value=\"http://inappmerchantserverdemo-mobilepayments.apps.zone52.org/displayAcsResponse.jsp\">"
+ "<input type=\"text\" name=\"PaReq\" value=\"" + getIntent().getStringExtra(EXTRA_PAREQ) + "\">"
+ "<input type=\"submit\" value=\"Submit\">"
+ "</form>";
webView.loadDataWithBaseURL(null, data, "text/html", "utf-8", null);
}
public class JavaScriptInterface {
@JavascriptInterface
public void putPaRes(String paRes) {
// Url encode algorithm to apply on the pares received
// Call cardValidateAuthentication with paRes message encoded
}
}
}
Analyser les erreurs causées par une fonction
Le tableau ci-dessous vous donne les codes réponses génériques pour toutes les opérations. Veuillez consulter le dictionnaire des données pour connaître le détail des codes-réponse par fonction.
État | Champs de la réponse | Action à réaliser |
---|---|---|
Fonction réalisée | responseCode = 00 | La fonction demandée a été réalisée avec succès (par exemple un remboursement avec la fonction refund). |
Refus suite problème technique | responseCode = 90, 99 | Problème technique temporaire lors du traitement de la fonction. Essayez ultérieurement d’exécuter de nouveau la fonction. |
Fonction non autorisée | responseCode = 40 | Vous n’avez pas les droits pour exécuter cette fonction. Prenez contact avec le centre d’assistance technique pour demander l’activation de ces droits si votre contrat acquéreur le permet. |
Fonction non réalisée | Tout autre responseCode | La fonction n’a pas pu être réalisée car un des paramètres doit être incorrect. Consultez le dictionnaire des données pour connaître le détail de chaque code erreur et le format de chaque paramètre. |
Étape 3 : tester en Recette et passer en Production
Afin de tester vos développements en environnement de Recette et d'effectuer votre passage en Production, vous devez avoir finalisé l'implémentation de la partie serveur à serveur décrite dans la documentation In-App. Vous pouvez alors reprendre à l'étape de "test en environnement de recette" de cette même documentation.