bacen / pix-api

API Pix: a API do Arranjo de Pagamentos Instantâneos Brasileiro, Pix, criado pelo Banco Central do Brasil.
https://bacen.github.io/pix-api
2.37k stars 268 forks source link

Dúvida no erro recebido de GET /cobv #504

Open amarborto opened 2 years ago

amarborto commented 2 years ago

Olá estou alterando de instuição bancaria e me deparei com esse erro no GET de cobv que não existia anteriormente, o padrão de data esta correto até onde entendo, não importa o quando eu altero o intervalo de busca sempre aparece esse erro. Conseguem ver algo errado?


/cobv?inicio=2022-04-01T00:00:00Z&fim=2022-04-30T23:59:59Z&cpf=DOC_VALIDO_AQUI&paginacao.paginaAtual=0&paginacao.itensPorPagina=100

{
   httpStatus: 400,
   status: 400,
   type: 'https://pix.bcb.gov.br/api/v2/error/RequisicaoInvalida',
   title: 'Requisição inválida',
   correlationId: 'service-084ce088-9b1f-4c01-8479-375d076d7fe3',
   violacoes: [
     {
       propriedade: '.query.fim',
       razao: 'O timestamp representado pelo parâmetro fim é inválido',
      valor:  [ '2022-04-30T23:59:59Z', '2022-04-30T23:59:59Z' ]
    }
   ]
 }
rubenskuhl commented 2 years ago

O que está errado, ao que parece, é que fim é um parâmetro no futuro, e uma consulta histórica se refere ao passado... talvez colocar o timestamp de agora como fim ?

amarborto commented 2 years ago

O que está errado, ao que parece, é que fim é um parâmetro no futuro, e uma consulta histórica se refere ao passado... talvez colocar o timestamp de agora como fim ?

Já fiz esse teste e o erro ocorre da mesma forma. Mesmo se esse fosse o caso deveria funcionar com data no futuro.

rubenskuhl commented 2 years ago

O que está errado, ao que parece, é que fim é um parâmetro no futuro, e uma consulta histórica se refere ao passado... talvez colocar o timestamp de agora como fim ?

Já fiz esse teste e o erro ocorre da mesma forma. Mesmo se esse fosse o caso deveria funcionar com data no futuro.

A especificação não prevê comportamento para datas no futuro, então o "deveria funcionar" não se aplica. Tudo que deveria acontecer precisaria estar escrito.

Como pode haver discrepância de data/hora entre o seu sistema e o do PSP, experimente fazer a pesquisa com pouco tempo depois do início e ir ampliando.

brunosouzaamaral commented 2 years ago

@amarborto estou tendo o mesmo erro ao tentar chamar a API do Sicoob. Conseguiu resolver?

amarborto commented 2 years ago

@brunosouzaamaral sim consegui resolver, acontece é que não havia nada de errado com a requisição, em contato com o pessoal do banco só conseguimos corrigir esse erro enviando juntamente com o nosso certificado+chave_privada a rootCA do certificado do banco, isso levando em conta que voce já validou seu certificado junto ao banco.

então na requisição fica assim:

    cert:  "certificado.crt"
    key:  "chaveprivada.key" 
    ca:   "rootCaSectigo.pem"

Aparentemente a minha aplicação não estava reconhecendo o certificado do banco na "ca store" do servidor, ai segundo eles eu precisaria adicionar ela na requisição, eu fiz isso ai dai em diante o problema da data não ocorreu mais.

brunosouzaamaral commented 2 years ago

@amarborto pra criar a aplicação eu gerei um PEM do meu certificado e o banco validou. Desse mesmo certificado eu gerei o CRT e a KEY que é o que estou mandando na requisição. Mas pelo que entendi esse PEM que vc está mandando na requisição não seria esse que eu gerei, seria o do próprio banco né? Eles que te enviaram? O estranho é que nos endpoints que não usam o parâmetro Data está funcionando normal.

amarborto commented 2 years ago

O estranho é que nos endpoints que não usam o parâmetro Data está funcionando normal.

@brunosouzaamaral exatamente isso, quando não envolve data funciona sem problemas. Eu tambem não entendi a correlação entre o certificado e esse problema (eles também não me responderam sobre esse problema em questão)

na requisição voce envia o CRT e a KEY da forma que voce esta enviado mesmo, no entanto conforme instruções do banco a minha aplicação não estava reconhecendo o certificado do banco na trust store do meu servidor então eu deveria inserir a CAroot do certificado do banco na requisição juntamente com o crt e a key.

Para obter o certificado vc pode baixado do seu próprio navegador pelo cadeado verde que aparece quando voce acessa o auth.sicoob.com.br, mas como o banco provavelmente não liberou seu ip de desenvolvimento para homologação então você não irá conseguir abrir esse site no seu navegador, a alternativa é baixar direto no terminal do seu servidor onde a aplicação está, com esse comando: openssl s_client -showcerts -verify 5 -connect auth.sicoob.com.br:443 < /dev/null ai você cria o arquivo pem com o certificado da Sectigo, dai pra frente na requisição vc envia o seu CRT + KEY + CA

brunosouzaamaral commented 2 years ago

@amarborto o suporte acabou de me dar uma solução aqui que funcionou:

"Pode, por gentileza, realizar um teste escapando o caractere reservado ":" . Ex: 2022-01-01T03%3A00%3A00.000Z"

Altarei aqui e deu certo! Muito obrigado pela ajuda.