Infelizmente frente as limitaçÃĩes tÃĐcnicas das soluçÃĩes de pagamentos Yapay e a documentaçÃĢo com pouquÃssimas informaçÃĩes sobre como integrar com outros frameworks alÃĐm do defasado JQuery, precisamos aplicar soluçÃĩes de contorno para conseguir o fingerprint que ÃĐ crucial para as transaçÃĩes.
Entendendo o Fingerprint ðĨą
AtravÃĐs do CPF do cliente ÃĐ feita a consulta pela existÊncia do seu cadastro e entÃĢo as transaçÃĩes sÃĢo atreladas ao mesmo. Caso nÃĢo exista uma conta, o sistema irÃĄ criar uma nova conta com os dados que forem submetidos na integraçÃĢo.
O que ÃĐ fingerprint? ðĪ
O fingerprint ÃĐ um script criado em javascript que grava vÃĄrios dados para que seja realizada a analise das informaçÃĩes. Essas informaçÃĩes sÃĢo enviadas no momento do POST da transaçÃĢo.
vocÊ pode ter mais informaçÃĩes sobre como funciona este processo aqui.
SoluçÃĢo de contorno para utilizarmos em projetos Vue ð
Teremos que ferir um pouco as boas prÃĄticas, na nesta seçÃĢo Em que lugar da pÃĄgina eu coloco o fingerprint? da documentaçÃĢo nos ÃĐ informado que precisamos importar um script deles, porÃĐm ao tentar fazer isso no nosso componente, nÃĢo funciona, mesmo dinamicamente no mounted.
Como contornar isto?
Para contornar isto devemos importar o script deles no nosso arquivo estÃĄtico e a funçÃĢo getFingerPrint() pro ambiente que desejar, disponÃveis temos sandbox e production, para que tenhamos acesso ao (PASMEM) input hidden com o valor do token que ele gera ðą
Adicionando no public/index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width,initial-scale=1.0">
<link rel="icon" href="<%= BASE_URL %>favicon.ico">
<title><%= htmlWebpackPlugin.options.title %></title>
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:100,300,400,500,700,900">
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@mdi/font@latest/css/materialdesignicons.min.css">
</head>
<body>
<noscript>
<strong>We're sorry but <%= htmlWebpackPlugin.options.title %> doesn't work properly without JavaScript enabled. Please enable it to continue.</strong>
</noscript>
<div id="app"></div>
</body>
<script src="https://static.traycheckout.com.br/js/finger_print.js" type="text/javascript"></script>
<script>
window.yapay.FingerPrint({ env: 'sandbox' }).getFingerPrint();
</script>
</html>
Pegando o token ðŦ
Na documentaçÃĢo temos a seguinte informaçÃĢo
"vocÊ deve adicionar o atributo data-yapay="payment-form". Incluindo esse atributo serÃĄ criado um input do tipo hidden, com o valor do parÃĒmetro finger_print que deve ser enviado junto com os parÃĒmetros de criaçÃĢo na API de TransaçÃĢo"
Ok, mas como fazer isto no Vue?
Devemos passar o attributo como prop para o form, assim ele passa a enxergar e consegue gerar o input hidden.
<form :data-yapay="'payment-form'">
...
</form>
Ao renderizar teremos o famigerado da seguinte forma:
<form data-yapay="payment-form">
<input name="finger_print" type="hidden" value="yapay_hash">
</form>
Mas como consigo pegar o valor deste cara?
Na documentaçÃĢo temos apenas o exemplo utilizando form action, eu preferi uma abordagem mais desacoplada, portanto pego o valor da seguinte forma:
document.querySelector('input[name="finger_print"]').value
Lembrando que este valor sÃģ ÃĐ acessivel caso nÃĢo haja hot reload na pÃĄgina, se houver vocÊ deve atualizar a pÃĄgina para gerÃĄ-lo novamente, caso contrÃĄrio este input hidden nÃĢo ÃĐ renderizado, acredito que seja alguma limitaçÃĢo por motivos de segurança ðĪ·ââïļðĪ·ââïļ
Top comments (0)