CSP, contexto confiável do comprador e cuidados com a integração do SDK.
Use @soarlabz/security-sdk@1.2.0 ou uma versão posterior compatível. A versão 1.1.1 usava o fluxo Zendry anterior; não combina com o contrato data-only atual.
O wrapper carrega https://api.zendry.co/sdk/v1/zendry.js. Não use o script antigo de cdn.zendry.com, nem ZendrySDKThreeds.init_threeds. A chamada atual é Zendry.threeDS() antes da cobrança e Zendry.completeThreeDS(action) quando a cobrança solicitar autenticação.
| Funcionalidade | Origem | Uso |
|---|---|---|
| Zendry | https://api.zendry.co | Script oficial e consultas da sessão de challenge |
| Cielo/BP.Mpi | https://mpi.braspag.com.br ou https://mpisandbox.braspag.com.br | Autenticação antes da cobrança |
| Antifraude | Origens ThreatMetrix habilitadas pela sua conta | Fingerprint |
| SDK | URL da API da plataforma usada em baseUrl | Configuração, tokenização e sessão |
| IP do fluxo BP.Mpi | https://api.ipify.org | Consulta do IP público na coleta genérica do SDK |
Base de CSP para coleta de device Zendry, substituindo a API pela origem real da sua integração:
Content-Security-Policy:
script-src 'self' https://api.zendry.co;
connect-src 'self' https://api-dash.unipaybr.com https://api.zendry.co;Para completar o challenge, permita também as origens específicas do fornecedor e emissor em script-src, connect-src e frame-src. Elas dependem da configuração devolvida pela Zendry; obtenha a lista com o fornecedor e valide no navegador antes de produção. A política de device acima sozinha não comprova que o iframe do banco funcionará.
O SDK relata falhas e timeout no carregamento. A CSP não deve ser desabilitada para contornar um erro; ajuste apenas as origens aprovadas. A Finance API é chamada pelo seu backend e não exige liberação de navegador.
A tokenização no navegador permite enviar um token ao seu backend em vez de PAN/CVV. Essa integração reduz a exposição dos dados, mas o enquadramento PCI depende da arquitetura real, dos scripts e controles da página e da avaliação aplicável.
Não registre PAN, CVV, action, token ou segredo em logs. Não persista dados do cartão em localStorage/sessionStorage. A recuperação do link usa somente referência de tentativa, estado e uma action que ainda não foi iniciada; o identificador da sessão é removido da recuperação antes de iniciar o challenge.
Crie uma chave por intenção e reutilize-a na preparação, criação e recuperação da cobrança. Após timeout ou perda de conexão, consulte a mesma referência. Nunca repita a mutação financeira com outra chave para descobrir o que aconteceu.
Valide a assinatura do webhook no backend ou reconsulte a cobrança na adquirente. O retorno authorized do navegador serve à experiência visual; o pedido só pode ser liberado quando o servidor confirmar a captura e concluir os efeitos financeiros. O link aguarda captured com confirmation_pending false antes do sucesso e redirecionamento.
Use HTTPS e navegadores com fetch, AbortController, Promise e crypto.randomUUID. Verifique scripts e iframes no navegador desktop e móvel usado pelos compradores. O SDK browser não foi projetado para execução de device/challenge no servidor.
O sandbox Zendry não possui challenge real. Testes locais com respostas simuladas verificam os estados da aplicação; a homologação de produção deve também comprovar emissor, webhook/reconsulta e registro financeiro. Nunca confunda um build aprovado ou a coleta de device com confirmação de pagamento.