pedrofurtado/qrcode_pix_ruby

Erro na leitura do QRcode

ademir10 opened this issue · 18 comments

Boa tarde Pedro! tudo bem?
Fiz todo o processo de instalação da gem e configuração de acordo com as minhas necessidades e tudo estava funcionando perfeitamente, gerei alguns QRcodes já com o valor correto para pagamento informado, etc, só que agora todo QRcode que eu gero recebo uma mensagem dizendo que não foi possível processar o QRcode.

Você saberia dizer se existe algum bloqueio por parte do Banco central quando eu tento gerar o mesmo QRcode mais de uma vez ou coisa do tipo?

porque nestes testes estou sempre preenchendo os mesmos dados do cliente e valor.

Esse erro é no banco inter, que funcionou corretamente nas primeiras vezes, tinha testado no Bradesco e também funcionou no inicio, só o Itau que não aceitou o QRcode.

te agradeço se puder me responder, valeu!

print

Oi @ademir10, tudo jóia? 👋

Vc poderia compartilhar por aqui algum trechinho ruby q vc crie o QRCode utilizando a gem (se for o caso, troque o valor das informações de cpf/cnpj/afins pra outro valor, mas mantendo a msm qtde de caracteres ta bom)?

Se puder compartilhar tb quais informações vc costuma repetir ao gerar os Pixes, e quais mudam, tb ajudará.

Assim, fica mais facil de ver o q poderia ser. Existem algumas possibilidades, a partir do trecho de código o debug fica mais fluído ✌️

Oi @ademir10, tudo jóia? 👋

Vc poderia compartilhar por aqui algum trechinho ruby q vc crie o QRCode utilizando a gem (se for o caso, troque o valor das informações de cpf/cnpj/afins pra outro valor, mas mantendo a msm qtde de caracteres ta bom)?

Se puder compartilhar tb quais informações vc costuma repetir ao gerar os Pixes, e quais mudam, tb ajudará.

Assim, fica mais facil de ver o q poderia ser. Existem algumas possibilidades, a partir do trecho de código o debug fica mais fluído ✌️

Brigadão pelo feedback, Pedro!

estou fazendo dessa forma no meu controller:
#Para gerar o QRcode e chave pix já com o valor a ser pago
pix = QrcodePixRuby::Payload.new(
pix_key: '18497418000111',
description: 'Fatura Get',
merchant_name: @cliente.razao.first(10),
merchant_city: 'SAO PAULO',
transaction_id: @cliente.id.to_s,
amount: @total_a_pagar.round(2).to_s,
currency: '986',
country_code: 'BR',
postal_code: '09999999',
repeatable: false
)

# QRCode copia-e-cola
@pix_payload = pix.payload
# QRCode
@pix_qrcode = pix.base64

editei o campos description e merchant_name limitando os caracteres para 10 mas mesmo assim não consegui ler o QRcode pelo aplicativo dos bancos

Beleza, @ademir10 , darei uma olhadinha no trecho. De toda maneira, pra confirmar contigo, o ponto-chave é q ao gerar o primeiro QRCode, na primeira vez a leitura acontece tranquilamente, inclusive o pagamento. Agora, ao gerar o segundo QRCode, nem a leitura tampouco pagamento funcionam, certo?

Beleza, @ademir10 , darei uma olhadinha no trecho. De toda maneira, pra confirmar contigo, o ponto-chave é q ao gerar o primeiro QRCode, na primeira vez a leitura acontece tranquilamente, inclusive o pagamento. Agora, ao gerar o segundo QRCode, nem a leitura tampouco pagamento funcionam, certo?

Na verdade os primeiros QRcodes foram lidos e carregados com os respectivos valores nos Apps dos bancos, mas depois de alguns minutos testando, os aplicativos do Bradesco e Banco inter passaram a dizer que o QR gerado não era válido.

o mais estranho é que preenchi os mesmos dados na API de voces lá no Heroku e os aplicativos leram normalmente o QRcode gerado.

estou tentando verificar o que está sendo passado de diferente no meu caso, também acredito que seja alguma validação.

Um primeiro teste que peço q faça, se puder @ademir10, seria utilizar o campo repetable como true. A semantica dele é exatamente o de permitir mais de um pagamento para o mesmo Pix, bele? 🤝

Se a primeira alteração de repeatable para true surtir efeito, sucesso. Caso, ainda assim, no segundo QRCode o pagamento nao seja efetivado (ai valeria testar o pagamento com valores pequenos, 1 real, 10 centavos), mantenha o repeatable como true. Em seguida, uma alteração complementar que lhe peço é definir transaction_id's diferentes para cada vez que um QRCode for gerado 👍 Mas isso somente se o repeatable como true sozinho nao surtir efeito.

Se puder ,compartilhe conosco o resultado dos testes e os trechinhos ruby q vc utilizou 🤓

@ademir10 De todo modo, o cuidado q vc tomou limitando alguns campos a 10/8 caracteres é super valido bele, pois a depender do tamanho do texto o QRCode tb fica invalido, pois excede o limite maximo de caracteres do Pix Copia-e-Cola

estou fazendo os testes aqui com base no que falou e ainda não consegui gerar um novo QRcode que fosse válido..

estou analisando cada parametro pra ver se identifico algo de diferente.

acho que descobri, vou fazer mais testes pra te falar com certeza, mas aparentemente se Você passar o valor com Virgula separando as casas decimais, não é aceito:

Errado: 35,54
Correto: 35.54

@ademir10 Opa, bom ponto! De fato, o esperado pela gem é o valor com ponto bele ✌️

Mas recomendo (independente do resultado do teste acima) o repeatable estar como true, devido a especificação do Pix msm. Pode ser que alguns apps de banco não "olhem" pra essa informação, mas valeria manter como true pra evitar problemas com algum app de banco q analise essa info, agora ou no futuro.

