Os sistemas Fingerprint e Google reCAPTCHA fornecem proteção antifraude na nova aplicação de checkout. A integração destes sistemas requer passos específicos detalhados abaixo.
Pré-requisitos:
Certifique-se de que está a usar um token Ventrata Checkout.
Este token é o mesmo que o seu ID Checkout. Trata-se de um token especializado concebido para ser público e pode ser utilizado com segurança no lado do cliente para fazer pedidos diretamente à api.ventrata.com. Restringe o uso de determinados endpoints.
📒 NOTA
Caso necessite de usar estes endpoints restritos, utilize tokens de ligação OCTO.
Note que todos os exemplos utilizam JavaScript e pacotes específicos para esta linguagem.
Passo 1: Fingerprint
Os passos seguintes descrevem o processo de integração:
[Lado do cliente] Comando
GET /ventrata/checkout/configpara obter o objeto de configuração do checkout.Certifique-se de utilizar a função (capability)
ventrata/checkoutpara obter uma resposta correta.fetch("https://api.ventrata.com/octo/ventrata/checkout/config", {
"headers": {
"authorization": "Bearer <YOUR_TOKEN_HERE>",
"octo-capabilities": "ventrata/checkout",
},
"method": "GET",
});[Lado do cliente] Carregue o script JS do Fingerprint globalmente em todas as páginas usando
fingerprintPublicKeydo objeto de configuração como chave API.[Lado do cliente] Antes de carregar a página de pagamento, use
fp.get()com ocardPayments.fraudAssessment.iddo objeto do pedido.fp.get({ linkedId: cardPayment.fraudAssessment?.id });[Fingerprint] Uma impressão digital é gerada internamente e enviada para a Ventrata através de webhook.
[Lado do cliente] Consulte o endpoint
GET /orders/:idaté quecardPayments.fraudAssessment.fingerprintReceivedesteja definido como true.
Informações adicionais
Utilizamos fingerprintjs-pro para fingerprinting. Pode consultar o seu guia de iniciação rápida para mais detalhes.
Uma forma de integrar o Fingerprint é incluir o pacote NPM de JavaScript no seu processo de build:
import * as FingerprintJS from '@fingerprintjs/fingerprintjs-pro'
const fpPromise = FingerprintJS.load({
apiKey: "{fingerprintPublicKey}",
endpoint: "https://fp.ventrata.com",
scriptUrlPattern: "https://fp.ventrata.com/web/v<version>/<apiKey>/loader_v<loaderVersion>.js"
});
Depois, antes de carregar o ecrã de pagamento, pode utilizar a integração da seguinte forma:
fpPromise.then(fp => fp.get({ linkedId: "{cardPayments.fraudAssessment.id}" }))
📒 NOTA
Recomendamos vivamente utilizar a integração NPM em vez da integração CDN para minimizar o risco de ser bloqueado por bloqueadores de anúncios.
📒 NOTA
Lembre-se de implementar mecanismos robustos de tratamento de erros para detetar e gerir erros desconhecidos. Recomendamos seguir as melhores práticas gerais de tratamento de erros.
Passo 2: Google reCAPTCHA
Os passos seguintes descrevem o processo de integração:
[Lado do cliente] Utilize
GET /ventrata/checkout/configpara obter o objeto de configuração do checkout.Certifique-se de utilizar a função (capability)
ventrata/checkoutpara obter uma resposta correta.fetch("https://api.ventrata.com/octo/ventrata/checkout/config", {
"headers": {
"authorization": "Bearer <YOUR_TOKEN_HERE>",
"octo-capabilities": "ventrata/checkout",
},
"method": "GET",
});[Lado do cliente] Carregue o script JavaScript do reCAPTCHA globalmente em todas as páginas. Utilize a
recaptchaEnterpriseSiteKeydo objeto de configuração obtido no Passo 1.<script src="https://www.recaptcha.net/recaptcha/enterprise.js?render={recaptchaEnterpriseSiteKey}">[Lado do cliente] Execute regularmente a geração de tokens em segundo plano para acionar o processamento de aprendizagem automática do reCAPTCHA. Isto deve ser feito a intervalos de 10 segundos. Use a função
grecaptcha.enterprise.executecomrecaptchaEnterpriseSiteKeyeaction: CHECKOUT. Segue um exemplo de como esta geração poderá ficar:function recaptchaIntervalStart(recaptchaEnterpriseSiteKey: string) {
const intervalInSecs = 10;
const milliseconds = 1000;
recaptchaIntervalID = window.setInterval(() => {
if (window.grecaptcha?.enterprise?.ready) {
window.grecaptcha.enterprise.ready(async () => {
try { window.grecaptcha.enterprise.execute(recaptchaEnterpriseSiteKey, {
action: "CHECKOUT",
});
} catch (e) {
console.error("reCAPTCHA interval failure", e);
Sentry.captureException(e);
}
});
}
}, intervalInSecs * milliseconds);
return recaptchaIntervalID; }
....
....
recaptchaIntervalStart(recaptchaEnterpriseSiteKey) // e.g. on `DOMContentLoaded` event[Lado do cliente] Depois de receber uma impressão digital com sucesso, atualize o pedido com um token reCAPTCHA gerado pelo
window.grecaptcha.enterprise.execute. O token deve ser gerado e o pedido atualizado imediatamente antes do utilizador ser direcionado para o gateway de pagamento.const reCatpchaOrder = await cartService.updateOrder(
orderForRecaptchaFlow.id, {
currency: orderForRecaptchaFlow.pricing.currency,
cardPayment: {
fraudAssessment: {
googleRecaptchaEnterprise: {
token: recaptchaTokenFromExecuteFn,
siteKey: recaptchaEnterpriseSiteKey,
},
},
},
},
);
📒 NOTARepita este passo a cada 60 segundos até que o pedido seja confirmado ou até que um erro crítico impeça a inicialização do gateway de pagamento. Durante este processo, é recomendável parar a
recaptchaIntervalStartdo Passo 3 para evitar a invalidação do token pelo Google. Assim que o pedido for atualizado com sucesso, retome a geração de tokens em segundo plano.O pedido será confirmado automaticamente assim que o webhook de autorização for recebido da Adyen.
