worldline Direct
S'inscrire

Ciblez l'URL de base de l'API la plus à jour

Nous vous encourageons à toujours cibler l'URL de base de l'API la plus à jour lors de l'envoi de requêtes à notre plateforme. Consultez notre guide dédié pour un aperçu complet.

Pour vous permettre une transition en douceur, les anciennes URL de base de l'API restent disponibles jusqu'à nouvel ordre.

Pour créer des paiements, vous devez connecter votre serveur à notre plateforme via l'une de nos modes d'intégration.
Notre SDK PHP est la solution idéale pour vous connecter à notre plateforme si vous souhaitez le faire en utilisant le langage PHP.

En choisissant le SDK PHP, vous pouvez :

Pour tirer pleinement parti de ce SDK, assurez-vous de répondre aux exigences suivantes :

  • PHP 7.4 ou supérieur
  • Recommandé : Installation de l'outil Composer

Vous pouvez télécharger et installer la dernière version du SDK PHP en :

  • Utilisant le système Git et notre repo Github
  • Installant le code fourni par Composer
  • Installant notre bibliothèque manuellement sur votre système

Retrouvez plus de détails sur GitHub. Consultez également les Spécification de notre API. Une fois que tout est prêt, consultez les liens ci-dessous pour utiliser au mieux le SDK.

Cette page vous a fournit un aperçu général des fonctionnalités du SDK. Pour connaître en détail le fonctionnement des différentes modes d'intégrationn, consultez les guides dédiés expliquant chaque étape avec des exemples de code complets :

Initialisation

Pour connecter votre système à notre plateforme en utilisant le SDK, vous devez d'abord passer par une étape d'initialisation.

Après cette initialisation, vous pouvez commencer à passer des transactions via votre PSPID. Découvrez comment cela fonctionne dans ce chapitre dédié.

Consultez l'exemple de code couvrant les étapes mentionnées ci-dessus :

Assurez-vous de bien utiliser les classes suivantes :

  • CommunicatorConfiguration
  • V1HmacAuthenticator
  • Communicator
  • Client
  • ProxyConfiguration

// Your PSPID in either our test or live environment
$merchantId = "PSPID";

// Put the value of the API Key which you can find in the Merchant Portal
$apiKey = 'API KEY';

// Put the value of the API Secret which you can find in the Merchant Portal
$apiSecret = 'API Secret';

// 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 = 'YOUR COMPANY NAME';

$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(
    $apiKey,
    $apiSecret,
    $apiEndpoint,
    $integrator,
    $proxyConfiguration
);

$authenticator = new V1HmacAuthenticator($communicatorConfiguration);

$communicator = new Communicator($communicatorConfiguration, $authenticator);

$client = new Client($communicator);

$merchantClient = $client->merchant($merchantId);


Le tableau suivant fournit un aperçu des variables utilisées :

