Migrando da v1
A v1 continua funcionando. A v2 vive em /v2/* como superfície separada, então você migra uma
integração por vez e volta atrás apontando a base URL de novo para /v1.
Lado a lado
| v1 | v2 | |
|---|---|---|
| Base URL | https://api.sdb.lbpay.com.br/v1 | https://api.sdb.lbpay.com.br/v2 |
| Credencial | client_id + client_secret | client_id + sua chave pública |
| Pedido de token | form com o segredo | client_assertion (JWT) + prova DPoP |
| Validade do token | 2 horas | 60 segundos |
| Header de auth | Authorization: Bearer <token> | Authorization: DPoP <token> |
| Header extra | DPoP: <prova nova por requisição> | |
| IP de origem | não é conferido | conferido contra a lista da credencial |
O que muda no seu código
Três coisas, e nada além disso:
- A função que pega o token. Em vez de postar um segredo, assine dois JWTs curtos. A privada é carregada uma vez no boot; o resto é a mesma chamada HTTP.
- Uma prova por requisição. Uma função que recebe método, URL e corpo, e devolve um header.
- A renovação. A cada 35–45 segundos em vez de a cada duas horas, com singleflight para que chamadas concorrentes não disparem uma renovação cada.
Suas chamadas de negócio (paths, payloads, respostas) não mudam de forma por causa da autenticação.
Ordem sugerida
Comece com uma credencial read_only e um único GET. Ele exercita o mecanismo inteiro (token,
prova, relógio, lista de IPs) sem dinheiro envolvido. Só depois mova as rotas de escrita.
Erros comuns do primeiro dia
- Renovar o token a cada requisição. Funciona, e gasta um round trip por chamada. Cacheie.
htucom a query. Ela vai emqh, nunca nohtu.- Hashear um corpo re-serializado. Hasheie os bytes exatos que você envia.
- Esquecer o
bhno GET. É o hash da string vazia, não um campo ausente. - Relógio do container. Desvio acima de 60 s reprova toda prova; é a causa mais comum de "funciona local, falha em produção".
- Não saber seus endereços de saída. Como a lista de IPs é obrigatória, vale levantar antes da migração de quais endereços a sua integração realmente sai. Normalmente é o NAT gateway, o proxy ou o egress do cluster, e não o endereço da máquina que roda o código.