{"id":13404810,"url":"https://github.com/renatomb/php_qrcode_pix","last_synced_at":"2026-05-05T19:37:13.180Z","repository":{"id":48614146,"uuid":"313320585","full_name":"renatomb/php_qrcode_pix","owner":"renatomb","description":"Implementação da geração de QRCode do Pix em PHP","archived":false,"fork":false,"pushed_at":"2026-04-13T18:32:51.000Z","size":3065,"stargazers_count":217,"open_issues_count":12,"forks_count":78,"subscribers_count":25,"default_branch":"main","last_synced_at":"2026-04-13T20:23:30.547Z","etag":null,"topics":["brcode","emv","gerador","php-qrcode-pix","pix","pix-copia-e-cola","qrcode"],"latest_commit_sha":null,"homepage":"https://dinheiro.tech/qr-code-pix","language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"cc0-1.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/renatomb.png","metadata":{"files":{"readme":"readme.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2020-11-16T14:02:15.000Z","updated_at":"2026-04-13T18:32:58.000Z","dependencies_parsed_at":"2024-10-26T08:17:38.102Z","dependency_job_id":null,"html_url":"https://github.com/renatomb/php_qrcode_pix","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/renatomb/php_qrcode_pix","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/renatomb%2Fphp_qrcode_pix","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/renatomb%2Fphp_qrcode_pix/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/renatomb%2Fphp_qrcode_pix/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/renatomb%2Fphp_qrcode_pix/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/renatomb","download_url":"https://codeload.github.com/renatomb/php_qrcode_pix/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/renatomb%2Fphp_qrcode_pix/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32665508,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-05T11:29:49.557Z","status":"ssl_error","status_checked_at":"2026-05-05T11:29:48.587Z","response_time":54,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["brcode","emv","gerador","php-qrcode-pix","pix","pix-copia-e-cola","qrcode"],"created_at":"2024-07-30T19:01:51.745Z","updated_at":"2026-05-05T19:37:13.167Z","avatar_url":"https://github.com/renatomb.png","language":"PHP","funding_links":[],"categories":["PHP"],"sub_categories":[],"readme":"# php qrcode pix\r\n\r\nEste repositório contém o conjunto de código necessário à implementação do QRCode de recebimento de pagamentos do [PIX do Banco Central](https://www.bcb.gov.br/estabilidadefinanceira/pix) em PHP.\r\n\r\n## Versão live demo\r\n\r\nEstou disponibilizando a versão live deste repositório no site [Gerador de QR Code do pix](http://qrcodepix.dinheiro.tech), bem como do [Decodificador de BR Code do Pix](https://decoderpix.dinheiro.tech/) ambos para uso gratuito para fins de testes.\r\n\r\nNão utilizem a versão demo em ambiente de produção pois esse não é o propósito dela. Algumas modificações recentes na formação do código pix já causaram mal funcionamento na demo até o momento que fui capaz de identificar o problema.\r\n\r\n## Dependências\r\n\r\nPara a geração do QRCode foi usada a biblioteca [PHP QRCode](http://phpqrcode.sourceforge.net/). O conteúdo da biblioteca está no diretório `phpqrcode`.\r\n\r\n## Introdução ao código do PIX\r\n\r\nConforme o [manual de implementação do BR Code](doc/ManualDoBRCode.pdf) o Pix adota a representação de dados estruturados de pagamento proposta no padrão EMV®1.\r\n\r\nRecomendo a leitura do manual em questão para obter informações iniciais sobre a implementação.\r\n\r\nPara se aprofundar nos detalhes técnicos ou se quiser informações sobre os QR Codes dinâmicos também\r\nrecomendo a leitura do [Manual de Padrões para Iniciação do Pix](doc/ManualDePadroesParaIniciacaoDoPix.pdf).\r\n\r\nO pagamento através do pix pode ser feito de forma manual com a digitação dos dados do recebedor ou de maneira automatizada onde o recebedor disponibiliza uma requisição de pagamento que será lida pela instituição do pagador. Essa requisição de pagamentyo pode ser em formato texto, que foi denominado Pix Copia e Cola, ou através de um QRCode contendo o mesmo texto do Pix Copia e Cola.\r\n\r\n### Formação do código de pagamento\r\n\r\nO código de pagamento é um campo de texto alfanumérico (A-Z,0-9) permitindo os caracteres especiais `$ % * + - . / :`.\r\n\r\nNa estrutura EMV®1 os dois primeiros dígitos representam o código ID do emv e os dois dígitos seguintes contendo o tamanho do campo. O conteúdo do campo são os caracteres seguintes até a quantidade de caracteres estabelecida.\r\n\r\n#### Exemplos de código EMV\r\n\r\nNo código `000200` temos:\r\n\r\n* `00` Código EMV 00 que representa o Payload Format Indicator;\r\n* `02` Indica que o conteúdo deste campo possui dois caracteres;\r\n* `00` O conteúdo deste campo é 00.\r\n\r\nNo código `5303986` temos:\r\n\r\n* `53` Código EMV 53 que indica a Transaction Currency, ou seja: a moeda da transação.\r\n* `03` Indica que o tamanho do campo possui três caracteres;\r\n* `986` Conteúdo do campo é 986, que é o código para  BRL: real brasileiro na ISO4217.\r\n\r\nNo código `5802BR` temos:\r\n\r\n* `58` Código EMV 58 que indica o Country Code.\r\n* `02` Indica que o tamanho do campo possui dois caracteres;\r\n* `BR` Conteúdo do campo é BR, que é o código do país Brasil conforme  ISO3166-1 alpha 2.\r\n\r\nUm pix copia e cola contendo os somente os campos acima ficaria `00020053039865802BR`, não há qualquer espaço ou outro caractere separando os campos pois o tamanho de cada campo já está especificado logo após o ID, sendo possível fazer o processamento.\r\n\r\nPara facilitar a visualização de um código EMV a partir de qualquer Pix Copia-e-Cola, estou disponibilizando\r\ntambém o [Decodificador do Pix Copia-e-Cola](https://decoderpix.dinheiro.tech/) cujo código fonte está\r\nno repositório [decoder_brcode_pix](https://github.com/renatomb/decoder_brcode_pix).\r\n\r\n### Especificades do BR Code\r\n\r\nO Pix utiliza o padrão BR Code do banco central, em especial os campos de ID 26 a 51. Esses campos possuem *filhos* que seguem o mesmo padrão do EMV explicado acima.\r\n\r\n#### Exemplos BR Code\r\n\r\nObserve o código: `26580014br.gov.bcb.pix013642a57095-84f3-4a42-b9fb-d08935c86f47`, nele há:\r\n\r\n* `26` Código EMV 26 que representa o Merchant Account Information.\r\n* `58` Indica que o tamanho do campo possui 58 caracteres.\r\n* Demais caracteres representam o conteúdo do campo `0014br.gov.bcb.pix013642a57095-84f3-4a42-b9fb-d08935c86f47`.\r\n\r\nNele, temos dois *filhos*:\r\n\r\nO primeiro é `0014br.gov.bcb.pix`:\r\n\r\n* `00` ID 00 representa o campo GUI do BRCode (obrigatório).\r\n* `14` Indica que o tamanho do campo possui 14 caracteres.\r\n* `br.gov.bcb.pix` é conteúdo do campo.\r\n\r\nO segundo é `013642a57095-84f3-4a42-b9fb-d08935c86f47`:\r\n\r\n* `01` O ID 01 representa a chave PIX, que pode ser uma chave aleatória (EVP), e-mail, telefone, CPF ou CNPJ.\r\n* `36` Indica que o tamanho do campo possui 36 caracteres.\r\n* `42a57095-84f3-4a42-b9fb-d08935c86f47` indica a chave pix do destinatário, no caso a chave em questão está no formato UUID que é uma chave aleatória (EVP).\r\n\r\nSe você está apreciando o conteúdo deste trabalho, sinta-se livre para fazer qualquer doação para a chave `42a57095-84f3-4a42-b9fb-d08935c86f47` :)\r\n\r\n## Implementação\r\n\r\nEsta implementação foi feita através do uso de pequenas funções simples, de maneira estruturada sem classes e objetos buscando atingir o maior número de pessoas.\r\n\r\nPara gerar a linha do pix copia e cola, coloque os valores desejados em cada campo em um vetor qualquer onde o índice é o código ID do EVP. Caso o campo tenha filhos basta incluir mais uma dimensão no vetor. Passe o vetor como parâmetro para a função `montaPix`.\r\n\r\nA função irá retornar a linha digitável do pix semi-completa, faltando apenas o campo do CRC que deve ser adicionado no campo 63 possuindo o tamanho de 4 bytes. Dessa forma o código 6304 deve estar inserido na função para cálculo do CRC `crcChecksum`.\r\n\r\nExemplo:\r\n\r\n```php\r\n\u003c?php\r\n$pix=montaPix($px);\r\n$pix.=\"6304\";\r\n$pix.=crcChecksum($pix);\r\n?\u003e\r\n```\r\n\r\nApós gerada a linha do pix copia e cola ela pode ser encaminhada para o pagador (whatsapp, e-mail) ou enviada para o gerador de qrcode.\r\n\r\nNo arquivo `exemplo.php` há um exemplo mais completo e com comentários a cerca de alguns dos campos possíveis. Para informações mais completas dos campos consulte a documentação oficial do [Bacen](https://bcb.gov.br).\r\n\r\nTambém estou disponibilizando uma versão live/demo no site [Gerador de QR Code do PIX](http://qrcodepix.dinheiro.tech/).\r\n\r\n## Nota sobre o uso de chaves EVP\r\n\r\nAs chaves aleatórias (Endereço Virtual de Pagamento - EVP) devem ser informadas em letras minúsculas.\r\n\r\n## Nota sobre o uso da descrição do pagamento (campo 26 02)\r\n\r\nA descrição do pagamento é exibida para o pagador no ato da confirmação do pix no aplicativo do cliente, nos bancos abaixo-relacionados essa informação consta no extrato da conta de quem recebeu o pix:\r\n\r\n* Nubank;\r\n\r\n## Nota sobre o uso do identificador de transação\r\n\r\nConforme o manual [manual de implementação do BR Code](doc/ManualDoBRCode.pdf), pg 5, nota de rodapé, temos: \"Conclui-se que, se o gerador do QR optar por não utilizar um  transactionID, o valor `***` deverá ser usado para indicar essa escolha.\r\n\r\n### Nubank\r\n\r\nO identificador usado não é exibido no extrato da NuConta. A descrição da transação (campo 26 02) é facilmente\r\nidentificável no aplicativo.\r\n\r\n### Itaú\r\n\r\nItaú recusa o pix de qualquer identificador de transação que não tenha sido gerado previamente no aplicativo deles. Conforme [informações que obtive](https://github.com/bacen/pix-api/issues/214) para utilizar qr code gerado fora do aplicativo do itaú, é necessário entrar em contato com o gerente para que o mesmo realize a liberação da conta para uso de qrcoe de terceiros. Se não houver essa liberação o Itaú está recusando o recebimento do pix com base no identificador utilizado.\r\n\r\n## Testes realizados\r\n\r\nEsta implementação foi testada, realizando a leitura do QRCode, Pix Copia-e-Cola, envio de Pix para outra instituição e Recebimento de pix de outra instituição, nos aplicativos dos seguintes bancos:\r\n\r\n* [Banco Inter](https://www.bancointer.com.br/convite-abrir-conta/?c=cElVNw2WQb);\r\n* [Sofisa direto](https://sd.sofisadireto.com.br/MGM/IndiqueEGanhe/?codigo=RMB0283599);\r\n* [NuBank](https://nubank.com.br/indicacao/nu/?id=_WBz8C2qwOcAAAF3o3bmBg\u0026msg=cb40c\u0026utm_channel=social\u0026utm_medium=referral\u0026utm_source=mgm);\r\n* [C6 Bank](https://c6bank.onelink.me/fSbV/c6indica);\r\n* [AgZero / Safra Wallet](https://banco.dinheiro.tech/bancos-nacionais:agzero);\r\n* [BMG](https://banco.dinheiro.tech/bancos-nacionais:bmg);\r\n* [PagBank](https://indicapagbank.page.link/EfW5F);\r\n* [Digio](https://digio.com.br/convite/?id=3c387eb1\u0026utm_source=mgm\u0026utm_medium=convite\u0026utm_campaign=cartao-credito-indica);\r\n* [MercadoPago](http://mpago.li/1JxaWKH);\r\n* Itau;\r\n* Bradesco;\r\n* BS2;\r\n* Banco do Brasil;\r\n* Santander;\r\n* Sicredi;\r\n* AgiBank;\r\n* GerenciaNet;\r\n\r\n## Autor\r\n\r\nDesenvolvido em 2020/2021 por [Renato Monteiro Batista](https://renato.ovh).\r\n\r\n## Agradecimentos\r\n\r\nAgradeço inicialmente a todos aqueles que puderem contribuir com o projeto mandando um pix. :)\r\n\r\n* A todos que doaram um pix para incentivar na continuidade deste projeto.\r\n* Ao Banco Santander por ter a melhor implementação do pix na minha opinião.\r\n* Agradecimento ao [Rodrigo Fleury](https://github.com/rfbastos) por identificar a questão do identificador de transação com o Banco Itaú.\r\n* A Micro Reis Informática pelos testes do GerenciaNet.\r\n* Ao Banco itaú por ser a implementação mais implicante do pix.\r\n* A todos que de alguma forma colaboraram para esse projeto.\r\n\r\n## Disclaimer\r\n\r\nEste é um projeto hobby, feito em caráter voluntário, a fim de oferecer um norte inicial a quem quiser implementar recebimentos por pix. Não tenho vínculo com o BACEN nem com nenhuma instituição financeira.\r\n\r\nProcurei explicar todo meu entendimento, até o momento, na forma de comentários no código mas sem a pretensão de esgotar o assunto. Caso você identifique que algo mudou o que eu apresentei algum conceito de forma erronea me coloco a disposição para fazer os ajustes necessários, basta me contactar via [telegram](http://t.me/r3n4t0).\r\n\r\n## Documentação oficial\r\n\r\nEm virtude do fato do BACEN ter optado por retirar do ar / mudar a url das documentações que eu havia referenciado anteriormente. Estou optando por anexar tais arquivos a esse projeto na pastas `doc` a documentação oficial sobre o pix que tive acesso. Caso vocë tenha acesso a alguma outra documentação relevante que possa ser anexada a este projeto favor fazer um pull request.\r\n\r\nRecomendo a todos a leitura de toda a documentação anexada a fim de esclarecer algumas dúvidas iniciais. Esse projeto se propõe a oferecer uma camada entre os dados do recebedor criando o código bruto de um Pix-Copia-e-Cola (BRCode) e a geração da imagem do QR Code, mas se determinados requisitos mínimos não forem seguidos é possível que o código gerado não seja aceito nos aplicativos das instituições financeiras.\r\n\r\n* [manual de implementação do BR Code ver 1.0.0](doc/ManualDoBRCode.pdf)\r\n* [Manual de Padrões para Iniciação do Pix ver 2.2](doc/ManualDePadroesParaIniciacaoDoPix.pdf)\r\n* [Especificações técnicas e de negócio do ecossistema de pagamentos instantâneos brasileiro, Anexo I – Padrões para Iniciação do PIX ver 1.2.006](doc/PadroesParaIniciacaoDoPIX.pdf)\r\n\r\n## Onde obter ajuda\r\n\r\nPara ajuda sobre alguma implementação específica, recomendo iniciar o contato inicialmente com a sua instituição financeira pois a maioria delas já possuem soluções prontas para a maioria das implementações.\r\n\r\nDúvidas sobre a api do pix consulte os [Repositórios do BACEN no github](https://github.com/bacen) e verifique os canais oficiais de ajuda.\r\n\r\nOutros questinamentos a cerca do meu código ou sugestões de melhoria pode entrar em contato diretamente comigo através de uma [issue](https://github.com/renatomb/php_qrcode_pix/issues) ou do [telegram](http://t.me/r3n4t0).","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frenatomb%2Fphp_qrcode_pix","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frenatomb%2Fphp_qrcode_pix","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frenatomb%2Fphp_qrcode_pix/lists"}