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

[NEGÓCIO] Caracteres especiais no Campo InfoAdicional de QR Codes #509

Open ThainaDhaila opened 2 years ago

ThainaDhaila commented 2 years ago

Olá! O Manual de Padrões para Iniciação do Pix estabelece que o campo de InfoAdicional é um Conjunto livre de caracteres, com limite de tamanho, no entanto, o Manual do BR Code diz que apenas os seguintes caracteres podem ser utilizados: • letras: de A a Z (somente maiúsculas); • dígitos de 0 a 9; • os seguintes caracteres especiais: $ % * + - . / : • o caractere de espaço em branco.

Realizamos alguns testes e apenas os PSPs Itaú e Santander não conseguem realizar decode de QR CODE com alguns dos caracteres especiais especificados acima, impossibilitando assim o pagamento, enquanto outras instituições conseguem realizar decode com esses e outros caracteres especiais, como acento agudo, por exemplo.

Em uma situação como essa qual deveria ser o melhor caminho a seguir?

Obs: Uma alternativa seria padronizar o Manual de iniciação e o Manual do BR Code adicional ao Manual de iniciação a limitação de caracteres especiais.

renatofrota commented 2 years ago

Pode enviar um exemplo de string de qrcode não lido com acentuação?

Você se certificou de informar o número de caracteres (e não de bytes) do campo? Esse é um erro comum, já que os caracteres acentuados são multibyte.

Em qua, 1 de jun de 2022 10:39, ThainaDhaila @.***> escreveu:

Olá! O Manual de Padrões para Iniciação do Pix estabelece que o campo de InfoAdicional é um Conjunto livre de caracteres, com limite de tamanho, no entanto, o Manual do BR Code diz que apenas os seguintes caracteres podem ser utilizados: • letras: de A a Z (somente maiúsculas); • dígitos de 0 a 9; • os seguintes caracteres especiais: $ % * + - . / : • o caractere de espaço em branco.

Realizamos alguns testes e apenas os PSPs Itaú e Santander não conseguem realizar decode de QR CODE com alguns dos caracteres especiais especificados acima, impossibilitando assim o pagamento, enquanto outras instituições conseguem realizar decode com esses e outros caracteres especiais, como acento agudo, por exemplo.

Em uma situação como essa qual deveria ser o melhor caminho a seguir?

Obs: Uma alternativa seria padronizar o Manual de iniciação e o Manual do BR Code adicional ao Manual de iniciação a limitação de caracteres especiais.

— Reply to this email directly, view it on GitHub https://github.com/bacen/pix-api/issues/509, or unsubscribe https://github.com/notifications/unsubscribe-auth/AAZ2XSRZWNAWMPJ6FDOCN2LVM5RYBANCNFSM5XRI6H3Q . You are receiving this because you are subscribed to this thread.Message ID: @.***>

ThainaDhaila commented 2 years ago

00020126710014BR.GOV.BCB.PIX01365b512f1b-c50e-495e-b25f-94f9a55d86810209Paga aí )52040000530398654040.015802BR5925Vinicius Augusto Costa Li6009SAO PAULO61080540900062220518Ola123IdentificdoR63046C18

00020126690014br.gov.bcb.pix01360d1d2aa2-4e2d-4a14-bab2-b5ce362d6cb30207PAGA AÍ52040000530398654041.005802BR5911TESTE TESTE6009SAO PAULO6108043760206209050512345630472CD

renatofrota commented 2 years ago

Erro replicado aqui. Obrigado por compartilhar.

O mais doido é que aceitam colchetes. Não aceitaram algumas letras acentuadas e o parênteses.

Eu vou ajustar meus sistemas para substituir os caracteres acentuados ao gerar o QR Code, por hora. Mas é uma pena, por causa de 2 bancos...

Agora é abrir reclamação no site do BACEN e rezar pra ele cobrar a correção dos bancões, que vivem atrasando nosso lado. 😑

Em qua, 1 de jun de 2022 15:09, ThainaDhaila @.***> escreveu:

00020126710014BR.GOV http://00020126710014br.gov/.BCB.PIX01365b512f1b-c50e-495e-b25f-94f9a55d86810209Paga aí )52040000530398654040.015802BR5925Vinicius Augusto Costa Li6009SAO PAULO61080540900062220518Ola123IdentificdoR63046C18

00020126690014br.gov.bcb.pix01360d1d2aa2-4e2d-4a14-bab2-b5ce362d6cb30207PAGA AÍ52040000530398654041.005802BR5911TESTE TESTE6009SAO PAULO6108043760206209050512345630472CD

— Reply to this email directly, view it on GitHub https://github.com/bacen/pix-api/issues/509#issuecomment-1143974109, or unsubscribe https://github.com/notifications/unsubscribe-auth/AAZ2XSTDBDOL2LL5SCG5Y6DVM6RPHANCNFSM5XRI6H3Q . You are receiving this because you commented.Message ID: @.***>

