• France
état des services
démonstrations
assistance
FAQContacter le support
Video tutorials
Rechercher
Catégories
Tags
France
France
Espagne
Europe (Anglais)
Inde
Accueil
Cas d'usage
Créer un paiement
Créer un paiement en plusieurs fois
Proposer un paiement complémentaire
Créer un paiement par alias (token)
Créer un lien de paiement
Créer un abonnement
Gérer vos abonnements
Gérer vos transactions (rembourser,...)
Analyser vos journaux
Docs API
Formulaire embarqué
API REST
Formulaire en redirection
SDK Mobile
Échange de fichiers
Mandats SEPA par API REST
Exemples de code
Moyens de paiement
Modules de paiement
Marketplace
Guides
Back Office Marchand
Back Office Expert
Guides fonctionnels

Créer une transaction (PCI et 3D Secure)

L'activation de cette fonctionnalité est soumise à accord préalable de Lyra.

Si vous êtes certifié PCI-DSS, vous êtes habilité à collecter les informations sensibles du moyen de paiement sur votre site.

Vous pouvez créer une nouvelle transaction à l'aide du Web Service Charge/CreatePayment en transmettant les informations sensibles du moyen de paiement.

L'exemple d'intégration explique comment créer un paiement avec une authentification forte, comme 3D Secure ou SafeKey.

Attention, une nouvelle version du protocole 3D Secure est en cours de développement. Cette version 2 sera obligatoire à partir du mois de septembre 2019. Deux nouvelles réponses seront retournées par le Web Service Charge/CreatePayment. Pour plus d'informations, consultez cet article.

Cinématique du paiement avec authentification 3D Secure

Plusieurs échanges sont impliqués dans une transaction avec une authentification forte :

Navigateur de l'acheteur

Serveur Marchand

Serveur de la Plateforme de paiement

Description des étapes :

Étape Description
1 L'acheteur transmet les informations du moyen de paiement au serveur marchand.
2 Appel de Charge/CreatePayment pour créer une nouvelle transaction.
3 Si une authentification 3D Secure est nécessaire, le Web Service retourne un réponse du type V4/Charge/RedirectRequest.
4 Le marchand redirige l'acheteur vers la page 3D Secure de sa banque.
5 Une fois que l'acheteur est authentifié, le navigateur est redirigé vers la plateforme de paiement.
6 La plateforme de paiement va créer la transaction et appeler l'URL définie dans le paramètre merchantPostUrlSuccess lors du premier appel.
7 Le marchand vérifie l'état de la transaction et redirige l'acheteur sur la page de confirmation d'achat.

Les URLs de retour peuvent être définies à l'aide de deux paramètres durant l´étape 1:

  • merchantPostUrlSuccess : si la transaction est autorisée
  • merchantPostUrlRefused : si la transaction est refusée

Si merchantPostUrlRefused n'est pas défini en cas de transaction refusée, l'acheteur est redirigé sur merchantPostUrlSuccess.

Préparer son environnement

Si vous utilisez PHP avec notre SDK, nous vous recommandons de regrouper vos clefs dans un fichier de configuration.

Exemple avec les clés de tests:

https://github.com/lyra/rest-php-examples/blob/master/www/keys.PCI.php

<?php
/**
 * Get the client
 */
require_once __DIR__ . '/vendor/autoload.php';

/**
 * Define configuration
 */

/* Username, password and endpoint used for server to server web-service calls */
Lyra\Client::setDefaultUsername("69876357");
Lyra\Client::setDefaultPassword("testpassword_DEMOPRIVATEKEY23G4475zXZQ2UA5x7M");
Lyra\Client::setDefaultEndpoint("https://api.payzen.eu");

Pensez à les remplacer avec vos clés personnelles.

Pour plus d'informations, voir SDKs server et Prérequis

Initier la transaction

Pour créer une nouvelle transaction à partir d'un nouveau moyen de paiement il faut utiliser le Web Service Charge/CreatePayment:

/fr/rest/V4.0/api/kb/authentication.html
https://github.com/lyra/rest-php-examples/blob/master/www/PCI.3DS.php#L9-L50
https://api.lyra.com/api-payment/V4/Charge/CreatePayment
{
    "amount": 990,
    "currency": "EUR",
    "merchantPostUrlSuccess": "http://mockbin.com/request",
    "merchantPostUrlRefused": "http://mockbin.com/request",
    "paymentForms": [
        {
          "paymentMethodType": "CARD",
          "pan": "4970100000000055",
          "expiryMonth": "11",
          "expiryYear": "21",
          "securityCode": "123"
        }
      ]
    }
}
/**
 * I initialize the PHP SDK
 */
require_once __DIR__ . '/vendor/autoload.php';
require_once __DIR__ . '/keys.PCI.php';
require_once __DIR__ . '/helpers.php';

/** 
 * Initialize the SDK 
 * see keys.php
 */
$client = new Lyra\Client();

/**
 * Define the card to use (we use a 3DS enabled card)
 */
$card = array(
  "paymentMethodType" => "CARD",
  "pan" => "4970100000000022",
  "expiryMonth" => "11",
  "expiryYear" => "21",
  "securityCode" => "123"
);

