Guia de integração
Esta seção apresenta como implementar as trocas entre o navegador, o servido EC e a plataforma de pagamento quando a autenticação do portador for gerenciada por nosso servidor de autenticação durante o pagamento.
1. Adicionar biblioteca JavaScript ao seu site
Para facilitar a integração da solução, nossa biblioteca JavaScript coleta os dados do equipamento e do navegador do cliente, comunica diretamente com o 3DS Server e gerencia a interação do portador de cartão durante o challenge.
No , HEAD
da página, você precisa adicionar a biblioteca JavaScript em uma tag <script>
.
<head>
...
<script src="https://static.lyra.com/static/js/authenticate-client/V1.0/kr-authenticate.umd.js"></script>
...
</head>
2. Iniciar uma solicitação de autenticação do portador
Ligue para o serviço da WebV4.1/PCI/Cobrar/CriarPagamento utilizando os campos abaixo:
NÍVEL | SOBRENOME | Descrição | REQUISITO |
---|---|---|---|
1 | amount | Valor do pagamento na menor unidade da moeda. | Sim |
1 | currency | Código (ISO 4217 alfa3) da moeda do pagamento. | Sim |
1 | orderId | Referência do pedido( recomendado ). | Não |
1 | formAction | Permite indicar se você quer salvar o cartão. Valores possíveis:
| Não |
1 | customer | Objeto com os dados do comprador. | Não |
1 | paymentForms | Objeto com os dados do cartão. | Sim |
2 | paymentMethodType | Tipo de método de pagamento.Deve ser avaliado em CARTÃO. | Sim |
2 | pan | Número de cartão. | Sim |
2 | expiryMonth | Mês de vencimento do cartão. | Sim |
2 | expiryYear | Ano de vencimento do cartão. | Sim |
2 | securityCode | Código de segurança do cartão (CVV ou 4DBC). | Não |
1 | ipnTargetUrl | Url para notificar o fim da autenticação | Não |
Outros campos facultativos estão disponíveis. Encontre a descrição dos campos em nosso playground.
Exemplo de solicitação
{ "amount": "990", "currency": "EUR", "paymentForms": [ { "pan": "4970110000001003", "expiryMonth": 11, "expiryYear": 23, "securityCode": "123", "paymentMethodType": "CARD" } ], "customer": { "email": "sample@example.com" }, "ipnTargetUrl": "https://merchant.ipn.com" }
/** * I initialize the PHP SDK */ require_once __DIR__ . '/vendor/autoload.php'; require_once __DIR__ . '/keys.php'; require_once __DIR__ . '/helpers.php'; /** * Initialize the SDK * see keys.php */ $client = new Lyra\Client(); /** * I create a formToken */ $store = array("amount" => 250, "currency" => "EUR", "orderId" => uniqid("MyOrderId"), "customer" => array( "email" => "sample@example.com" )); $response = $client->post("V4/Charge/CreatePayment", $store); /* I check if there are some errors */ if ($response['status'] != 'SUCCESS') { /* an error occurs, I throw an exception */ display_error($response); $error = $response['answer']; throw new Exception("error " . $error['errorCode'] . ": " . $error['errorMessage'] ); } /* everything is fine, I extract the formToken */ $formToken = $response["answer"]["formToken"]; ?>
Na resposta AuthenticationSessionResponse
, encontrará os campos seguintes:
answer.operationSessionId
: identificador de sessão de autenticação (para guardar)answer.operationUrl
: url para enviar à biblioteca JavaScript
Encontre a descrição dos campos em nosso playground.
Exemplo de resposta
{
"webService":"PCI/Charge/CreatePayment",
"version":"V4",
"applicationVersion":"6.0.0",
"serverDate":"2023-04-16T11:11:21+00:00",
"ticket":"839ecda45f6449a8869747a80c26b2d2",
"applicationProvider":"LYRA",
"metadata":null,
"status":"SUCCESS",
"mode":"TEST",
"serverUrl":"https://api.lyra.com",
"_type":"V4/WebService/Response",
"answer":{
"operationSessionId":"30641640cba14eab8e6766094fd201da",
"operationUrl":"https://api.lyra.com/api-payment/V4/Charge/Public/Authenticate/Payment/Session/30641640cba14eab8e6766094fd201da;JSESSIONID=7A4beEA2d5fdbFeA7389F3B91a7bDBaBc8DA9df5.default-hostname",
"_type":"V4/PCI/Authentication/AuthenticationSessionResponse"
}
}
No exemplo:
answer.operationSessionId
: "30641640cba14eab8e6766094fd201da"answer.operationUrl
: "https://api.lyra.com/api-payment/V4/Charge/Public/Authenticate/Payment/Session/30641640cba14eab8e6766094fd201da;JSESSIONID=7A4beEA2d5fdbFeA7389F3B91a7bDBaBc8DA9df5.default-hostname"
3. Inicializar o script de autenticação
Uma vez que a sessão de autenticação foi criada, deve inicializar a biblioteca de autenticação JavaScript e depois chamar o método authenticate. Recomendamos adicionar um indicador visual de carregamento durante esta chamada.
// définition de la class javascript
class KrAuthenticate{
constructor(publicKey,options)
authenticate(operationUrl)
}
1. Parâmetros de inicialização de classe KrAuthenticate
SOBRENOME | Descrição | REQUISITO |
---|---|---|
publicKey | Chave pública de TESTE ou PRODUÇÃO para a loja. Mais informações : ** 3ª chave na tabela de chaves API REST.. | Sim |
options | Elemento do DOM no qual será exibido a janela de autenticação (facultativo). | Não |
Também pode exibir a janela de autenticação em um outro elemento do DOM graças ao atributo element do parâmetro facultativo opções.
- Sem elemento DOM ( recomendado ) :
const krAuthenticate = new KrAuthenticate("69876357:testpublickey_DEMOPUBLICKEY95me92597fd28tGD4r5");
- Com o elemento DOM:
const krAuthenticate = new KrAuthenticate("69876357:testpublickey_DEMOPUBLICKEY95me92597fd28tGD4r5", {
element: document.getElementById("id-challenge-element")
});
Neste exemplo, o id do elemento do DOM é: id-challenge-element
.
2. Parâmetros do método de execução de autenticação KrAuthenticate.authenticate
Use o campo operationUrl
gerado durante a criação da sessão (etapa 2).
SOBRENOME | Descrição | REQUISITO |
---|---|---|
operationUrl | URL de inicialização de autenticação fornecido na resposta do serviço V4.1/PCI/Charge/CreatePayment no objeto answer/AuthenticationSessionResponse#operationUrl. | Sim |
Exemplo: .
operationUrl
: "https://api.lyra.com/api-payment/V4/Charge/Public/Authenticate/Payment/Session/30641640cba14eab8e6766094fd201da;JSESSIONID=7A4beEA2d5fdbFeA7389F3B91a7bDBaBc8DA9df5.default-hostname"
3. Exemplo de código com a classe ,KrAuthenticate
,e o método KrAuthenticate.authenticate
Exemplo de integração usando bootstrap, JQuery e a biblioteca:
<!-- import JS -->
[...]
<script src='https://static.lyra.com/static/js/authenticate-client/V1.0/kr-authenticate.umd.js'></script>
[...]
<form action='javascript:authenticatePayment()'>
<button id='submitButton' type='submit' class='btn btn-primary'>Authenticate</button>
</form>
[...]
<script>
// instantiate library
const krAuthenticate = new KrAuthenticate('69876357:testpublickey_DEMOPUBLICKEY95me92597fd28tGD4r5');
// Callback removing the overlay
function myCallback(data){
document.getElementById('overlay').remove();
}
// this is an example of overlay with a bootstrap spinner
function buildOverlay(){
let overlay = document.createElement('div');
overlay.setAttribute('id', 'overlay');
overlay.style.backgroundColor = '#D3D3D3';
overlay.style.height = '100%';
overlay.style.position = 'absolute';
overlay.style.top = '0';
overlay.style.opacity = '0.90';
overlay.style.width = '100%'
overlay.classList.add('d-flex', 'justify-content-center', 'flex-column', 'align-items-center');
overlay.innerHTML = `
<div class="spinner-border" role="status">
<span class="sr-only">Loading...</span>
</div>
`;
document.body.appendChild(overlay);
}
// Main function triggered by button
function authenticatePayment(){
document.querySelector('#submitButton').disabled = true;
buildOverlay();
krAuthenticate.authenticate("https://theUrlFromThePciCall", myCallback);
}</script>
4. Executar a biblioteca JavaScript
A biblioteca JavaScript é responsável por realizar todas as ações necessárias à autenticação.
Tipo de autenticação. | Descrição | Teste |
---|---|---|
3DS2 Frictionless, sans 3DS Method | A autenticação é realizada sem nenhuma interação do portador. | 3DS2 - Autenticação Frictionless, sem 3DS Method |
3DS2 Frictionless, avec 3DS Method | Um script (3DS Method) é executado antes da autenticação que opera depois sem intervenção do portador. | 3DS2 - Autenticação Frictionless, com3DS Method |
3DS2 Challenge, sans 3DS Method | A autenticação requer ações por parte do portador. | 3DS2 - Autenticação Challenge, sem3DS Method |
3DS2 Challenge, avec 3DS Method | Um script (3DS Method) é executado antes das ações de autenticação do portador. | 3DS2 - Autenticação Challenge, com3DS Method |
Consulte a seção Testes e casos de uso para obter mais exemplos.
5. Análise do resultado do pagamento
No final da autenticação e da solicitação de autorização, a plataforma retorna um objeto Payment na IPN. Ele descreve o detalhe do pagamento (status do pagamento, resultado da solicitação de autorização, resultado da autenticação do portador, etc...).
- Mais informações : Payment.
Gerenciamento do timeout
A duração da sessão de pagamento é definida para 10 minutos . Após esse tempo, caso o IPN não tenha sido configurado pelo comerciante, recomenda-se realizar uma chamada para o Web Service.Encomendar/Obter para obter o resultado do pagamento.