{"id":15647631,"url":"https://github.com/pedrofurtado/qrcode_pix_ruby","last_synced_at":"2026-03-11T20:02:55.442Z","repository":{"id":41221815,"uuid":"379680382","full_name":"pedrofurtado/qrcode_pix_ruby","owner":"pedrofurtado","description":"Ruby gem for QRCode generation of Pix (Pagamento Instantâneo Brasileiro - Banco Central do Brasil)","archived":false,"fork":false,"pushed_at":"2024-04-16T17:33:40.000Z","size":251,"stargazers_count":48,"open_issues_count":1,"forks_count":9,"subscribers_count":6,"default_branch":"master","last_synced_at":"2026-02-19T07:38:08.164Z","etag":null,"topics":["bacen","pix","pix-api","pix-copia-e-cola","pix-dinamico","pix-estatico","pix-qr","pix-qrcode","pix-ruby","qrcode","ruby-gem"],"latest_commit_sha":null,"homepage":"https://rubygems.org/gems/qrcode_pix_ruby","language":"Ruby","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/pedrofurtado.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE.txt","code_of_conduct":"CODE_OF_CONDUCT.md","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}},"created_at":"2021-06-23T17:25:43.000Z","updated_at":"2026-01-12T14:09:52.000Z","dependencies_parsed_at":"2024-04-16T18:44:15.619Z","dependency_job_id":"ed7eaab4-c311-4b88-993a-694c71342249","html_url":"https://github.com/pedrofurtado/qrcode_pix_ruby","commit_stats":{"total_commits":132,"total_committers":3,"mean_commits":44.0,"dds":"0.045454545454545414","last_synced_commit":"143c21c43e420b4100a9dc10d6cad358cc1b930c"},"previous_names":[],"tags_count":10,"template":false,"template_full_name":null,"purl":"pkg:github/pedrofurtado/qrcode_pix_ruby","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pedrofurtado%2Fqrcode_pix_ruby","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pedrofurtado%2Fqrcode_pix_ruby/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pedrofurtado%2Fqrcode_pix_ruby/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pedrofurtado%2Fqrcode_pix_ruby/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/pedrofurtado","download_url":"https://codeload.github.com/pedrofurtado/qrcode_pix_ruby/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pedrofurtado%2Fqrcode_pix_ruby/sbom","scorecard":{"id":726148,"data":{"date":"2025-08-11","repo":{"name":"github.com/pedrofurtado/qrcode_pix_ruby","commit":"8789fd7939a56c3b27c1883a2afbb42aaa9c2722"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":4.1,"checks":[{"name":"Code-Review","score":3,"reason":"Found 10/30 approved changesets -- score normalized to 3","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Maintained","score":0,"reason":"0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: no topLevel permission defined: .github/workflows/ci.yml:1","Warn: no topLevel permission defined: .github/workflows/rubygems.yml:1","Info: no jobLevel write permissions found"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE.txt:0","Info: FSF or OSI recognized license: MIT License: LICENSE.txt:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Pinned-Dependencies","score":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:9: update your workflow using https://app.stepsecurity.io/secureworkflow/pedrofurtado/qrcode_pix_ruby/ci.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:25: update your workflow using https://app.stepsecurity.io/secureworkflow/pedrofurtado/qrcode_pix_ruby/ci.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/ci.yml:28: update your workflow using https://app.stepsecurity.io/secureworkflow/pedrofurtado/qrcode_pix_ruby/ci.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/rubygems.yml:11: update your workflow using https://app.stepsecurity.io/secureworkflow/pedrofurtado/qrcode_pix_ruby/rubygems.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/rubygems.yml:14: update your workflow using https://app.stepsecurity.io/secureworkflow/pedrofurtado/qrcode_pix_ruby/rubygems.yml/master?enable=pin","Warn: containerImage not pinned by hash: Dockerfile:1: pin your Docker image by updating ruby:3.0.0 to ruby:3.0.0@sha256:c74394d0a4a05a3068ca9d0c53c36d451e27773264b568ae16ae24be9ad5621d","Warn: containerImage not pinned by hash: demo/Dockerfile:1: pin your Docker image by updating ruby:3.0.0-alpine to ruby:3.0.0-alpine@sha256:17fcf2715439387dc050fcd6801a98c6b61c196739e56d4c8a12d93bb0dcecac","Info:   0 out of   3 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of   2 third-party GitHubAction dependencies pinned","Info:   0 out of   2 containerImage dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"Branch-Protection","score":-1,"reason":"internal error: error during branchesHandler.setup: internal error: githubv4.Query: Resource not accessible by integration","details":null,"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 13 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}}]},"last_synced_at":"2025-08-22T12:52:40.514Z","repository_id":41221815,"created_at":"2025-08-22T12:52:40.514Z","updated_at":"2025-08-22T12:52:40.514Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29938976,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-28T13:49:17.081Z","status":"ssl_error","status_checked_at":"2026-02-28T13:48:50.396Z","response_time":90,"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":["bacen","pix","pix-api","pix-copia-e-cola","pix-dinamico","pix-estatico","pix-qr","pix-qrcode","pix-ruby","qrcode","ruby-gem"],"created_at":"2024-10-03T12:20:22.899Z","updated_at":"2026-03-11T20:02:55.426Z","avatar_url":"https://github.com/pedrofurtado.png","language":"Ruby","funding_links":[],"categories":[],"sub_categories":[],"readme":"# QRCode Pix Ruby\n\n[![Maintainability](https://api.codeclimate.com/v1/badges/ff1952ca066c27953773/maintainability)](https://codeclimate.com/github/pedrofurtado/qrcode_pix_ruby/maintainability)\n[![codecov](https://codecov.io/gh/pedrofurtado/qrcode_pix_ruby/branch/master/graph/badge.svg?token=OK3S19R5CG)](https://codecov.io/gh/pedrofurtado/qrcode_pix_ruby)\n[![CI](https://github.com/pedrofurtado/qrcode_pix_ruby/actions/workflows/ci.yml/badge.svg)](https://github.com/pedrofurtado/qrcode_pix_ruby/actions/workflows/ci.yml)\n[![Gem Version](https://badge.fury.io/rb/qrcode_pix_ruby.svg)](https://badge.fury.io/rb/qrcode_pix_ruby)\n[![Gem](https://img.shields.io/gem/dt/qrcode_pix_ruby.svg)]()\n[![license](https://img.shields.io/github/license/pedrofurtado/qrcode_pix_ruby.svg)]()\n[![contributions welcome](https://img.shields.io/badge/contributions-welcome-brightgreen.svg?style=flat)](https://github.com/pedrofurtado/qrcode_pix_ruby)\n[![Ruby Style Guide](https://img.shields.io/badge/code_style-rubocop-brightgreen.svg)](https://github.com/rubocop/rubocop)\n\nRuby gem for Qrcode generation of Pix (Pagamento Instantâneo Brasileiro - Banco Central do Brasil).\n\n\u003cimg style=\"max-width: 100%;\" src=\"https://github.com/pedrofurtado/qrcode_pix_ruby/blob/master/pix_logo.png?raw=true\" height=\"100px\" /\u003e\n\n## Installation\n\nAdd this line to your application's Gemfile:\n\n```ruby\ngem 'qrcode_pix_ruby'\n```\n\nAnd then execute:\n\n    bundle install\n\nOr install it yourself as:\n\n    gem install qrcode_pix_ruby\n\n## Usage (examples)\n\n### Available parameters\n\n- pix_key/url\n- repeatable\n- currency\n- country_code\n- description\n- postal_code\n- merchant_name\n- merchant_city\n- transaction_id\n- amount\n\n### Static QR Code\n\n```ruby\nrequire 'qrcode_pix_ruby'\n\npix = QrcodePixRuby::Payload.new(\n  pix_key:        'minhachavedopix',\n  description:    'Pagamento do pedido 123456',\n  merchant_name:  'Fulano de Tal',\n  merchant_city:  'SAO PAULO',\n  transaction_id: 'TID12345',\n  amount:         '100.00',\n  currency:       '986',\n  country_code:   'BR',\n  postal_code:    '01131010',\n  repeatable:     false\n)\n\n# If needed, change the attributes value later\npix.pix_key = 'minhaoutrachavepix'\npix.merchant_city = 'BRASILIA'\n\n# QRCode copia-e-cola\nputs pix.payload\n\n# QRCode for images\nputs pix.base64\n```\n\n### Dynamic QR Code\n\n```ruby\nrequire 'qrcode_pix_ruby'\n\npix = QrcodePixRuby::Payload.new(\n  url:            'https://example.com',\n  merchant_name:  'Fulano de Tal',\n  merchant_city:  'SAO PAULO',\n  amount:         '100.00',\n  transaction_id: 'TID12345',\n  repeatable:     false\n)\n\n# If needed, change the attributes value later\npix.url = 'https://another-example.com'\npix.amount = 1.50\n\n# QRCode copia-e-cola\nputs pix.payload\n\n# QRCode para uso em imagens\nputs pix.base64\n```\n\n🚨 Important note: BACEN (Banco Central do Brasil) sets a variety of rules for each field in QRCode Payload (maximum number of characters, invalid values, mandatory and optional fields, and so on). So, pay attention that a QRCode payload+base64 generated by the gem can be valid, theorically, but may not be accepted in banking apps because of these restrictions (that are out of scope of gem).\n\n## Execute tests/specs locally\n\nTo execute gem tests locally, use Docker with the commands below:\n\n```bash\ngit clone https://github.com/pedrofurtado/qrcode_pix_ruby\ncd qrcode_pix_ruby/\ndocker build -t qrcode_pix_ruby_specs .\n\n# Then, run this command how many times you want,\n# after editing local files, and so on, to get\n# feedback from test suite of gem.\ndocker run -v $(pwd):/app/ -it qrcode_pix_ruby_specs\n```\n\n## Execute demo locally\n\nTo execute demo locally, use Docker with the commands below:\n\n```bash\ngit clone https://github.com/pedrofurtado/qrcode_pix_ruby\ncd qrcode_pix_ruby/demo/\ndocker build -t qrcode_pix_ruby_demo .\n\n# Then, access http://localhost:3000 the see demo in action.\ndocker run -p 3000:3000 -it qrcode_pix_ruby_demo\n```\n\n## Useful links\n\n* https://github.com/joseviniciusnunes/qrcode-pix\n* https://www.bcb.gov.br/content/estabilidadefinanceira/forumpireunioes/AnexoI-PadroesParaIniciacaodoPix.pdf\n* https://github.com/renatomb/php_qrcode_pix\n* https://www.gerarpix.com.br\n* https://github.com/fbbergamo/gerador-pix\n* https://pix.ae\n* https://pix.nascent.com.br/tools/pix-qr-decoder\n* https://openpix.com.br/qrcode/scanner\n* https://openpix.com.br/qrcode/debug\n* https://github.com/william-costa/wdev-qrcode-pix-estatico-php\n* https://github.com/william-costa/wdev-qrcode-pix-php\n* https://www.youtube.com/watch?v=eO11iFgrdCA\n* https://qrcodepix.dinheiro.tech\n* http://decoder.qrcodepix.dinheiro.tech\n* https://www.bcb.gov.br/estabilidadefinanceira/pix\n* https://gerencianet.com.br/blog/qr-code-estatico-qr-code-dinamico-no-pix\n* https://blog.juno.com.br/pix-qr-code-estatico-x-qr-code-dinamico\n* https://github.com/entria/awesome-pix\n* https://zxing.org/w/decode.jspx\n* https://github.com/hiagodotme/gpix\n* https://github.com/EnssureIT/faz-um-pix\n* https://github.com/jesobreira/pixkey\n* https://github.com/pedrinholemes/pix-br\n* https://github.com/ceciliadeveza/gerarqrcodepix\n* https://www.bcb.gov.br/content/estabilidadefinanceira/SiteAssets/Manual%20do%20BR%20Code.pdf\n* https://www.bcb.gov.br/content/estabilidadefinanceira/spb_docs/ManualBRCode.pdf\n\n## Contributing\n\nBug reports and pull requests are welcome on GitHub at https://github.com/pedrofurtado/qrcode_pix_ruby. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [code of conduct](https://github.com/pedrofurtado/qrcode_pix_ruby/blob/master/CODE_OF_CONDUCT.md).\n\n## License\n\nThe gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).\n\n## Code of Conduct\n\nEveryone interacting in the qrcode_pix_ruby project's codebases, issue trackers, chat rooms and mailing lists is expected to follow the [code of conduct](https://github.com/pedrofurtado/qrcode_pix_ruby/blob/master/CODE_OF_CONDUCT.md).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpedrofurtado%2Fqrcode_pix_ruby","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpedrofurtado%2Fqrcode_pix_ruby","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpedrofurtado%2Fqrcode_pix_ruby/lists"}