Crear una transacción (PCI y 3D Secure)

Si tiene la certificación PCI-DSS, tiene derecho a recopilar información confidencial del medio de pago en su sitio. Puede crear una nueva transacción con la ayuda del Servicio WebCharge/CreatePayment transmitiendo la información sensible del medio de pago.

El ejemplo de integración explica cómo crear un pago con autenticación fuerte, como 3D Secure o SafeKey.

Secuencia del pago con autenticación 3D Secure

Varios intercambios están involucrados en una transacción con autenticación fuerte:

Descripción de las etapas:

Etapa Descripción
1 El comprador transmite la información del medio de pago al servidor del vendedor.
2 Llamada de Charge/CreatePayment para crear una nueva transacción.
3 Si se requiere una autenticación 3D Secure, el Web Service devuelve una respuesta de tipo V4/Charge/RedirectRequest.
4 El vendedor redirige al comprador a la página 3D Secure de su banco.
5 Tras la autenticación del comprador, se redirige al navegador a la plataforma de pago.
6 La plataforma de pago crea una transacción y llama a la URL definida en el parámetro merchantPostUrlSuccess durante la primera llamada.
7 El vendedor comprueba el estado de la transacción y redirige al comprador a la página de confirmación de la compra.

Las URL de retorno se pueden definir mediante dos parámetros en la etapa 1:

  • merchantPostUrlSuccess: si la transacción es autorizada
  • merchantPostUrlRefused : si la transacción es rechazada

Si merchantPostUrlRefused no está definido en el caso de una transacción rechazada, el comprador será redirigido a merchantPostUrlSuccess.

Prepare su entorno

Si usa PHP con nuestro SDK, le recomendamos que agrupe sus claves en un archivo de configuración.

Ejemplo con claves de prueba:

<?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");


Recuerde sustituirlas por sus claves personales.

Para más información, consulte Servidor de SDK y Requisitos previos.

Iniciar la transacción

Para crear una nueva transacción a partir de un nuevo medio de pago, es necesario utilizar el Servicio Web 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 respuesta será:

{
    "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 el tipo del objeto devuelto no es V4/Charge/RedirectRequest, sino V4/Payment, no se requiere 3D Secure y la respuesta contendrá los detalles de la transacción (objeto Transacción). Para más detalles, consulte Crear una transacción (PCI).

Más información sobre el Servicio Web: PCI/Charge/CreatePayment.

Autenticación (3DS)

El vendedor debe redirigir al comprador a la página de autenticación. Para ello, debe crear un formulario que se enviará automáticamente con las siguientes características:

  • URL de destino (action) definida en el parámetroredirectUrl
  • campos de entrada ocultos (hidden input) que contienen los datos definidos en postData
  • el método es siempre POST

Ejemplo de formulario de redireccionamiento:

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

Obtener el detalle de la transacción

Una vez que su comprador ha llevado a cabo la autenticación, la plataforma de pago crea la transacción. Los detalles de la transacción se transmiten a la URL definida en merchantPostUrlSuccess o merchantPostUrlRefused dependiendo del resultado del pago.

Consulte Pago realizado para más detalles.