Configurações de CSP, conformidade PCI DSS e compatibilidade de navegadores para usar o SDK em produção.
O SDK carrega scripts externos para 3DS e análise de fraude. Se o seu site usa headers Content-Security-Policy, você precisa permitir esses domínios — caso contrário, os scripts serão bloqueados silenciosamente e o 3DS / antifraude não funcionarão.
| Funcionalidade | Domínio | Uso |
|---|---|---|
| 3DS | mpi.braspag.com.br | Script BP.Mpi para autenticação 3DS |
| Antifraude | *.online-metrix.net | ThreatMetrix device fingerprinting |
| IP público | api.ipify.org | Detecção do IP público do comprador |
| API | api.soarlabz.com | Endpoints do SDK |
Content-Security-Policy:
script-src 'self' https://mpi.braspag.com.br https://*.online-metrix.net;
connect-src 'self' https://api.payhubr.com https://api.ipify.org https://*.online-metrix.net;
frame-src https://mpi.braspag.com.br https://*.online-metrix.net;
img-src 'self' https://*.online-metrix.net;Sem essas regras de CSP, o 3DS e o antifraude falharão silenciosamente em produção. O SDK não emite erros de CSP — o navegador bloqueia os scripts antes que o SDK tenha controle.
Se você usa apenas tokenização (sem 3DS e sem antifraude), basta permitir a API:
Content-Security-Policy:
connect-src 'self' https://api.payhubr.com;Content-Security-Policy:
script-src 'self' https://mpi.braspag.com.br;
connect-src 'self' https://api.payhubr.com https://api.ipify.org;
frame-src https://mpi.braspag.com.br;
O SDK de Segurança existe para reduzir o escopo PCI do seu negócio. Com ele, dados sensíveis do cartão nunca passam pelo seu servidor.
| Abordagem | Escopo PCI | Descrição |
|---|---|---|
| Sem SDK (dados no seu servidor) | SAQ D | Escopo completo — 300+ controles |
| Com SDK (tokenização no frontend) | SAQ A-EP | Escopo reduzido — dados transitam pelo frontend mas não pelo backend |
| Hosted fields / iframe (futuro) | SAQ A | Escopo mínimo — dados nunca tocam seu domínio |
Com o SDK, seu negócio se enquadra no SAQ A-EP (Self-Assessment Questionnaire A-EP). Isso significa que os dados do cartão passam pelo seu frontend (DOM do navegador), mas são enviados diretamente para a PayHub sem tocar no seu servidor.
O token substitui completamente os dados sensíveis. Nunca armazene PAN, CVV, nome do portador ou validade no seu frontend ou backend.
Todas as páginas que carregam o SDK devem ser servidas via HTTPS. Nunca use o SDK em páginas HTTP.
Mesmo com debug: true, o SDK não loga dados do cartão. Garanta que seu código também não logue esses dados.
Ao receber o token no seu backend, use-o diretamente na criação da cobrança. Não tente decodificar ou inspecionar o token.
A chave pública (pk_...) é segura para expor no frontend. A chave secreta (sk_...) deve existir apenas no backend.
O SDK usa APIs modernas do navegador. Versões mínimas suportadas:
| Navegador | Versão mínima | API limitante |
|---|---|---|
| Chrome | 66+ | AbortController |
| Firefox | 57+ | AbortController |
| Safari | 12.1+ | AbortController |
| Edge | 79+ (Chromium) | — |
| Opera | 53+ | AbortController |
| Samsung Internet | 9.0+ | AbortController |
| API | Uso | Fallback |
|---|---|---|
fetch | Requisições HTTP | Nenhum (obrigatório) |
AbortController | Timeout de requisições | Nenhum (obrigatório) |
btoa | Codificação Base64 para autenticação | Nenhum (obrigatório) |
crypto.randomUUID | Geração de IDs (server-side) | — |
navigator.language | Detecção de idioma para 3DS | Valor padrão |
screen.width/height | Dados do dispositivo para 3DS | Valor 0 |
O SDK não suporta Internet Explorer. Se precisar suportar navegadores legados, utilize a API REST diretamente no seu backend ao invés do SDK client-side.
O SDK foi projetado exclusivamente para execução em navegadores. Ele não funciona em:
Para operações server-side, use a API REST da PayHub diretamente.
Antes de ir para produção, verifique:
Gere uma chave de produção no dashboard em Configuração > Chaves de API.
Adicione os domínios da PayHub, Braspag e ThreatMetrix às suas regras de Content Security Policy.
Remova debug: true ou deixe o padrão (false).
O SDK requer HTTPS. Requisições HTTP serão bloqueadas por mixed-content policies.
Execute preparePayment() ou os controladores individuais com cartões de teste antes de ir para produção.
Capture e trate todos os tipos de erro do SDK. Nunca deixe exceções não tratadas chegarem ao usuário final.