/**
 * starting to create a transaction
 */
$store = array(
  "amount" => 250, 
  "currency" => "EUR",
  "paymentForms" => array($card),
  "merchantPostUrlSuccess" => "http://mockbin.com/request",
  "merchantPostUrlRefused" => "http://mockbin.com/request",
  "customer" => array(
    "email" => "sample@example.com",
    "orderId" => uniqid("MyOrderId")
));

/**
 * do the web-service call
 */
$response = $client->post("V4/Charge/CreatePayment", $store);

La réponse sera :

{
    "webService": "Charge/CreatePayment",
    "version": "V4",
    "applicationVersion": "4.6.1",
    "status": "SUCCESS",
    "answer": {
        "redirectUrl": "https://authentication-server-url/buyer-bank",
        "width": 390,
        "height": 434,
        "template": "3dsecure",
        "postData": {
            "MD": "JSESSIONID=f9a1CBA1beF8AbAfFE89bD35.vadpayment01tls;+_CqX06BsfWgStNNUg7VgJ",
            "PaReq": "eJxVUttu2zAM/RXD74skp/EloFW0CYp1QINuSW9+GVSJcYwlcmLJS9yvn+Q6a6sX8VDE4eGh4PK02wZ/sTFVrfOQjWgYoJa1qnSZhw+rm29pGBgrtBLbWmMedmjCSw6rTYM4X6JsG+Rwh8aIEoNK5eHv2eGZxtdm/VQu7WLxUCaP5Y+Qw/3VLzxwGFpx12kUATlDR9HIjdCWg5CH69sFv8iSmFIgA4QdNrdzTvuTAXmHoMUO+bIOUJgusHVg0VggfRZk3WrbdDyaOJozgLbZ8o21+ykhx+NxtBfdG+oRtkD8C5APIfetj4xjOlWK/xzfvNzNi5mMiueCLejqz+SxeFNPBa1zIL4ClLDII8oyGtE0oNk0SqeTBEifB7HzEniW+aHeY9j7FlefHj4nwJnbuGV0PEtSN8EZAZ72bheuwhn4PwaFRjr9w/UhfvbdeyqtsyuR48l6jAJjjC7WGKWxShhbx6+vinmn+yJPX3nbGGM9vwdAPA0ZlkiGhbvoy0f4B/cLwxM=",
            "TermUrl": "https://payment-service-provider-return-url"
        },
        "allowIFrame": true,
        "hideAtStartup": false,
        "hideTimeout": 15,
        "_type": "V4/Charge/RedirectRequest"
    },
    "ticket": null,
    "serverDate": "2019-02-08T09:28:57+00:00",
    "applicationProvider": "LYRA",
    "metadata": null,
    "_type": "V4/WebService/Response"
}

Si le type de l'objet retourné n'est pas V4/Charge/RedirectRequest mais V4/Payment, 3D Secure n'est pas requis, et la réponse contient le détail de la transaction (objet Transaction).

Pour plus de détails, consultez Créer une transaction (PCI).

Plus d'informations sur le Web Service : PCI/Charge/CreatePayment.

Authentification (3DS)

Le marchand doit rediriger l'acheteur sur la page d'authentification.

Pour cela il faut créer un formulaire qui sera soumis automatiquement avec les caractéristiques suivantes :

  • URL cible (action) définie dans le paramètre redirectUrl
  • des champs invisibles (hidden input) contenant les données définies dans postData
  • la méthode est toujours POST

Exemple de formulaire de redirection:

https://github.com/lyra/rest-php-examples/blob/master/www/PCI.3DS.php#L74-L83
<form id="goTo3DS" action="https://authentication-server-url/buyer-bank" method="POST">
    <input type='hidden' name='MD' value='JSESSIONID=3f1c1eD7716a696FB1F74d21.vadpayment02tls;+_Z5NVQRqn73uWdF7SOLhL'>
    <input type='hidden' name='PaReq' value='eJxVUttSwjAQ/ZVO3yXpzVJmG8cbozMiKgjqixOTVepACk0q1K83KfWWl(...)'>
    <input type='hidden' name='TermUrl' value='https://payment-service-provider-return-url'>
</form>
<script type="text/javascript">
    document.getElementById('goTo3DS').submit();
</script>
<form id="goTo3DS" action="<?php echo $redirectRequest['redirectUrl'] ?>" method="POST">
<?php
    foreach ($redirectRequest['postData'] as $key => $value) {
        echo "<input type='hidden' name='".htmlentities($key)."' value='".htmlentities($value)."'>\n";
    }
?>
</form>
<script type="text/javascript">
    document.getElementById('goTo3DS').submit();
</script>

Récupérer le détail de la transaction

Une fois l'authentification effectuée par votre acheteur, la transaction est créée par la plateforme de paiement. Le détail de la transaction est transmis vers l'URL définie dans merchantPostUrlSuccess ou merchantPostUrlRefused selon le résultat du paiement.

Consultez Analyse du résultat du paiement via le retour à la boutique pour plus de détails.

Nous recrutons
Mentions légales
Charte de Protection des Données Personnelles
25.20-1.11