gustavostz commented 2 years ago

Olá @ThainaDhaila!

O motivo desses dois QR Codes terem sido recusados provavelmente seja por conta do "í", pois não é aceito caracteres que representem mais de 1 byte, e nesse caso, todas as letras acentuadas acabam ocupando mais de 1 byte para sua representação.

Sobre o ponto dos caracteres aceitos pelo Manual do BR Code, acredito que esteja olhando uma versão antiga da documentação, aconselho sempre pegar direto pelo site do bcb a versão mais atualizada.

Vale ressaltar que o Manual do BR Code faz referência a documentação do (EMV® QRCPS) Merchant-Presented Mode na qual é comentado que os caracteres utilizados serão do tipo Alphanumeric Special (ans), definidos pelo book EMV Book 4 que apresenta a seguinte definição:

image

Cujo o anexo B referido, com os caracteres permitidos estão nessa tabela:

image

Recomendo utilizar sempre essa tabela como referência para geração dos QR Codes, desde que comecei utiliza-la não tive mais problemas com decodes em outros bancos :) .

Obs: Embora na tabela apareça acentos como ` ^ ~ , eles só podem ser usados de forma separada, ou seja, se você juntar ele com alguma outra letra (exemplo: à ô ã), acarretará em um caractere de tamanho maior de 1 byte, podendo ser negado durante a leitura do QR Code.

rubenskuhl commented 2 years ago

Olá @ThainaDhaila!

O motivo desses dois QR Codes terem sido recusados provavelmente seja por conta do "í", pois não é aceito caracteres que representem mais de 1 byte, e nesse caso, todas as letras acentuadas acabam ocupando mais de 1 byte para sua representação.

Sobre o ponto dos caracteres aceitos pelo Manual do BR Code, acredito que esteja olhando uma versão antiga da documentação, aconselho sempre pegar direto pelo site do bcb a versão mais atualizada.

Vale ressaltar que o Manual do BR Code faz referência a documentação do (EMV® QRCPS) Merchant-Presented Mode na qual é comentado que os caracteres utilizados serão do tipo Alphanumeric Special (ans), definidos pelo book EMV Book 4 que apresenta a seguinte definição:

image

Cujo o anexo B referido, com os caracteres permitidos estão nessa tabela:

image

Recomendo utilizar sempre essa tabela como referência para geração dos QR Codes, desde que comecei utiliza-la não tive mais problemas com decodes em outros bancos :) .

Obs: Embora na tabela apareça acentos como ` ^ ~ , eles só podem ser usados de forma separada, ou seja, se você juntar ele com alguma outra letra (exemplo: à ô ã), acarretará em um caractere de tamanho maior de 1 byte, podendo ser negado durante a leitura do QR Code.

Acentuação usa mais de 1 byte em Unicode. ISO 8859-1, por exemplo, tem vários acentuados no mesmo 1 byte do ASCII, desde que a representação seja de 8 bits e não de 7 bits.

gustavostz commented 2 years ago

Olá @ThainaDhaila! O motivo desses dois QR Codes terem sido recusados provavelmente seja por conta do "í", pois não é aceito caracteres que representem mais de 1 byte, e nesse caso, todas as letras acentuadas acabam ocupando mais de 1 byte para sua representação. Sobre o ponto dos caracteres aceitos pelo Manual do BR Code, acredito que esteja olhando uma versão antiga da documentação, aconselho sempre pegar direto pelo site do bcb a versão mais atualizada. Vale ressaltar que o Manual do BR Code faz referência a documentação do (EMV® QRCPS) Merchant-Presented Mode na qual é comentado que os caracteres utilizados serão do tipo Alphanumeric Special (ans), definidos pelo book EMV Book 4 que apresenta a seguinte definição: image Cujo o anexo B referido, com os caracteres permitidos estão nessa tabela: image Recomendo utilizar sempre essa tabela como referência para geração dos QR Codes, desde que comecei utiliza-la não tive mais problemas com decodes em outros bancos :) . Obs: Embora na tabela apareça acentos como ` ^ ~ , eles só podem ser usados de forma separada, ou seja, se você juntar ele com alguma outra letra (exemplo: à ô ã), acarretará em um caractere de tamanho maior de 1 byte, podendo ser negado durante a leitura do QR Code.

Acentuação usa mais de 1 byte em Unicode. ISO 8859-1, por exemplo, tem vários acentuados no mesmo 1 byte do ASCII, desde que a representação seja de 8 bits e não de 7 bits.

Bom ponto. Mas nesse caso funcionará a lógica, pois de fato é encodado em Unicode:

image