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.32k stars 262 forks source link

Dúvida no response -Tratamento de erros #247

Open gpneto opened 3 years ago

gpneto commented 3 years ago

Estou com dúvida referente ao campo violacoes.propriedade. No exemplo :

{
  "type": "https://pix.bcb.gov.br/api/v2/error/CobOperacaoInvalida",
  "title": "Cobrança inválida.",
  "status": 400,
  "detail": "A requisição que busca alterar ou criar uma cobrança para pagamento imediato não respeita o schema ou está semanticamente errada.",
  "violacoes": [
    {
      "razao": "O campo cob.valor.original não respeita o schema.",
      "propriedade": "cob.valor.original"
    }
  ]
}

Consta o valor "cob.valor.original", este campo devemos sempre colocar "cob." no início, ou poderia ser apenas "valor.original" ?

Questiono isso porque o payload de request não tem um campo raiz "cob", quando no erro é retornado a propriedade que foi realizada a validação naturalmente deve ser igual a propriedade do envio do payload.

Neste caso acredito seria melhor retornar "valor.original", porque se não fica parecendo que o payload enviado foi :

{
    "cob": {
        {
            .
            .
            .
            "valor": {
                "original": "37.000"
            },
            "chave": "7d9f0335-8dcc-4054-9bf9-0dbd61d36906",
            .
            .
            .
        }

    }
}
ninrod commented 3 years ago

@gpneto, bom dia.

Entendo que o cob aqui é para fornecer "contexto". Seria para dizer que a chave "diz respeito" a um objeto do endpoint "cob" (e não /cobv, e não /pix, etc...):

Pode-se entender que o payload enviado foi:

var cob = {
  ...
  "valor": {
    "original": "0.50"
  },
  "chave": "email#example.com"
  ...
}

Por outro lado, constam na documentação apenas exemplos de como se utilizaria a propriedade. Não utilizamos, propriamente, um schema para regrar o preenchimento de violacoes[n].propriedade. Como não existe "schema" para isso, em um primeiro momento, entende-se que as duas formas estariam aderentes "cob.chave" e apenas "chave".

A preocupação aqui seria o integrador ter que reescrever parte do seu código em caso de migrações do PSP A para o PSP B devido a essa diferença no campo "propriedade". Não acho que seria um problema relevante, mas posso estar enganado.