SDK PHP
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 :
- Accéder à toutes les fonctionnalités de notre API
- Utiliser toutes les modes d'intégration de notre plateforme (Hosted Checkout Page / Hosted Tokenization Page / Server-to-server).
- Effectuer tous les appels liés à la création et au traitement des paiements (c'est-à-dire CreateHostedCheckout, CreatePayment, RefundPayment et bien d'autres).
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.
- Créez un PSPID de test / de production
- Créez une API Key et une API Secret pour le PSPID créé ci-dessus
- Utilisez la API Key et le API Secret pour établir la connexion à notre plateforme
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 |
---|
|
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
- Obtenir le statut d'une transaction
- Effectuer une opération de maintenance
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 :
- Créer et télécharger un modèle tel que décrit dans notre guide Hosted Tokenization Page.
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 :
- isNotSuccessful : Vérifiez si la transaction est réussie selon les données de GetPayment status/statusOutput.statusCategory/status.statusCode.
- handleError : Traitez la transaction selon son statut.
- CreateRequest : Créez une demande de transaction spécifique selon les besoins.
Type d'exception / Code d'état HTTP |
Exemple de code |
---|---|
Transactions rejetées / Divers (voir l'objet PaymentResponse) |
|
Remboursement rejeté / Divers (voir l'objet PaymentResponse) |
|
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 |
|
AuthorizationException / 403 |
|
IdempotenceException / 409 |
|
ReferenceException / 404/409/410 |
|
PaymentPlatformException / 500/502/503 |
|
ApiException / Autres codes |
|
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 |
- |
201 |
Créé |
- |
204 |
Aucun contenu |
- |
Divers clé paymentResult est dans la réponse |
Paiement rejeté |
|
Divers clé payoutResult est dans la réponse |
Paiement rejeté |
|
Divers |
Remboursement rejeté |
|
400 |
Mauvaise Demande |
|
403 |
Non Autorisé |
|
404 |
Non Trouvé |
|
409 |
Conflit
|
|
410 |
Parti |
|
500 |
Erreur Interne du Serveur |
|
502 | Mauvaise Passerelle Notre plateforme n'a pas pu traiter un message d'un partenaire/acquéreur en aval |
|
503 | Service Indisponible Le service auquel vous essayez d'accéder est temporairement indisponible. Veuillez réessayer plus tard |
|
Autres | Erreur imprévue Une erreur imprévue s'est produite |
|