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.36k stars 268 forks source link

[Dúvida] no [QRCode] - Como identificar que um recebimento é de um QRCode? #22

Closed mvleandro closed 4 years ago

mvleandro commented 4 years ago

Descreva sua dúvida ou problema Já fiz uma ponderação aqui de que o campo txid do QRCode estático não deveria ser preenchido pelo usuário, mas sim pelo PSP e deveria ser único, desta forma seria possível correlacionar diversos recebimentos a um único QRCode estático. Isto traria uma experiência de usuário muito mais fluida para o usuário final. Ex.:

1) Usuário A gera um QRCode para dividir a conta de um bar e envia para os amigos; 2) Amigos escaneam e pagam este QRCode; 1) Usuário A consegue ver todos os pagamentos recebidos a partir daquele QRCode específico, gerado para esta ocasião.

Meu primeiro ponto é: É realmente a palavra final do BACEN este ponto a respeito do txid? Porque deixar o identificador aberto (e não único) só torna a experiência mais complicada para o usuário final. Ele terá que ficar vendo várias entradas soltas no extrato e procurando pelo identificador que ele mesmo criou (e que pode ser repetido, o que torna as coisas mais confusas ainda).

Bem, tirando o ponto acima, o manual de experiência do usuário diz que no extrato eu devo diferenciar visualmente quando uma transação recebida é referente a um QRCode gerado. A despeito de tudo o que eu falei acima, qual é a melhor forma de identificar isso? Procurar pela presença do txid? A presença dele garante que aquele Pix partiu de um QRCode?

Outra dúvida: É vedado o envio do txid quando uma transação não partir de um QRCode?

Mais uma dúvida: O QRCode dinâmico também possui um txid. Assumindo a natureza transacional dele, posso assumir que, no caso do dinâmico, este txid é fornecido pelo PSP e é único e não é fornecido pelo usuário final, correto? Até porque, pela api de recebimento o txid é a chave principal utilizada. Meu entendimento está correto?

ninrod commented 4 years ago

Já fiz uma ponderação aqui de que o campo txid do QRCode estático não deveria ser preenchido pelo usuário, mas sim pelo PSP e deveria ser único, desta forma seria possível correlacionar diversos recebimentos a um único QRCode estático.

Não há maneira de se garantir esse processo uma vez que a "string" do QR estático pode ser facilmente gerada (inclusive via editor de texto).

deveria ser único, desta forma seria possível correlacionar diversos recebimentos a um único QRCode estático. Isto traria uma experiência de usuário muito mais fluida para o usuário final. Ex.: Usuário A gera um QRCode para dividir a conta de um bar e envia para os amigos; Amigos escaneam e pagam este QRCode; Usuário A consegue ver todos os pagamentos recebidos a partir daquele QRCode específico, gerado para esta ocasião.

@mvleandro, perfeito. Não vejo qualquer óbice em se implementar exatamente o fluxo que você descreveu tendo como base a especificação atual. Qual é exatamente o problema que você enxerga que existe na especificacão atual que impeça que um fluxo exatamente como este seja implementado?

Bem, tirando o ponto acima, o manual de experiência do usuário diz que no extrato eu devo diferenciar visualmente quando uma transação recebida é referente a um QRCode gerado. A despeito de tudo o que eu falei acima, qual é a melhor forma de identificar isso? Procurar pela presença do txid? A presença dele garante que aquele Pix partiu de um QRCode?

Exatamente.

Outra dúvida: É vedado o envio do txid quando uma transação não partir de um QRCode?

Correto.

Mais uma dúvida: O QRCode dinâmico também possui um txid. Assumindo a natureza transacional dele, posso assumir que, no caso do dinâmico, este txid é fornecido pelo PSP e é único e não é fornecido pelo usuário final, correto? Até porque, pela api de recebimento o txid é a chave principal utilizada. Meu entendimento está correto?

Não está correto o entendimento. O txid é sempre fornecido pelo usuário (o cliente da API). No caso do QR dinâmico, especificamente via PUT /cob/{txid}, de forma idempotente.

mvleandro commented 4 years ago

@ninrod Não vejo qualquer óbice em se implementar exatamente o fluxo que você descreveu tendo como base a especificação atual. Qual é exatamente o problema que você enxerga que existe na especificacão atual que impeça que um fluxo exatamente como este seja implementado?

O problema é que o Manual de Experiência de usuário me obriga a manter o exato valor informado pelo cliente final e não um valor único gerado. Pela não obrigatoreidade de ser único eu não tenho como garantir esta correlação.

Não está correto o entendimento. O txid é sempre fornecido pelo usuário (o cliente da API). No caso do QR dinâmico, especificamente via PUT /cob/{txid}, de forma idempotente.

@ninrod Agora estou confuso. A implementação prevista na api de recebimento não contempla o usuário fornecendo o txid. Este campo é criado pelo PSP e é devolvido na resposta do endpoint de criação do documento. Desconheço este endpoint que você mencionou. Dúvida: A api de recebimento foi descontinuada?

ninrod commented 4 years ago

@mvleandro,

O problema é que o Manual de Experiência de usuário me obriga a manter o exato valor informado pelo cliente final e não um valor único gerado. Pela não obrigatoreidade de ser único eu não tenho como garantir esta correlação.

Temos dois fluxos diferentes: um que é o usuário recebedor utilizando o Pix diretamente no seu app mobile e outro que é via API PIx. O fluxo via mobile é mais simples. Você poderia até, no seu app mobile, restringir que o usuário escolha sempre um tixd único. Mas nada vai impedir que "por fora" do app, o usuário crie um QR estático com o mesmo txid. De qualquer forma, não há problema: os pix recebidos associados a um mesmo txid estarão agrupados. Talvez seja exatamente isso que o usuário queira.

@ninrod Agora estou confuso. A implementação prevista na api de recebimento não contempla o usuário fornecendo o txid. Este campo é criado pelo PSP e é devolvido na resposta do endpoint de criação do documento. Desconheço este endpoint que você mencionou. Dúvida: A api de recebimento foi descontinuada?

No Pix temos que agir rápido e eventualmente quebrar algumas coisas; esse foi o caso com a "API de recebimentos", que passou a se chamar "API Pix". O repositório antigo foi arquivado e no readme você pode ver que há uma explicação e é mostrado o link para o repositório novo. Os links na página do Bacen também foram atualizados. A versão foi incrementada e não é compatível com a anterior, por isso incrementamos o major version seguindo o "semver".

ninrod commented 4 years ago

@mvleandro , posso responder alguma questão adicional?

mvleandro commented 4 years ago

A respeito deste assunto não, @ninrod Obrigado!