Hosted Tokenization Page
- Déléguez la gestion des données sensibles à nous pour être conforme à la norme PCI
- Adaptation visuelle flexible et facile & personnalisation
- Facilitez les futurs achats et les paiements Card On File pour vos clients !
Get started
Pour traiter des transactions sur notre plateforme avec cette solution, assurez-vous que :
- Vous avez un compte sur notre plateforme.
- Au moins un des moyens de paiement suivants est activée dans le Merchant Portal via Affaires > Méthodes de paiement:
American ExpressDinersJCBMasterCardUPI - UnionPay InternationalVisa - Vous avez configuré votre Clé API et Secret API dans votre compte.
- Votre serveur peut traiter des requêtes serveur-à-serveur via notre API RESTful. Utiliser l'un de nos SDKs serveur facilitera grandement cette tâche.
Êtes-vous prêt ? Alors apprenez à utiliser notre Hosted Tokenization Page dans le prochain chapitre !
Comment ça fonctionne
Avant de traiter des transactions en production, utilisez notre environnement de test. Découvrez notre solution sans frais ni engagements ! Une fois que vous souhaitez passer en production, consultez ici comment obtenir un compte de production ou contactez-nous !
Pour être éligible au SAQ-A pour cette méthode d'intégration, vous devez respecter les critères d'éligibilité. Consultez la bibliothèque du PCI Security Standards Council pour une vue d'ensemble complète.
La Hosted Tokenization Page fonctionne uniquement en conjonction avec la méthode d'intégration Server-to-server, qui est une étape indispensable dans le flux de paiement. Par conséquent, cela nécessite d'inclure au moins les propriétés 3-D Secure obligatoires dans votre demande de paiement.
Modes d'intégration
1Utilisez nos SDK
Utilisez nos SDK serveur pour connecter de manière transparente votre environnement serveur à l'API serveur de notre platforme. Ces SDK simplifient la fonctionnalité de l'API avec des objets faciles à utiliser - spécifiques à la plateforme.
2Utilisez nos plugins
Nos plugins offrent un lien entre votre boutique en ligne et notre plateforme. En encapsulant efficacement notre API RESTful, ces plugins vous font gagner du temps dans l'écriture de code et rendent l'intégration rapide et facile.
Étapes d'intégration
Vos clients doivent fournir leur numéro de carte de crédit à un moment donné lors de leur parcours sur votre boutique en ligne. En tant que commerçant, le plus grand défi est de lier toutes les étapes de ce parcours en une expérience fluide. En même temps, vous devez vous assurer du transfert sécurisé des données de vos clients vers les institutions financières qui gèrent ces données.
Par conséquent, vous pouvez soit :
- Déléguer complètement les précautions de sécurité nécessaires (en utilisant notre solution Hosted Checkout Page). Cependant, cette méthode a ses limites : vos clients remarqueront une redirection vers une URL externe - une interruption notable dans le flux de paiement.
- Collecter les données sensibles par vous-même (en utilisant notre solution Server-to-server). Mais cela nécessite de respecter les exigences PCI les plus strictes - ce qui implique beaucoup d'efforts.
Notre Hosted Tokenization Page résout ce dilemme pour vous en combinant le meilleur des deux mondes :
- Laissez-nous gérer les données de carte de crédit sans que vos clients ne s'en aperçoivent. Ajoutez simplement un
<iframe>à votre boutique en ligne contenant le formulaire de paiement. Étant l'hôte, les données sensibles viennent et restent de notre côté ! Nous échangeons le numéro de carte de paiement réel contre un token qui n'est pas soumis à la norme PCI. - Utilisez ce token de paiement pour la demande de paiement réelle via la méthode d'intégration Server-to-server .
- En même temps, intégrez-le harmonieusement dans l'apparence et la convivialité de votre boutique en ligne . Adaptez complètement le formulaire de paiement à votre guise !
Notre Hosted Tokenization Page fonctionne avec toutes les méthodes de paiement par carte.
Les chapitres suivants fournissent un aperçu général d'un flux typique. Ils décrivent toutes les étapes à suivre pour traiter les transactions. Trouvez un aperçu détaillé incluant des étapes optionnelles, l'authentification 3-D Secure, etc. dans le chapitre dédié.
- Créer une page de paiement & configurer la politique de sécurité du contenu
- Initialiser le SDK serveur
- Créer une session HostedTokenization
- Ajouter un iframe à la page de paiement
- Soumettre & tokeniser les détails de la carte
- Envoyer une demande CreatePayment
- Traiter la réponse de la plateforme
- Obtenir & afficher le résultat de la transaction
Créer une page de paiement & configurer la politique de sécurité du contenu
Notre solution Hosted Tokenization Page nécessite que votre page de paiement implémente
- Des éléments HTML/JavaScript spécifiques
- Une politique de sécurité du contenu
Ajoutez les éléments HTML/JavaScript suivants sur votre page de paiement :
<div id="div-hosted-tokenization"></div>
<button onclick="submitForm()">submit</button>
<script src="https://payment.preprod.anzworldline-solutions.com.au/hostedtokenization/js/client/tokenizer.min.js integrity=createHostedTokenizationResponse.sri crossorigin="anonymous" "></script> <!-- contains the methods needed for tokenization -->
<script>
var tokenizer = new Tokenizer(hostedTokenizationUrl, 'div-hosted-tokenization', {hideCardholderName: false });
// Invoking tokenizer.initialize() will add the <iframe> inside the previously referenced <div> element
tokenizer.initialize().then(() => {
// Do work after initialization, if any
})
.catch(reason => {
// Handle iFrame load error
})
function submitForm(){ //
tokenizer.submitTokenization().then((result) => {
if (result.success) {
// Proceed by storing the result.hostedTokenizationId from our platform to be used in
subsequent steps
} else {
// displayErrorMessage(result.error.message);
}
});
}
</script>
Les éléments individuels remplissent un rôle spécifique pendant le flux de paiement :
|
Élément |
Description |
|
<script src="https://payment.preprod.anzworldline-solutions.com.au/hostedtokenization/js/client/tokenizer.min.js integrity=createHostedTokenizationResponse.sri crossorigin="anonymous" "></script> |
Chargez la bibliothèque Tokenizer pour l'environnement de test/en direct. Veillez également à ajouter les attributs suivants pour activer le contrôle d'intégrité de sous ressource (Subresource Integrity) pour la bibliothèque Tokenizer :
Veillez à charger le script depuis notre serveur plutôt que de l'héberger vous-même. |
|
<div id="div-hosted-tokenization"></div> |
Appeler la fonction initialize() ajoute un <iframe> à cet élément <div>. En même temps, l'<iframe> ouvre l'hostedTokenizationUrl que vous avez demandée précédemment via une demande CreateHostedTokenization. L'<iframe> charge une page hébergeant le masque de paiement que vos clients utilisent pour entrer leurs données sensibles au PCI-DSS. Vous pouvez personnaliser librement les éléments de cet <iframe>. Suivez les instructions dans ce chapitre dédié pour apprendre à créer et à télécharger le modèle. |
|
<button onclick="submitForm()">soumettre</button> function submitForm() |
Appeler la fonction submitForm() soumet les données de la carte depuis l' <iframe> à notre plateforme pour la tokenisation. Notre plateforme retourne un hostedTokenizationId unique pour chaque session. Utilisez cet hostedTokenizationId pour créer le paiement réel dans une demande CreatePayment ultérieure. Notez que cet élément <button> ne fait PAS partie du <iframe> lui-même. Par conséquent, vous devez l’ajouter vous‑même à votre page de paiement. Pourtant, notre API Explorer permet encore de simuler l’intégralité du flux de paiement. Découvrez comment cela fonctionne dans le chapitre dédié. |
|
var tokenizer |
L'instance de la classe Tokenizer fournissant toutes les fonctionnalités dont vous avez besoin pour le processus de paiement, c'est-à-dire :
|
Politique de sécurité du contenu
Si vous avez mis en place une politique de sécurité du contenu pour votre site web, vous devez mettre nos domaines sur liste blanche. Cela permettra de charger le fichier tokenizer et de nous laisser capturer ses logs.
Pour ce faire, ajoutez le domaine https://payment.preprod.anzworldline-solutions.com.au/ aux directives script-src, connect-src et frame-src de votre définition de politique de sécurité du contenu.
Initialiser le SDK serveur
Initiez le SDK serveur en définissant les URLs de connexion, votre PSPID sur notre plateforme et votre API Secret/Key. Lisez la documentation de votre SDK préféré pour en savoir plus.
Comme nos SDK intègrent toujours la dernière version de notre API, vous pouvez omettre le paramètre "v2" dans votre code, comme montré dans les exemples.
URLs des API endpoints en test / production
- URL API endpoints TEST : https://payment.preprod.anzworldline-solutions.com.au/{merchantId}/hostedtokenizations
- URL API endpoints LIVE : https://payment.anzworldline-solutions.com.au/{merchantId}/hostedtokenizations
Remplacez "{merchantId}" par votre compte test/en direct sur notre plateforme. En savoir plus sur le "merchantId" dans notre glossaire.
Si vous utilisez nos SDK serveur, votre application doit cibler l'URL de l'environnement / méthode d'intégration respective via des instances de CommunicatorConfiguration/ IClient/ CreateHostedTokenizationRequest. Des informations détaillées sur la façon de procéder sont disponibles dans les chapitres suivants, y compris des exemples de code complets.
Lors du traitement des transactions en ligne, il est primordial de suivre votre taux de conversion. Nous sommes impatients de vous aider à cet égard via nos bases de données de transactions que notre équipe de support client se fera un plaisir de partager avec vous.
Pour garantir que nous puissons vous fournir les données les plus précises sur le taux de conversion, nous vous recommandons fortement les bonnes pratiques suivantes :
- Lorsque vous soumettez une demande de transaction à notre plateforme, envoyez toujours l'adresse e-mail du client order.customer.contactDetails.emailAddress.
- Lorsque vous renvoyez une demande de transaction à notre plateforme pour une commande unique (c'est-à-dire après avoir reçu un status.statusOutput=2 lors de la première tentative), envoyez toujours la même order.references.merchantReference que lors de votre première tentative.
Créer une session HostedTokenization
Le backend de votre application de boutique en ligne envoie une requête CreateHostedTokenization à notre plateforme. Dans la réponse, notre plateforme renverra une hostedTokenizationURL les propriétés suivantes :
- hostedTokenizationURL: La valeur de l'attribut src de la balise <iframe> qui héberge le masque de paiement.
- sri: La valeur d'intégrité de sous ressource (SRI) pour la bibliothèque Tokenizer, nécessaire à votre page de paiement. Veillez à utiliser exactement cette valeur pour l'attribut integrity dans la balise HTML <script> lors du chargement de la bibliothèque.
// Create a URI for our TEST/LIVE environment
final URI apiEndpoint = URI.create("https://payment.preprod.anzworldline-solutions.com.au/");
// Initialise the client with the apikey, apisecret and URI
final Authenticator authenticator = new V1HmacAuthenticator("YourAPIkey", "YourAPISecret");
final MetadataProvider metadataProvider = new DefaultMetadataProvider("OnlinePayments");
final DefaultConnection defaultConnection = new DefaultConnection(5000, 10000);
ClientInterface client = Factory.createClient(apiEndpoint, defaultConnection, authenticator, metadataProvider);
// Instantiate the request
CreateHostedTokenizationRequest createHostedTokenizationRequest = new CreateHostedTokenizationRequest()
.withVariant("YourTemplate.html");
// Send out the request
CreateHostedTokenizationResponse createHostedTokenizationResponse = client
.merchant("MERCHANT_ID")
.hostedTokenization()
.createHostedTokenization(createHostedTokenizationRequest);
// Fetch the complete url for the Tokenizer javascript component
String hostedTokenizationUrl = createHostedTokenizationResponse.getHostedTokenizationUrl();
// Fetch the cryptographic hash used for Subresource Integrity validation
String sri = createHostedTokenizationResponse.getSri();
// Create a URI for our TEST/LIVE environment
Uri apiEndpoint = new Uri("https://payment.preprod.direct.worldline-solutions.com/");
// Initialise the client with the apikey, apisecret and URI
IClient client = Factory.CreateClient(new CommunicatorConfiguration()
{
ApiKeyId = "YourAPIkey",
SecretApiKey = "YourAPISecret",
Integrator = "YourCompanyName",
ApiEndpoint = apiEndpoint,
});
// Instantiate the request
CreateHostedTokenizationRequest createHostedTokenizationRequest = new CreateHostedTokenizationRequest
{
Variant = "YourTemplate.html"
};
// Send out the request
var createHostedTokenizationResponse = await client
.WithNewMerchant("MERCHANT_ID")
.HostedTokenization
.CreateHostedTokenization(createHostedTokenizationRequest);
// Fetch the complete url for the Tokenizer javascript component
var hostedTokenizationUrl = createHostedTokenizationResponse.HostedTokenizationUrl;
// Fetch the cryptographic hash used for Subresource Integrity validation
var sri = createHostedTokenizationResponse.Sri;
const yourApiKey = "YourAPIkey";
const yourApiSecret = "YourAPISecret";
const yourPspId = "YourPSPID";
// Initialise the client with the apikey, apisecret and URI
const client = directSdk.init({
host: "https://payment.preprod.direct.worldline-solutions.com",
apiKeyId: yourApiKey,
secretApiKey: yourApiSecret,
integrator: "OnlinePayments"
});
const createHostedTokenizationRequest = {
variant: "YourTemplate.html"
};
const createHostedTokenizationResponse = await client.hostedTokenization.createHostedTokenization(
yourPspId,
createHostedTokenizationRequest,
null);
// Fetch the complete url for the Tokenizer javascript component
const hostedTokenizationUrl = createHostedTokenizationResponse.hostedTokenizationUrl;
// Fetch the cryptographic hash used for Subresource Integrity validation
const sri = createHostedTokenizationResponse.sri;
// Your PSPID in either our test or live environment
$yourPspId = "yourPSPID";
// Put the value of the API Key which you can find in the Merchant Portal
$apiKey = "yourAPIkey";
// Put the value of the API Secret which you can find in the Merchant Portal
$apiSecret = "yourAPIsecret";
// This endpoint is pointing to the TEST server
// Note: Use the endpoint without the /v2/ part here
$apiEndpoint = "https://payment.preprod.direct.worldline-solutions.com";
// Additional settings to easily identify your company in our logs.
$integrator = 'Logeecom';
$proxyConfiguration = null;
/*
* To use proxy, you should uncomment the section below
* and replace proper settings with your settings of the proxy.
* (additionally, you can comment on the previous setting).
*/
/*
$proxyConfiguration = new ProxyConfiguration(
'proxyHost',
'proxyPort',
'proxyUserName',
'proxyPassword'
);
*/
$communicatorConfiguration = new CommunicatorConfiguration(
$yourApiKey,
$yourApiSecret,
$apiEndpoint,
$integrator,
$proxyConfiguration
);
$authenticator = new V1HmacAuthenticator($communicatorConfiguration);
$communicator = new Communicator($communicatorConfiguration, $authenticator);
$client = new Client($communicator);
# Instantiate the request
$createHostedTokenizationRequest = new CreateHostedTokenizationRequest();
$createHostedTokenizationRequest->setVariant("YourTemplate.html");
# Send out the request
$createHostedTokenizationResponse = $client->merchant($yourPspId)->hostedTokenization()->createHostedTokenization($createHostedTokenizationRequest);
# Fetch the complete url for the Tokenizer javascript component
$hostedTokenizationUrl = $createHostedTokenizationResponse->getHostedTokenizationUrl();
# Fetch the cryptographic hash used for Subresource Integrity validation
$sri = $createHostedTokenizationResponse->getSri();
# Create a URI for our TEST/LIVE environment
apiEndpoint = "https://payment.preprod.direct.worldline-solutions.com"
# Initialise the client with the apikey, apisecret and URI
authenticator = V1HmacAuthenticator("YourAPIkey", "YourAPISecret")
metadataProvider = MetadataProvider("OnlinePayments")
defaultConnection = DefaultConnection(5000, 10000)
defaultMarshaller = DefaultMarshaller.instance()
communicator = Communicator(
api_endpoint=apiEndpoint,
connection=defaultConnection,
authenticator=authenticator,
metadata_provider=metadataProvider,
marshaller=defaultMarshaller
)
client = Factory.create_client_from_communicator(communicator)
# Instantiate the request
createHostedTokenizationRequest = CreateHostedTokenizationRequest()
createHostedTokenizationRequest.variant = "YourTemplate.html"
# Send out the request
createHostedTokenizationResponse = client.merchant("MERCHANT_ID") \
.hosted_tokenization() \
.create_hosted_tokenization(createHostedTokenizationRequest)
# Fetch the complete url for the Tokenizer javascript component
hostedTokenizationUrl = createHostedTokenizationResponse.hosted_tokenization_url
# Fetch the cryptographic hash used for Subresource Integrity validation
sri = createHostedTokenizationResponse.sri
your_psp_id = "yourPSPID"
your_api_key = "yourAPIkey"
your_api_secret = "yourAPIsecret"
# Create a URI for our TEST/LIVE environment
api_endpoint = "https://payment.preprod.direct.worldline-solutions.com"
communication_configuration = OnlinePayments::SDK::CommunicatorConfiguration.new(
integrator: "OnlinePayments",
api_endpoint: api_endpoint,
api_key_id: your_api_key,
secret_api_key: your_api_secret,
authorization_type: "v1HMAC",
connect_timeout: 5000,
socket_timeout: 10000,
max_connections: 10
)
authenticator = OnlinePayments::SDK::Authentication::V1HmacAuthenticator.new(communication_configuration)
metadata_provider = OnlinePayments::SDK::Communicator::MetadataProvider.new("OnlinePayments")
default_connection = OnlinePayments::SDK::Communication::DefaultConnection.new(
{ connect_timeout: 5000, socket_timeout: 10000 }
)
communicator = OnlinePayments::SDK::Communicator.new(
api_endpoint = api_endpoint,
connection = default_connection,
authenticator = authenticator,
meta_data_provider = metadata_provider,
marshaller = OnlinePayments::SDK::JSON::DefaultMarshaller.new
)
client = OnlinePayments::SDK::Factory.create_client_from_communicator(communicator)
# Instantiate the request
create_hosted_tokenization_request = Domain::CreateHostedTokenizationRequest.new
create_hosted_tokenization_request.variant = "YourTemplate.html"
# Send out the request
create_hosted_tokenization_response = client.merchant("MERCHANT_ID") \
.hosted_tokenization \
.create_hosted_tokenization(create_hosted_tokenization_request)
# Fetch the complete url for the Tokenizer javascript component
hosted_tokenization_url = create_hosted_tokenization_response.hosted_tokenization_url
# Fetch the cryptographic hash used for Subresource Integrity validation
sri = create_hosted_tokenization_response.sri
Ajouter un iframe à la page de paiement
Transmettez l'hostedTokenizationUrl de votre backend à votre page de paiement contenant ce script.
Créez une instance de Tokenizer. Le constructeur prend trois arguments :
- L'hostedTokenizationUrl récupéré dans l'étape précédente.
- L'id de l'élément DOM à l'intérieur duquel l'iframe sera chargée.
- Un objet facultatif pour personnaliser davantage le comportement de la page de tokenisation. Voir le chapitre "Envoyer des arguments supplémentaires au tokenizer" ci-dessous pour plus de détails.
var tokenizer = new Tokenizer(hostedTokenizationUrl, 'div-hosted-tokenization', {hideCardholderName: false });
Maintenant, invoquez la fonction initialize(). Cela ajoute automatiquement un <iframe> à l'élément <div id="div-hosted-tokenization"></div>. Le <iframe> ouvre automatiquement l'hostedTokenizationUrl.
tokenizer.initialize().then(() => {
// Do work after initialise, if any
})
.catch(reason => {
// Handle iframe load error
})
Soumettre & tokeniser les détails de la carte
Vos clients saisissent leurs informations de carte dans l' <iframe> sur votre page de paiement. Notre plateforme détecte automatiquement le schéma de la carte dès que vos clients commencent à taper le numéro. Cela fonctionne également pour les cartes co-brandées (le cas échéant).
Vos clients soumettent les données de la carte à notre plateforme via l'élément JavaScript <button> , invoquant la fonction submitTokenization() de l'extrait de code JavaScript. Notre plateforme tokenise les données de la carte et renvoie un hostedTokenizationId.
Notez que cet élément <button> ne fait PAS partie du <iframe> lui-même. Par conséquent, vous devez l’ajouter vous‑même à votre page de paiement.
Pourtant, notre API Explorer permet encore de simuler l’intégralité du flux de paiement. Découvrez comment cela fonctionne dans le chapitre dédié.
La page Hosted Tokenization Page n'accepte pas les numéros de carte Bancontact.
Cependant, la page Hosted Tokenization Page détecte les cartes Bancontact co-badgées.
Dans ces cas, la Hosted Tokenization Page accepte la marque de carte de paiement associée à la carte Bancontact co-badgée.
Consultez notre guide dédié « Co-marquage et détection de BIN » pour savoir comment combiner le co-badging avec la Hosted Tokenization Page.
Consultez notre guide dédié à Bancontact pour savoir comment traiter des transactions avec des cartes Bancontact autonomes.
Envoyer une demande CreatePayment
Vous envoyez une demande CreatePayment à notre plateforme via notre méthode d'intégration Server-to-server, en incluant les détails de la carte et les propriétés 3-D Secure obligatoires. Remplacez les données sensibles de la carte dans la propriété de la carte par le hostedTokenizationId.
Traiter la réponse de la plateforme
Notre plateforme envoie une réponse contenant un objet merchantAction.
Elle vous indique comment procéder avec le paiement. Selon la réponse, ces scénarios sont possibles :
- Cinématique d'authentification frictionless ou passive 3-D Secure : (merchantAction.actionType=null) : Vos clients utilisent une carte inscrite au 3-D Secure. Les propriétés 3-D Secure dans votre requête CreatePayment s'avèrent suffisantes pour l'étape d'authentification. Nous soumettons la transaction à l'acquéreur et fournissons le résultat dans la propriété statusOutput.statusCode.
- cinématique d'authentification forte 3-D Secure : (merchantAction.actionType="REDIRECT") : Vos clients utilisent une carte inscrite au 3-D Secure. Ils doivent s'identifier en tant que détenteur légitime de la carte. Redirigez-les vers leur émetteur via le merchantAction.redirectData.redirectURL. Définissez une cardPaymentMethodSpecificInput.returnUrl dans la requête CreatePayment initiale pour vous assurer que vos clients sont redirigés vers votre boutique en ligne par la suite.
- Pas d'authentification 3-D Secure (merchantAction.actionType=null) : Vos clients utilisent une carte non inscrite au 3-D Secure. Nous soumettons la transaction à l'acquéreur et fournissons le résultat dans la propriété statusOutput.statusCode.
Obtenir & afficher le résultat de la transaction
Selon le scénario, l'obtention et l'affichage du résultat de la transaction / 3-D Secure diffère :
Cinématique Frictionless/Pas d'authentification 3-D Secure
Vos clients restent sur votre boutique en ligne. Adaptez la page de paiement de votre boutique en ligne selon le statusOutput.statusCode tel que retourné par la requête initiale CreatePayment.
Cinématique Challenge
Nous recevons le résultat de la transaction / 3-D Secure et redirigeons vos clients vers votre boutique en ligne. Définissez un cardPaymentMethodSpecificInput.returnUrl dans la requête initiale CreatePayment pour cette redirection. Assurez-vous d'implémenter un mécanisme sur ce returnUrl qui notifie votre serveur de cette redirection. Dès réception de cette notification, envoyez une requête GetPaymentDetails pour obtenir le résultat de la transaction. Utilisez le payment.id de la requête initiale CreatePayment :
Adaptez le returnUrl en fonction du statusOutput.statusCode tel que retourné par cette requête GetPaymentDetails.
Découvrez dans notre guide des statuts plus d'informations sur les propriétés de la réponse, leur signification et comment procéder de manière appropriée en fonction du statut des transactions.
Vous pouvez également recevoir le résultat de la transaction / 3-D Secure via les webhooks. Notez que les webhooks sont des événements asynchrones. Par conséquent, ils ne conviennent pas pour gérer des événements en temps réel pendant le processus de paiement.
Flux
Trouvez un flux de transaction complet impliquant chaque partie et les étapes (facultatives) dans cet aperçu :
- Vos clients se rendent sur votre page de paiement et finalisent l'achat.
- Vous envoyez une demande CreateHostedTokenization à notre plateforme. Notre plateforme renvoie un hostedTokenizationURL.
- Vous ajoutez l' <iframe> hébergeant le masque de paiement à votre page de paiement.
- Vos clients saisissent leurs informations de carte dans l' <iframe>.
4'(facultatif). Vous utilisez notre fonction de validation pour vérifier si le titulaire de la carte a correctement rempli le formulaire. - Vos clients soumettent les données de la carte à notre plateforme.
- Notre plateforme tokenise les données de la carte et renvoie un hostedTokenizationId.
- Vous envoyez une demande CreatePayment à notre plateforme en utilisant notre méthode d'intégration Server-to-server, y compris les propriétés 3-D Secure obligatoires.
7'(facultatif). Nous effectuons une vérification de prévention des fraudes. - Notre plateforme envoie une réponse contenant un objet merchantAction, vous indiquant comment procéder. Ces scénarios sont possibles :
a) Cinématique Frictionless 3-D Secure (merchantAction.actionType=null). Le flux continue à l'étape 14).
b) Cinématique Challenge 3-D Secure (merchantAction.actionType="REDIRECT"). Le flux continue à l'étape 9).
c) Pas d'authentification 3-D Secure (merchantAction.actionType=null). Le flux continue à l'étape 14). - Vous redirigez le client vers sa banque émettrice pour l'authentification 3-D Secure. Le client s'identifie.
- Notre plateforme reçoit le résultat d'authentification 3-D Secure de l'émetteur. En fonction du résultat, deux scénarios sont possibles :
a) Si l'identification a échoué, nous redirigeons vos clients vers votre returnURL, terminant le flux. Vous demandez/affichez le résultat de la transaction comme décrit à l'étape 13.
b) Si l'identification a réussi, le flux continue à l'étape 11. - Nous traitons la transaction et recevons le résultat de l'acquéreur.
- Nous redirigeons votre client vers votre returnURL.
- Vous demandez le résultat de la transaction à notre plateforme et l'affichez sur votre returnURL/dans votre boutique en ligne.
- Si la transaction a réussi, vous pouvez livrer les biens / services.
14'(facultatif). Supprimez le token si vous ne prévoyez pas de l'utiliser pour des paiements récurrents ou si votre client n'a pas accepté de stocker les informations d'identification.
Simulation du flux dans notre API Explorer
Comme décrit dans le chapitre "Construire la page de paiement et configurer la politique de sécurité du contenu", <button> élément utilisé pour soumettre les données de la carte dans l’étape 5 du flux de paiement ne fait pas partie du <iframe> lui‑même. Par conséquent, vous devez l’ajouter vous‑même à votre page de paiement. Cela s’applique également lors de la soumission d’une session CreateHostedTokenization via notre API Explorer. Cependant, il est encore possible de simuler l’intégralité du flux dans notre API Explorer. Pour ce faire, suivez les étapes :
- Ouvrez l’API Explorer et sélectionnez l’endpoint CreateHostedTokenization.
- Cliquez sur le bouton "Send" pour soumettre la requête.
- Notre plateforme affiche la réponse dans la section "Response". Dans la section "Response", sélectionnez l’onglet "Preview".
- Remplissez les champs de données de la carte sur la <iframe> de la page de tokenisation hébergée. Cliquez sur le bouton "Create" (qui agit comme l’élément <button> mentionné ci‑dessus).
- L’API Explorer vous redirige vers l’API Explorer CreatePayment avec l’interface de l’endpoint hostedTokenizationId, pré‑remplissant le JSON avec le hostedTokenizationId issu de votre demande CreateHostedTokenization.
- Cliquez sur "Envoyer" pour soumettre la demande de paiement comme décrit à l’étape 7 du flux de paiement.
Custom styling
We have designed our Hosted Tokenization Page in a way to allow you to customise it as freely as possible. Take a look at these features:
Create iframe template
The centrepiece of this solution is an iframe containing the payment form. Adapting the iframe to your corporate identity allows you to merge it seamlessly into your webshop. We have designed it in a way that allows you to:
- Adapt its various HTML elements at your liking.
- Use your own .css /image files to further modify the payment form.
Choose language version
Our Hosted Tokenization Page is available in various languages. Populate locale to display it in your customers’ preferred language. The value is a combination of language and country:
{
"locale":"en-EN",
/* other properties omitted */
}
We support the following languages:
| Language version | locale value | Language version | locale value | |
|---|---|---|---|---|
| Arabic | ar-AE | Islandic | is-IS | |
| Bulgarian | bg-BG | Italian | it-IT | |
| Catalan | ca-ES | Japanese | ja-JP | |
| Chinese | zh-CN | Korean | ko-KR | |
| Croatian | hr-HR | Lithuanian | lt-LT | |
| Czech | cs-CZ | Latvian | lv-LV | |
| Danish | da-DK | Norwegian | no-NO | |
| Dutch / Flemish | nl-NL nl-BE |
Polish | pl-PL | |
| English UK / US | en-UK en-US |
Portuguese | pt-PT | |
| Estonian | et-EE | Romanian | ro-RO | |
| Finnish | fi-FI | Russian | ru-RU | |
| French | fr-FR | Slovak | sk-SK | |
| German Germany/Austria/Switzerland |
de-DE de-AT de-CH |
Slovenian | sl-SI | |
| Greek | el-GR | Spanish | es-ES | |
| Hebrew | he-IL | Swedish | sv-SE | |
| Hungarian | hu-HU | Turkish | tr-TR | |
| Irish | ga-IE |
Customise template
We provide two distinct approaches for implementing a customised template:
Method 1: Create a fully customised template
Create a fully customised template from scratch using our powerful Outil de constructions de modèles. This approach offers a high degree of customisation, allowing you to make intricate changes to the payment form's appearance and functionality.
Method 2: Adapt template from GitHub repository
You can also download and customise the necessary files directly from our GitHub repository, providing even more flexibility. It is the ideal solution to let your customers choose between local or global brands (i.e. Visa, MasterCard) if they are using a co-badged credit card.
Once you have created a template that matches your webshop's look and feel, contact us to upload the template to your account.
Notre plateforme vous permet de télécharger plusieurs fichiers de modèle. Utilisez celui de votre choix en remplissant la propriété variant avec le nom du fichier dans la demande CreateHostedTokenization.
Adapter le style visuel
Appliquez un style CSS aux dimensions de l'iframe pour l'intégrer encore plus harmonieusement dans votre boutique en ligne. Ajoutez ce code à votre fichier .css en conséquence :
iframe[name=htpIframe0] {
border: none;
width: 800px;
}
Gérer le nom du titulaire de la carte
Notre API permet d'afficher ou de masquer le champ du nom du titulaire de la carte dans l'iframe.
Passez le booléen hideCardholderName: true ou le booléen hideCardholderName: false en conséquence dans le constructeur Tokenizer :
var tokenizer = new Tokenizer(hostedTokenizationUrl, 'div-hosted-tokenization', { hideCardholderName: false });
- Si non spécifié, notre plateforme définit hideCardholderName: true par défaut.
- Le nom du titulaire de la carte est obligatoire. Si vous choisissez d'obtenir le nom dans votre environnement de boutique en ligne, assurez-vous de le soumettre au format suivant :
tokenizer.useCardholderName("Wile E. Coyote")
tokenizer.submitTokenization().then((result) => { ... })
Envoyer des arguments supplémentaires au tokenizer
L'appel du tokenizer, comme décrit à l'étape 3, prend des arguments supplémentaires en plus de hideCardholderName. Ajoutez-en un ou plusieurs dans votre demande pour adapter le flux de paiement à vos besoins :
| Argument | Description |
|---|---|
| hideCardholderName | Voir le chapitre dédié. |
| hideTokenFields |
Booléen Définir sur true si vous souhaitez préremplir les champs de l'iframe (numéro de carte, nom du titulaire de la carte et date d'expiration) avec les données stockées dans un token pour un paiement récurrent. |
| validationCallback | |
| paymentProductUpdatedCallback |
Fonction de rappel : Détectez la marque de la carte utilisée au fur et à mesure qu'elle est saisie dans le formulaire de paiement :
|
| hideOptionalCvv | |
| storePermanently |
Si vous choisissez de conserver ou non le token pour les paiements futurs, stockez ou supprimez un token en envoyant true ou false. |
Utiliser des possibilités supplémentaires
Notre solution Hosted Tokenization Page offre de nombreuses autres possibilités. Découvrez ici toutes ses fonctionnalités disponibles.
Utiliser un token existant
Notre plateforme vous permet de stocker de manière permanente les données de carte bancaire de vos clients pour des paiements en 1 clic. En préremplissant les champs avec les données enregistrées, l’expérience de paiement de vos clients sera encore plus fluide et votre taux de conversion s’en trouvera amélioré.
En raison de SCA, vos clients pourraient tout de même devoir entrer leur CVV et/ou passer une vérification d'authentification 3-D Secure. Notre formulaire de paiement affiche les champs obligatoires à remplir automatiquement.
Comme le token existe déjà au moment de la demande de transaction, le flux de paiement est différent :
- Étape 1 : Indiquez à notre plateforme que vous souhaitez utiliser un token existant. Pour ce faire, modifiez la demande createHostedTokenizationRequest en ajoutant la propriété tokens :
-
Une réponse réussie ressemble à ceci :
Status: 200 OK { "hostedTokenizationId": "2f4d08d6ddfc411e944e81c54d824a99", "invalidTokens": [ "86a44668-5d0f-4e3f-a597-2aa0a4d03fe5" ], "hostedTokenizationUrl": "https://payment.preprod.anzworldline-solutions.com.au//hostedtokenization/tokenization/form/2f4d08d6ddfc411e944e81c54d824a99",
"partialRedirectUrl": "preprod.anzworldline-solutions.com.au//hostedtokenization/tokenization/form/2f4d08d6ddfc411e944e81c54d824a99" }
Si notre réponse contient une valeur pour la propriété invalidTokens, le token envoyé dans votre demande est invalide. Ne l'utilisez pas dans le paiement suivant.
- Étape 2 : Préremplissez le formulaire affiché avec les données de carte de crédit enregistrées. Notre plateforme vous offre deux manières de le faire :
1. Préremplissez le formulaire immédiatement lors de son affichage. Pour cela, ajoutez le token comme quatrième argument au constructeur tokenizer :
var tokenizer = new Tokenizer(hostedTokenizationUrl, 'div-hosted-tokenization', { }, '00164fec-32b2-462e-b48b-84a27930b10c');
2. Laissez le formulaire vide au départ lors de son affichage. Permettez à vos clients de choisir dans votre environnement de boutique en ligne de payer avec leur carte enregistrée. S'ils choisissent de le faire, utilisez la fonction suivante pour peupler le formulaire :
var tokenizer = new Tokenizer(hostedTokenizationUrl, 'div-hosted-tokenization', { });
...
// Plus tard, par exemple lorsque l'action d'un utilisateur déclenche un changement de token
function tokenChanged () {
tokenizer.useToken('00164fec-32b2-462e-b48b-84a27930b10c'); // Change le formulaire pour mettre à jour le token sélectionné, affichant uniquement le champ CVV si nécessaire
// ou
tokenizer.useToken(); // Réinitialise le formulaire pour créer un nouveau token
}
Vous pouvez également permettre à vos clients de mettre à jour le token dans le formulaire de paiement. En initialisant le booléen hideTokenFields comme suit, vos clients peuvent faire l'un ou l'autre.
a) {hideTokenFields:true} : Masquer les champs connus (numéro de carte/date d'expiration).
b) {hideTokenFields:false} : Les champs obligatoires sont visibles et doivent être remplis / les champs connus peuvent être modifiés (uniquement le nom du titulaire de la carte/date d'expiration).
La demande ressemble à ceci :
var tokenizer = new Tokenizer(hostedTokenizationUrl, 'div-hosted-tokenization', {hideTokenFields:true});
Obtenir le statut de validation
Votre page principale peut obtenir le statut de validation du formulaire de paiement à tout moment. Passez une fonction de rappel de validation qui est appelée chaque fois que l'état de validité du formulaire de paiement change. Assurez-vous que cette fonction contient un paramètre qui reçoit un objet avec la propriété booléenne valid. Ce booléen indique si le formulaire est correctement rempli.
Utilisez ces informations pour activer/désactiver le bouton de soumission sur la page principale si le formulaire de paiement est correctement/incorrectement rempli. Ajoutez cette fonction à votre script à l'étape 3 :
var tokenizer = new Tokenizer(hostedTokenizationUrl, 'div-hosted-tokenization', { validationCallback: myValidationCallback });
function myValidationCallback(result) { document.getElementById('btn-submit').disabled = !result.valid }
Supprimer le formulaire
Vous pouvez supprimer le formulaire de paiement de la page principale. L'appel de cette fonction supprime l'iframe et ses écouteurs d'événements :
tokenizer.destroy();
Utiliser tokenId au lieu de hostedTokenizationId
Notre plateforme vous permet de traiter des transactions avec à la fois le hostedTokenizationId et le tokenId. Le flux pour le premier est décrit dans ce chapitre. Utiliser des TokenIDs nécessite de modifier le flux comme suit :
Comme les étapes 1. – 4. et 7. – 12. sont identiques au flux utilisant le hostedTokenizationId, nous les avons seulement ajoutées ici comme des éléments de base. Consultez le chapitre dédié pour plus de détails.
-
Une demande de paiement est initiée.
-
Obtenez une URL de tokenisation valide via un appel Create Hosted Tokenization.
-
Ajoutez un extrait de code à votre page de paiement, vous permettant d'afficher le formulaire de tokenisation avec l'URL de tokenisation valide en tant qu'iframe sur votre page de paiement.
-
Votre client saisit ses données de carte de crédit dans l'iframe.
-
Obtenez le token pour le paiement réel.
Récupérez le résultat de la tokenisation en effectuant un appel GetHostedTokenization depuis votre backend.
Utilisez l'exemple de code suivant pour la demande :Pour les demandes à notre environnement TEST : https://payment.preprod.anzworldline-solutions.com.au/MERCHANT_ID/hostedtokenizations/hostedTokenizationId
Pour les demandes à notre environnement LIVE : https://payment.anzworldline-solutions.com.au/MERCHANT_ID/hostedtokenizations/hostedTokenizationId -
Créez le paiement réel avec le token. Envoyez une demande CreatePayment à notre serveur. Utilisez l'exemple de code suivant pour la demande :
-
Vous redirigez vos clients vers leur banque émettrice pour une vérification 3-D Secure. Les clients s'identifient.
-
Notre système reçoit le résultat de l'émetteur.
-
Nous soumettons la transaction financière réelle à l'acquéreur pour qu'elle soit traitée.
-
Nous redirigeons votre client vers votre ReturnUrl.
-
Vous demandez le résultat de la transaction à notre plateforme via GetPaymentDetails ou recevez le résultat via webhooks.
-
Si la transaction a réussi, vous pouvez livrer les biens / services.
12' (facultatif) : Supprimez le token.
Pré-sélectionner les schémas de carte disponibles
Vous pouvez exclure ou pré-sélectionner des schémas de carte spécifiques depuis l'iframe en utilisant les propriétés de l'objet paymentProductFilters dans votre demande CreateHostedTokenization :
- exclude.products : Tableau de paymentProductIds à filtrer
- restrictTo.products : Tableau de paymentProductIds qui devraient être disponibles
trouvez la valeur pour les paymentProductIds individuels dans la colonne "Identifiant du moyen de paiement" de cet aperçu.
- Trouvez des informations détaillées sur cet objet et ses propriétés dans notre CreateHostedTokenizationAPI.
excluderemplacera toute valeur dansrestrictToet assurera ainsi l'exclusion.- Si vos clients saisissent un numéro d'un schéma de carte que vous avez rendu indisponible via
exclude, le masque de paiement affichera "Numéro de carte incorrect ou incompatible".
Gérer le Code de Vérification de la Carte
En raison des réglementations PCI DSS, nous ne sommes autorisés à stocker la valeur de vérification d'une carte (CVV) que pour un maximum de deux heures.
Pour des paiements uniques via la Hosted Tokenization Page, cette durée est suffisante pour initialiser le paiement. Cependant, lors du traitement de paiements récurrents utilisant des tokens stockés de manière permanente, vous rencontrerez le scénario suivant : pour tout paiement ultérieur, notre plateforme préremplit les champs de l'<iframe> - à l'exception du code CVV en raison de cette réglementation.
Pour améliorer encore l'expérience de paiement de vos clients, notre plateforme vous permet de rendre la vérification CVV optionnelle. Cela s'applique à la fois au
- Paiement initial lors de la création du token.
- Paiement ultérieur lors de l'utilisation du token.
Vous pouvez y parvenir en mettant en œuvre les propriétés suivantes dans votre page de paiement / demande CreateHostedTokenization respectivement :
| Propriété | Description |
|---|---|
| creditCardSpecificInput.ValidationRules cvvMandatoryForNewToken cvvMandatoryForExistingToken |
cvvMandatoryForNewToken : Défini sur "true" ou "false" dans votre demande pour permettre à vos clients d'entrer le CVV dans le <iframe> formulaire de paiement ou non. cvvMandatoryForExistingToken : Défini sur "true" ou "false" dans votre demande pour permettre à vos clients d'entrer le CVV dans le <iframe> formulaire de paiement ou non. Applicable uniquement lors de l'utilisation de tokens existants et donc remplissant le formulaire de paiement. |
| hideOptionalCvv | argument Tokenizer utilisé pour initialiser l'<iframe> sur votre page de paiement.
Définissez sur "true" ou "false" selon que vous souhaitez garder/masquer le champ "Code de vérification de la carte" dans le formulaire de paiement. |
Lorsque vous envoyez "false" pour la propriété cvvMandatoryForNewToken/cvvMandatoryForExistingToken, la vérification de validation déclenchera un événement de validation de formulaire réussi même lorsque le CVV n'est pas ajouté à l'iframe. Cela vous permet de continuer avec le flux de paiement en envoyant la demande de paiement réelle.
Pour les demandes CreatePayment envoyées sans le hostedTokenizationId, notre plateforme prend en compte si le CVV est obligatoire pour la méthode de paiement. Contactez-nous pour configurer la ou les méthodes de paiement respectives pour vous dans votre compte. Pour remplacer ce paramètre par session, nous recommandons fortement d'envoyer le hostedTokenizationId au lieu du token dans votre demande CreatePayment.
Assurez-vous de vous accorder avec votre acquéreur si vous souhaitez rendre la vérification du CVC optionnelle ou la sauter complètement. Dans certains cas, vous pourriez devenir responsable des impayés.
Déclaration d’accessibilité
ANZ Worldline Payment Solutions s’engage à rendre ses solutions accessibles selon la directive (UE) 2019/882 du 17 avril 2019 relative aux exigences en matière d’accessibilité applicables aux produits et services (EAA) ainsi qu’à l’article 47 de la loi française n°2005-102 du 11 février 2005.
Lisez notre déclaration complète sur l'accessibilité pour la solution Hosted Tokenization Page afin de connaître la portée de la conformité du produit.