Criar uma transação (PCI e 3D Secure)
Se você tiver a certificação PCI-DSS, você está habilitado para coletar os dados sensíveis do meio de pagamento em seu site. Você pode depois criar uma nova transação com o Web Service Charge/CreatePayment enviando os dados sensíveis do meio de pagamento.
O exemplo de integração explica como criar um pagamento com uma autenticação alta, como 3D Secure ou SafeKey.
Cinemática do pagamento com autenticação 3D Secure
Diversas trocas ocorrem durante uma transação com autenticação forte:
Navegador do comprador
Servidor Estabelecimento Comercial
Servidor da Plataforma de pagamento
Descrição das etapas:
Etapa | Descrição |
---|---|
O comprador envia os dados do meio de pagamento ao servidor do Estabelecimento Comercial. | |
Chamada de Charge/CreatePayment para criar uma nova transação. | |
Se uma autenticação 3D Secure for necessária, o Web Service retorna uma resposta de tipo V4/Charge/RedirectRequest. | |
O EC redireciona o comprador para a página 3D Secure do seu banco. | |
Uma vez que o comprador foi autenticado, o navegador é redirecionado para a plataforma de pagamento. | |
A plataforma de pagamento vai criar a transação e chamar a URL definida no parâmetro merchantPostUrlSuccess na primeira chamada. | |
O EC verifica o andamento da transação e redireciona o comprador para a página de confirmação de compra. |
As URLs de retorno podem ser definidas usando dois parâmetros durante a etapa 1:
- merchantPostUrlSuccess : se a transação for autorizada
- merchantPostUrlRefused : se a transação for recusada
Se merchantPostUrlRefused não for definido em caso de transação recusada, o comprador será redirecionado para merchantPostUrlSuccess.
Preparar seu ambiente
Se você usar PHP com nosso SDK, recomendamos salvar todas suas chaves em um arquivo de configuração.
Exemplo com as chaves de testes:
<?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");
Não esqueça de substituí-las pelas suas chaves pessoais.
Para maiores informações, consultar SDKs server e Pré-requisitos
Iniciar a transação
Para criar uma nova transação a partir de um novo meio de pagamento, é preciso usar o 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);
A resposta 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": "LYRA", "metadata": null, "_type": "V4/WebService/Response" }
Se o tipo do objeto não for V4/Charge/RedirectRequest mas V4/Payment , 3D Secure não será requerido, e a resposta apresentará o detalhe da transação (objeto Transaction ). Para maiores detalhes, Consulte Criar uma transação (PCI).
Para maiores informações sobre o Web Service: PCI/Charge/CreatePayment.
Autenticação (3DS)
O Estabelecimento Comercial deve redirecionar o comprador para a página de autenticação. Será preciso para isso criar um formulário que será automaticamente apresentado e com as características seguintes:
- URL alvo (action) definida no parâmetro redirectUrl
- Campos ocultos (hidden input) contendo os dados definidos em postData
- o método é sempre POST
Exemplo de formulário de redirecionamento:
<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>
Recuperar o detalhe da transação
Uma vez que a autenticação foi realizada pelo seu comprador, a transação é criada pela plataforma de pagamento. O detalhe da transação é enviado para a URL definida em merchantPostUrlSuccess ou merchantPostUrlRefused em função do resultado do pagamento.
Consulte Analisando o resultado do pagamento via devolução à loja para obter detalhes.