O nome tecnico dela, pra lhe contextualizar, é point of initiation method:

print-pix

@ademir10 Opa, bom ponto! De fato, o esperado pela gem é o valor com ponto bele ✌️

Mas recomendo (independente do resultado do teste acima) o repeatable estar como true, devido a especificação do Pix msm. Pode ser que alguns apps de banco não "olhem" pra essa informação, mas valeria manter como true pra evitar problemas com algum app de banco q analise essa info, agora ou no futuro.

O nome tecnico dela, pra lhe contextualizar, é point of initiation method:

print-pix

opa! thanks for the tip dude!
ainda não consegui gerar dinamicamente, ainda está apresentando o mesmo problema quando eu passo o valor e dados do cliente que estão vindo da invoice, mas pode deixar que te mantenho informado quando descobrir de fato o que falta além desse ponto que eu citei.
agora deu meu horário mas amanhã tem mais! hugs dude!

Tudo funcionando 100% Pedro!
Com relação aos problemas encontrados:

  • Realmente tínhamos um problema com o valor, então realmente é preciso passar o ponto ao invés da virgula.
  • O merchant_name eu estava pegando a Razão social do cliente ao invés da minha e estava tentando limitar a 10 caracteres e mesmo assim não ia, então fui e deixei essa informação estática e resolveu o problema, suspeito que haja algo relacionado a caracteres especiais junto ao nome, te peço até perdão por não ter conseguido fazer esse tipo de teste para ser 100% acertivo.

De qualquer forma já testei pagamentos utilizando os bancos Inter, Caixa, Bradesco e Itaú e todos leram o QRcode gerado e chave gerada e me permitiram fazer os pagamentos.

mais uma vez te agradeço pela atenção e pela excelente gem!

só mais uma dúvida antes de encerrar:

Não existe nenhuma possibilidade de eu receber um webhook da confirmação do pagamento vindo de qualquer banco (caso você conheça algum) ou alguma outra maneira, sem que haja a intervenção das empresas que oferecem esse tipo de serviço? porque praticamente todo o trabalho já foi feito nessa Gem cara, eu só preciso receber um webook do Banco ou banco central ou de qualquer lugar, dizendo que o valor X foi pago junto ao transaction_id.

Maravilha @ademir10 , que bom que deu certo! 🎉

Sobre a última dúvida dos webhooks, de fato não há outra alternativa. Para fazer integração de webhooks de baixa de pagamento do Pix, expiração do Pix e etc, apenas contratando o serviço de API Pix de alguma instituição financeira.

Devido justamente a cada fornecedor expor a API Pix de forma diferente (quanto a endpoints, autenticação, autorização), a gem não pôde incorporar isso em seu escopo, permanecendo com a geração de códigos qrcodes estáticos ou dinâmicos nos casos onde a API do provedor não lhe forneça o qrcode pronto na própria API.

🤝

@ademir10 Tendo novidades, compartilhe conosco bele? Tmj! 🍻

@ademir10 Tendo novidades, compartilhe conosco bele? Tmj! 🍻

Opa! fala Pedro! tudo bem?
Desculpa, na correria aqui acabei me esquecendo de ter dar um ultimo feedback.

ficou tudo 100% funcionando para todos os bancos que testamos:
Bradesco
Itaú
Caixa Economica
Banco Inter

A única coisa que ficou faltando mesmo foi a maravilha do Webhook confirmando os pagamentos rs.
Realmente achei uma sacanagem esse lance de ter que contratar alguém para fazer o que o próprio banco já faz, porque se ele te envia uma push notification, porque não nos permitir configurar uma URL para recebemento dos webwooks?

achei meio que, criar um "novo modelo de negócio forçado a ser pago" rs

Lendo agora com mais calma a sua resposta a respeito dos Webhooks:
"Devido justamente a cada fornecedor expor a API Pix de forma diferente (quanto a endpoints, autenticação, autorização)"

Voce já chegou a fazer essa integração com alguma instituição que disponibilizasse a documentação para isso e sem cobrar pelos envios das confirmações?

@ademir10 Joia! Que bom que voltou a funcionar corretamente 🎉

Sobre sua duvida de integração com APIs Pix de instiuições financeiras, algumas que posso compartilhar (existem várias, peguei apenas algumas para exemplificar, tudo bem?):

Yapay -> https://intermediador.dev.yapay.com.br/#/transacao-pix
Gerencianet -> https://dev.gerencianet.com.br/docs/api-pix-endpoints
PagSeguro -> https://dev.pagseguro.uol.com.br/reference/pix-create-charge
Pagar.me -> https://docs.pagar.me/docs/pix-1 e https://docs.pagar.me/reference/pix-2

Cada uma pode ter um modelo de precificação diferente (algumas é cobrado uma taxa por Pix gerado, ou somente por Pix pago, etc.). Todas elas possuem integração com a API do Bacen, e disponibilizam pra vc o QRCode pronto na API e notificação de pagamento via webhooks.

Inclusive, uma vez que vc utilize algum provedor de API Pix, o uso dessa gem se torna desnecessária, pois a maior parte deles ja retorna o Pix copia-e-cola e qrcode pra ti na response.

Essa gem ficaria portanto, com a geração de Pix sem webhooks (os chamados "Pix estáticos") ou a geração de Pix dinamico, caso o provedor nao lhe forneça o qrcode pronto, e sim somente os metadados do Pix (que servem de parametro pra gemzinha montar o qrcode, por sua vez).

🍻

@ademir10 Irei encerrar a issue, mas fique a vontade para reabrir, se surgir algo ou alguma duvida tudo bem? 🍻