Variables
  • string $merchantId: votre PSPID dans notre environnement de test/production. Assurez-vous d'utiliser la bonne API Key et API Secret avec le bon PSPID
  • string $apiKey: La API Key que vous avez définie pour votre PSPID
  • string $apiSecret: Le API Secret que vous avez défini pour votre PSPID. Consultez notre guide dédié pour en apprendre davantage sur la API Key et le API Secret
  • string $apiEndpoint: Il contient un lien vers notre environnement de test/production où vos demandes de transaction sont envoyées
  • string $integrator: Votre nom (d'entreprise) ou tout autre identifiant unique. Nous utilisons cette valeur pour le débogage et le suivi des transactions que vous avez envoyées à notre plateforme. Par conséquent, nous vous conseillons vivement d'utiliser une valeur que nous pouvons identifier facilement dans nos journaux.

Vous pouvez réutiliser les mêmes instances MerchantClient et Client pour différents appels :

  • L'instance MerchantClient peut servir pour tous les appels du même PSPID
    $merchantClient = $client->merchant($merchantId);
    
  • L'instance Client peut servir pour créer des instances MerchantClient pour différents ou le même PSPID


Après avoir initialisé le SDK, vous pouvez envoyer des requêtes à notre plateforme via votre PSPID. Apprenez comment faire cela dans le chapitre suivant.

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 l'exemple ci-dessus.

N'oubliez pas de prêter attention à la correspondance entre l'environnement et les clés. La API Key et le API Secret sont différents pour les environnements de test et de production.

Le chemin complet des endpoints API est

  • environnement de test: https://payment.preprod.direct.worldline-solutions.com/v2/
  • environnement de production: https://payment.direct.worldline-solutions.com/v2/

Si vous êtes prêt à passer à l'environnement de production, remplacez le lien du endpoint apiEndpoint = 'https://payment.preprod.direct.worldline-solutions.com/' par le lien de l'environnement de production apiEndpoint = 'https://payment.direct.worldline-solutions.com/'

Pour les transactions sans impact financier, utilisez le endpoint de test. Les transactions seront envoyées à notre environnement de test, et donc à votre compte de test.

Pour les transactions avec impact financier, utilisez le endpoint de production. Les transactions seront envoyées à notre environnement de production, et donc à votre compte de production.

Utiliser le SDK

Après cette étape d'initialisation, grâce à la création réussie de l'instance Client, vous avez un accès complet à notre API :

  • Vous pouvez envoyer des demandes de création de transactions via l'une de nos modes d'intégration
  • Vous pouvez obtenir le statut actuel de vos transactions
  • Vous pouvez effectuer des opérations de maintenance (c'est-à-dire des captures, des remboursements, etc) sur vos transactions existantes

Assurez-vous que la méthode de paiement que vous souhaitez utiliser est activée dans votre compte de test/production. Vérifiez cela dans le Merchant Portal via Entreprise > Moyens de paiement.

Vous utilisez le Back Office ?
Vous pouvez vérifier le statut d'activation de la méthode de paiement via Configuration > Activation PM.

Consultez nos cas de test sur GitHub, incluant des exemples de code complets, et notre API Reference pour découvrir tout ce qui est possible de faire. Voici la liste des actions les plus courantes :

Créer de nouvelles transactions

Pour créer une nouvelle transaction, vous pouvez utiliser soit l'instance Client, soit l'instance MerchantClient avec l'une de nos modes d'intégration. Cela peut se faire par :

  • Acheminer la requête de votre PSPID vers notre plateforme (pour Client)
  • Créer une requête pour la mode d'intégration respective

L'instance du SDK ne garde trace que des données utilisées pour l'initialiser. Elle ne suit ni les sessions actives ni les demandes précédentes. Votre système est responsable de la gestion des sessions et des paiements de Direct.

Les sessions et les paiements n'impactent pas les autres sessions et paiements.

Vous trouverez ci-dessous des exemples de code pour chachune des modes d'intégration:

Hosted Checkout Page

Pour utiliser cette méthode d'intégration, vous devez faire un appel à CreateHostedCheckoutRequest. Cet appel doit contenir au moins un objet Order.

Assurez-vous d'utiliser les classes suivantes :

  • CreateHostedCheckoutRequests
  • Order
  • AmountOfMoney

/*
 *…. Initialisation....
 */

/*
 * L'objet HostedCheckoutClient est basé sur l'objet MerchantClient
 * créé lors de l'initialisation 
 */ 
$hostedCheckoutClient = $merchantClient->hostedCheckout();

$createHostedCheckoutRequest = new CreateHostedCheckoutRequest();

$order = new Order();

// Example object of the AmountOfMoney
$amountOfMoney = new AmountOfMoney();
$amountOfMoney->setCurrencyCode("EUR");
$amountOfMoney->setAmount(100);
$order->setAmountOfMoney($amountOfMoney);

$createHostedCheckoutRequest->setOrder($order);

// Obtenez la réponse pour le HostedCheckoutClient
$createHostedCheckoutResponse = $hostedCheckoutClient->createHostedCheckout($createHostedCheckoutRequest);

Vous pouvez spécifier une returnUrl optionnelle, qui sera utilisée pour rediriger votre client vers votre site web.

Cet appel retourne un objet CreateHostedCheckoutResponse. Stockez le hostedCheckoutId et le RETURNMAC qu'il contient, ainsi que toute autre information pertinente pour vous. Vous aurez besoin de ces éléments pour les étapes décrites dans les chapitres suivants.

Cette réponse contient également un partialRedirectUrl. Vous devez concaténer l'URL de base "https://payment." avec partialRedirectUrl selon la formule suivante :

https://payment. + partialRedirectUrl

et réaliser une redirection de votre client vers cette URL. Une fois que le client visite la Hosted Checkout Page, le processus de paiement se poursuit là-bas.

La dernière version de notre SDK retourne également le chemin complet dans redirectUrl, vous permettant de ne pas avoir à concaténer l'URL de base "https://payment." avec partialRedirectUrl. Pour en savoir plus, visitez le lien Hosted Checkout Page.

Hosted Tokenization Page

Pour utiliser cette méthode d'intégration, vous devez :

Assurez-vous d'utiliser les classes suivantes :

  • CreateHostedTokenizationRequest

/*
 *…. Initialisation....
 */

/*
 * L'objet HostedTokenizationClient est basé sur l'objet   
 * MerchantClient créé lors de l'initialisation 
 */
$hostedTokenizationClient = $merchantClient->hostedTokenization();

$createHostedTokenizationRequest = new CreateHostedTokenizationRequest();

$createHostedTokenizationRequest->setVariant("my-custom-template.html");

// Obtenez la réponse pour le HostedTokenizationClient
$createHostedTokenizationResponse = $hostedTokenizationClient->createHostedTokenization($createHostedTokenizationRequest);

A partir de l'objet $createHostedTokenizationResponse, récupérez les données $hostedTokenizationId et hostedTokenizationUrl. Utilisez le $hostedTokenizationUrl pour l'iframe et le $hostedTokenizationId ou $tokenId (voir infobox) pour créer le paiement réel via la méthode Server-to-server.

Vous pouvez utiliser soit le tokenID, soit le hostedTokenizationId dans l'appel CreatePayment. Pour en savoir plus sur l'utilisation de chaque option, vous pouvez lire les chapitres dédiés de notre guide Hosted Tokenization Page :


$hostedTokenizationId = $createHostedTokenizationResponse->getHostedTokenizationId();
$hostedTokenizationUrl = $createHostedTokenizationResponse->getHostedTokenizationUrl();

$createPaymentRequest = new CreatePaymentRequest();
$createPaymentRequest->setHostedTokenizationId($hostedTokenizationId);

$order = new Order();

$amountOfMoney = new AmountOfMoney();
$amountOfMoney->setCurrencyCode("EUR");
$amountOfMoney->setAmount(100);
$order->setAmountOfMoney($amountOfMoney);

$createPaymentRequest->setOrder($order);

// Obtenez la réponse pour le PaymentsClient 
$createPaymentResponse = $merchantClient->payments()->createPayment($createPaymentRequest);

Server-to-server

Une CreatePaymentRequest minimale nécessite que vous définissiez au moins un objet Order et un moyen de paiement :

Assurez-vous d'utiliser les classes suivantes :

  • CreatePaymentRequest
  • AmountOfMoney
  • Card
  • CardPaymentMethodSpecificInput
  • Order

/* 
 *…. Initialisation....
 */

$merchantClient = $client->merchant($merchantId);

/*
 * L'objet PaymentsClient est basé sur le MerchantClient  
 * créé lors de l'initialisation 
 */
$paymentsClient = $merchantClient->payments();

$createPaymentRequest = new CreatePaymentRequest(); 

$order = new Order();

// Exemple de l'objet AmountOfMoney 
$amountOfMoney = new AmountOfMoney();
$amountOfMoney->setCurrencyCode("EUR");
$amountOfMoney->setAmount(100);
$order->setAmountOfMoney($amountOfMoney);

$createPaymentRequest->setOrder($order);
$cardPaymentMethodSpecificInput = new CardPaymentMethodSpecificInput(); // Exemple de l'objet Card $card = new Card(); $card->setCvv("123"); $card->setCardNumber("4111111111111111"); // Trouvez plus de données de test ici $card->setExpiryDate("1236"); $card->setCardholderName("Wile E. Coyote"); $cardPaymentMethodSpecificInput->setCard($card); $createPaymentRequest->setCardPaymentMethodSpecificInput($cardPaymentMethodSpecificInput); // Obtenez la réponse pour le PaymentsClient $createPaymentResponse = $paymentsClient->createPayment($createPaymentRequest);

Nous avons des guides dédiés pour chacune des modes d'intégration:

Ces documents contiennent tous les détails cruciaux dont vous avez besoin pour tirer profit des modes d'intégration, incluant les flux de transactions complets, des exemples de code et d'autres fonctionnalités utiles.

Obtenir le statut de la transaction

Notre API vous permet de demander le statut d'une transaction à tout moment grâce à l'un de nos appels GET :

Un appel GetPaymentDetails ressemble à ceci :


// Obtenez la réponse pour le PaymentsClient
$createPaymentResponse = $merchantClient->payments()->createPayment($createPaymentRequest);

// Ici, vous obtenez $paymentId que vous pouvez utiliser dans le code suivant
$paymentId = $createPaymentResponse->getPayment()->getId();

// Obtenez l'objet PaymentResponse avec les informations de statut
// concernant le paiement de l'ID donné
$paymentResponse = $merchantClient->payments()->getPaymentDetails($paymentId);
Variables
string $paymentID: La référence unique de votre transaction sur notre plateforme. Cette référence peut être récupérée à partir de l'objet $createPaymentResponse ou de l'objet $createHostedCheckoutResponse créé dans la section précédente.

Pour plus d'informations sur les statuts, visitez la page de documentation des statuts.

Effectuer une opération de maintenance

Pour effectuer des opérations de maintenance sur des transactions existantes (c'est-à-dire des captures ou des remboursements), utilisez respectivement nos API CapturePayment et RefundPayment.

CapturePayment

Assurez-vous d'utiliser les classes suivantes :

  • CapturePaymentRequest

/* 
 *…. Initialisation....
 */

$merchantClient = $client->merchant($merchantId);

// Ici, vous obtenez $paymentId que vous pouvez utiliser dans le code suivant
$paymentID = $createPaymentResponse->getPayment()->getId();

$capturePaymentRequest = new CapturePaymentRequest();
$capturePaymentRequest->setAmount(100);
$capturePaymentRequest->setIsFinal(true);

// Obtenez l'objet CaptureResponse
$captureResponse = $merchantClient->payments()->capturePayment($paymentID, $capturePaymentRequest);

Rembourser le paiement

Assurez-vous d'utiliser les classes suivantes :

  • RefundRequest
  • AmountOfMoney
/*  
 *…. Initialisation.... 
 */ 
 
$merchantClient = $client->merchant($merchantId); 

// Ici, vous obtenez $paymentId que vous pouvez utiliser dans le code suivant 
$paymentID = $createPaymentResponse->getPayment()->getId(); 

$refundRequest = new RefundRequest(); 

$amountOfMoney = new AmountOfMoney(); 
$amountOfMoney->setCurrencyCode("EUR"); 
$amountOfMoney->setAmount(100); 

$refundRequest->setAmountOfMoney($amountOfMoney); 


// Obtenez l'objet RefundResponse 
$refundResponse = $merchantClient->payments()->refundPayment($paymentID, $refundRequest );

Variables
string $paymentID: La référence unique de votre transaction sur notre plateforme. Cette référence peut être récupérée à partir de l'objet $createPaymentResponse ou de l'objet $createHostedCheckoutResponse créé dans la section précédente.

Gérer les exceptions

Si une transaction est rejetée, notre plateforme fournit des informations détaillées avec l'objet Exception. Le code HTTP status associé vous aide également à diagnostiquer l'erreur.

Vous pouvez rencontrer deux types d'exceptions : exceptions de transaction et exceptions HTTP.

Exceptions de transaction

Ce type d'exception fait référence aux demandes de transaction qui sont techniquement correctes mais ont été rejetées par l'émetteur de votre client ou par votre acquéreur. Si la transaction est retournée dans l'exception, cela signifie qu'elle a été créée dans nos systèmes mais n'a pas été traitée avec succès.

Les exemples de code suivants utilisent des méthodes fournies à titre d'exemple. Vous êtes censé fournir votre propre implémentation de celles-ci ou les remplacer par une logique similaire :

Type d'exception /
Code d'état HTTP
Exemple de code
Transactions rejetées /
Divers (voir l'objet PaymentResponse)

/*
 * Initialisation....
 */
$paymentID = ""; $createPaymentRequest = new CreateRequest();
try {
$createPaymentResponse =
$paymentsClient->createPayment( $createPaymentRequest );
$paymentID = $createPaymentResponse ->getPayment()->getId();
}
catch (DeclinedPaymentException $e) {
$paymentResult = $e->getPaymentResult();
$payment = $paymentResult->getPayment();
handleError($payment);
return;
}
$paymentResponse = $merchantClient
->payments()->getPayment($paymentID); // Votre code pour vérifier le statut de la transaction et // gérer les erreurs
if (isNotSuccessful($paymentResponse)) {
handleError($paymentResponse);
}
Remboursement rejeté /
Divers (voir l'objet PaymentResponse)
/*
 * Initialisation....
 */

$paymentID = $createPaymentResponse
->getPayment()->getId(); $refundID = "";
$refundRequest = new CreateRequest();
try {
// Obtenez l'objet RefundResponse
$refundResponse = $merchantClient
->payments()
->refundPayment(
$paymentID,
$refundRequest
);
$refundID = $refundResponse->getId();
}
catch (DeclinedRefundException $e) {
$refundResult = $e->getRefundResult();
handleError($refundResult);
return;
} $refundResponse = $merchantClient
->payments()
->refundPayment($paymentID, $refundRequest); // Votre code pour vérifier le statut de la transaction et // gérer les erreurs
if (isNotSuccessful($refundResponse, $refundID)) {
handleError($refundResponse);
}

Exceptions HTTP

Ce type d'exception fait référence à divers problèmes causés par des erreurs techniques dans l'appel API ou dans la demande de paiement.

Vous pouvez combiner l'un des extraits de code suivants avec un appel API CreatePayment :

Assurez-vous d'utiliser les classes suivantes :

  • ApiException

/* 
 *…. Initialisation....
 */

$createPaymentRequest = new CreatePaymentRequest(); 

$order = new Order();

// L'objet exemple de AmountOfMoney 
$amountOfMoney = new AmountOfMoney();
$amountOfMoney->setCurrencyCode("EUR");
$amountOfMoney->setAmount(100);
$order->setAmountOfMoney($amountOfMoney);
 
$createPaymentRequest->setOrder($order);
$cardPaymentMethodSpecificInput = new CardPaymentMethodSpecificInput(); // L'objet exemple de la carte – vous pouvez trouver des cartes de test sur // /documentation/test-cases/ $card = new Card(); $card->setCvv("123"); $card->setCardNumber("4111111111111111"); $card->setExpiryDate("1236"); $card->setCardholderName("Wile E. Coyote"); $cardPaymentMethodSpecificInput->setCard($card); $createPaymentRequest->setCardPaymentMethodSpecificInput( $cardPaymentMethodSpecificInput ); try { // Obtenez la réponse pour le PaymentsClient $createPaymentResponse = $paymentsClient ->createPayment($createPaymentRequest); } catch (ApiException $e) { // reportez-vous à la liste ci-dessous pour voir comment des // implémentations spécifiques de ApiException peuvent être gérées. }
Type d'exception /
Code d'état HTTP
Exemple de Code
ValidationException /
400
catch (ValidationException $e) {
$message = 'Erreur de validation des entrées:' . PHP_EOL;
foreach ($e->getErrors() as $error) {
$message .= '- ';
if (!empty($error->getPropertyName())) {
$message .= $error->getPropertyName() . ': ';
}
$message .= $error->getMessage();
$message .= '(' . $error->getCode() . ')' . PHP_EOL;
}
// Faites quelque chose avec $message
}
AuthorizationException /
403

catch (AuthorizationException $e) {
$message = 'Erreur d\'autorisation:' . PHP_EOL;
foreach ($e->getErrors() as $error) {
$message .= '- ' . $error->getMessage();
$message .= '(' . $error->getCode() . ')' . PHP_EOL;
}
// Faites quelque chose avec $message
}
IdempotenceException /
409

catch (IdempotenceException $exception) {
$message = 'Erreur d\'idempotence:' . PHP_EOL;
foreach ($e->getErrors() as $error) {
$message .= '- ' . $error->getMessage();
$message .= '(' . $error->getCode() . ')' . PHP_EOL;
}
// Faites quelque chose avec $message
}
ReferenceException /
404/409/410

catch (ReferenceException $e) {
$message = 'Référence d\'objet incorrecte:' . PHP_EOL;
foreach ($e->getErrors() as $error) {
$message .= '- ' . $error->getMessage();
$message .= '(' . $error->getCode() . ')' . PHP_EOL;
}
// Faites quelque chose avec $message }
PaymentPlatformException /
500/502/503

catch (PaymentPlatformException $e) {
$message = 'Erreur survenue chez Direct ou ';
$message .= 'un partenaire/acquéreur en aval:' . PHP_EOL;
foreach ($e->getErrors() as $error) {
$message .= '- ' . $error->getMessage();
$message .= '(' . $error->getCode() . ')' . PHP_EOL;
}
// Faites quelque chose avec $message
}
ApiException /
Autres codes

catch (ApiException $e) {
$message = 'Erreur imprévue:' . PHP_EOL;
foreach ($e->getErrors() as $error) {
$message .= '- ' . $error->getMessage();
$message .= '(' . $error->getCode() . ')' . PHP_EOL;
}
// Faites quelque chose avec $message
}

Codes d'état HTTP

Toutes nos exceptions sont liées à un ou plusieurs codes d'état HTTP, indiquant la cause profonde de nombreux possibles erreurs.

Code d'état Description Type d'exception
200

Réussi
Notre plateforme a correctement traité votre demande

-
201

Créé
Notre plateforme a traité votre demande avec succès et créé une nouvelle ressource. Nous renvoyons l'URI de cette ressource dans l'en-tête Location de la réponse

-
204

Aucun contenu
Notre plateforme a traité votre demande avec succès

-
Divers
clé paymentResult est dans la réponse

Paiement rejeté
Soit notre plateforme, soit l'un de nos partenaires/acquéreurs en aval a rejeté votre demande

DeclinedPaymentException
Divers
clé payoutResult est dans la réponse

Paiement rejeté
Soit notre plateforme, soit l'un de nos partenaires/acquéreurs en aval a rejeté votre demande

DeclinedPayoutException

Divers
clé refundResult est dans la réponse

Remboursement rejeté
Soit notre plateforme, soit l'un de nos partenaires/acquéreurs en aval a rejeté votre demande

DeclinedRefundException
400

Mauvaise Demande
Votre demande contient des erreurs, donc notre plateforme ne peut pas la traiter

ValidationException
403

Non Autorisé
Vous essayez de faire quelque chose qui n'est pas autorisé ou que vous n'êtes pas autorisé à faire

AuthorizationException
404

Non Trouvé
L'objet que vous essayiez d'accéder n'a pas pu être trouvé sur le serveur

ReferenceException
409

Conflit
Votre demande idempotente a entraîné un conflit en raison de l'une des raisons suivantes :

  • La première demande n'est pas encore terminée
  • Votre demande a entraîné un conflit. Soit vous avez soumis une demande en double, soit vous essayez de créer quelque chose avec une clé en double
IdempotenceException
ReferenceException
410

Parti
L'objet que vous essayez d'atteindre a été supprimé.

ReferenceException
500

Erreur Interne du Serveur
Une erreur s'est produite sur notre plateforme

PaymentPlatformException
502 Mauvaise Passerelle
Notre plateforme n'a pas pu traiter un message d'un partenaire/acquéreur en aval
PaymentPlatformException
503 Service Indisponible
Le service auquel vous essayez d'accéder est temporairement indisponible. Veuillez réessayer plus tard
PaymentPlatformException
Autres Erreur imprévue
Une erreur imprévue s'est produite
ApiException

Cette page vous a-t-elle été utile ?

Avez-vous des commentaires ?

Merci pour votre réponse.
New Feature

Try out our new chatbot and find answers to all your questions.