Pular para o conteúdo principal

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​

v1v2
Base URLhttps://api.sdb.lbpay.com.br/v1https://api.sdb.lbpay.com.br/v2
Credencialclient_id + client_secretclient_id + sua chave pública
Pedido de tokenform com o segredoclient_assertion (JWT) + prova DPoP
Validade do token2 horas60 segundos
Header de authAuthorization: Bearer <token>Authorization: DPoP <token>
Header extraDPoP: <prova nova por requisição>
IP de origemnão é conferidoconferido contra a lista da credencial

O que muda no seu código​

Três coisas, e nada além disso:

  1. 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.
  2. Uma prova por requisição. Uma função que recebe método, URL e corpo, e devolve um header.
  3. 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.
  • htu com a query. Ela vai em qh, nunca no htu.
  • Hashear um corpo re-serializado. Hasheie os bytes exatos que você envia.
  • Esquecer o bh no 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.