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

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.

Cinématique du paiement avec authentification 3D Secure

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

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 environement

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:

<?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:

{
    "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": "PAYZEN",
    "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:

<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 Paiement effectué pour plus de détails.