{"id":25583797,"url":"https://github.com/joschonarth/flask-payment-api","last_synced_at":"2026-02-03T04:04:25.833Z","repository":{"id":273256204,"uuid":"897581835","full_name":"joschonarth/flask-payment-api","owner":"joschonarth","description":"The application is a payment API built with Flask, simulating a PIX payment and using WebSockets for real-time payment confirmation notifications.","archived":false,"fork":false,"pushed_at":"2025-01-19T19:16:07.000Z","size":216,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-01-19T20:25:31.967Z","etag":null,"topics":["api","flask","python","qrcode-generator","socket-io","sqlalchemy","websocket"],"latest_commit_sha":null,"homepage":"","language":"HTML","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/joschonarth.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"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}},"created_at":"2024-12-02T21:57:52.000Z","updated_at":"2025-01-19T19:16:09.000Z","dependencies_parsed_at":"2025-01-19T20:25:37.164Z","dependency_job_id":"4ac9aa8e-81f8-4821-ac17-ccb7954084fc","html_url":"https://github.com/joschonarth/flask-payment-api","commit_stats":null,"previous_names":["joschonarth/flask-payment-api"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/joschonarth%2Fflask-payment-api","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/joschonarth%2Fflask-payment-api/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/joschonarth%2Fflask-payment-api/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/joschonarth%2Fflask-payment-api/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/joschonarth","download_url":"https://codeload.github.com/joschonarth/flask-payment-api/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":239964745,"owners_count":19725983,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":["api","flask","python","qrcode-generator","socket-io","sqlalchemy","websocket"],"created_at":"2025-02-21T06:18:48.960Z","updated_at":"2026-02-03T04:04:25.795Z","avatar_url":"https://github.com/joschonarth.png","language":"HTML","funding_links":[],"categories":[],"sub_categories":[],"readme":"# 💳 Pagamento em Tempo Real com Flask e WebSockets\n\nEste projeto simula um sistema de pagamento em tempo real utilizando **Flask**, **Python** e **WebSockets**. O sistema permite a criação de pagamentos via Pix, confirmação de pagamento, monitoramento de pagamentos expirados e atualização em tempo real via **WebSockets** para os clientes conectados. 💳🔄\n\n![Payment Page](assets/payment.png)\n\n\u003c!-- \u003cp align=\"center\"\u003e\n    \u003cimg src=\"assets/payment.png\" alt=\"Payment Page\" width=\"90%\"\u003e\n\u003c/p\u003e\n\u003cp align=\"center\"\u003e\n    \u003cimg src=\"assets/payment-confirmed.png\" alt=\"Payment Confirmed Page\" width=\"45%\"\u003e\n    \u003cimg src=\"assets/payment-expired.png\" alt=\"Payment Expired Page\" width=\"45%\"\u003e\n\u003c/p\u003e --\u003e\n\n## 🛠️ Tecnologias Utilizadas\n\n- 🐍 **Flask**: Framework web para Python.\n- 🌐 **WebSockets (via Flask-SocketIO)**: Comunicação em tempo real entre o servidor e o cliente.\n- 🗄️ **SQLite**: Banco de dados relacional para armazenar informações sobre os pagamentos.\n- ⏰ **Flask-APScheduler**: Agendador para verificar pagamentos expirados periodicamente.\n\n## ⚙️ Funcionalidades\n\n- 🖼️ **Criação de pagamentos Pix:** Gera um pagamento com valor especificado e cria um QR Code único.\n- ✅ **Confirmação de pagamentos:** Valida o pagamento com base no valor e no `bank_payment_id`.\n- ⏳ **Monitoramento de pagamentos expirados:** Detecta automaticamente pagamentos que ultrapassaram o tempo limite.\n- 📡 **Notificações em tempo real:** Envia atualizações de eventos como pagamentos confirmados ou expirados via WebSockets.\n- **Páginas de status do pagamento:**\n  - 📄 Página de pagamento com QR Code para transações pendentes.\n  - ⌛ Página de pagamento expirado com detalhes.\n  - 🎉 Página de pagamento confirmado com informações detalhadas.\n\n## 🔧 Instalação\n\n1. **Clone o repositório:**\n\n    ```bash\n    git clone https://github.com/joschonarth/flask-payment-api.git\n    ```\n\n2. **Crie um ambiente virtual:**\n\n    ```bash\n    python -m venv .venv\n\n    source .venv/bin/activate  # Linux/Mac\n    .venv\\Scripts\\activate     # Windows\n    ```\n\n3. **Instale as dependências:**\n\n    ```bash\n    pip install -r requirements.txt\n    ```\n\n4. **Inicie o servidor Flask:**\n\n    ```bash\n    python app.py\n    ```\n\n🌐 O servidor estará rodando em [http://127.0.0.1:5000](http://127.0.0.1:5000).\n\n## 🔗 Endpoints\n\n### 💳 Criar Pagamento Pix\n\n- **Descrição:** Cria um pagamento Pix com valor e gera um QR Code para pagamento.\n- **Método:** `POST`\n- **URL:** `/payments/pix`\n- **Body:**\n\n```json\n{\n    \"value\": 500\n}\n```\n\n- **Response:**\n\n```json\n{\n    \"message\": \"The payment has benn created\",\n    \"payment\": {\n        \"bank_payment_id\": \"7cc9275c-b511-49b2-9211-d4a6526ae619\",\n        \"expiration_date\": \"Fri, 13 Dec 2024 22:17:08 GMT\",\n        \"id\": 6,\n        \"paid\": false,\n        \"qr_code\": \"qr_code_payment_7cc9275c-b511-49b2-9211-d4a6526ae619\",\n        \"value\": 500.0\n    }\n}\n```\n\n### 🖼️ Obter QR Code do Pagamento Pix\n\n- **Descrição:** Recupera a imagem do QR Code gerado para um pagamento.\n- **Método:** `GET`\n- **URL:** `/payments/pix/qr_code/\u003cfile_name\u003e`\n\n### ✅ Confirmar Pagamento Pix\n\n- **Descrição:** Confirma o pagamento de um Pix quando o valor e o bank_payment_id forem validados.\n- **Método:** `POST`\n- **URL:** `/payments/pix/confirmation`\n- **Body:**\n\n```json\n{\n    \"bank_payment_id\": \"360286a2-6bc5-4a6e-b16b-251429b43b98\",\n    \"value\": 500\n}\n```\n\n- **Response:**\n\n```json\n{\n    \"message\": \"The payment has benn confirmed\"\n}\n```\n\n## ⚡ Funcionalidades de WebSocket\n\n- **Conectar ao servidor WebSocket:** Ao conectar-se, o cliente recebe notificações em tempo real de eventos como pagamentos confirmados e pagamentos expirados. 🔔\n\n- **Eventos emitidos:**\n    - `payment-confirmed-{payment_id}`: Quando um pagamento é confirmado. ✅\n    - `payment-expired-{payment_id}`: Quando um pagamento expira. ⏰\n\n![Payment Page](assets/payment-confirmed.png)\n\n## ⏰ Agendamento de Verificação de Pagamentos Expirados\n\nA cada 1 minuto, o sistema verifica pagamentos que não foram confirmados e estão expirados. Se algum for encontrado, um evento `payment-expired-{payment_id}` é emitido. 🔄\n\n![Payment Page](assets/payment-expired.png)\n\n## 🧪 Como Testar\n\n1. **Criação de um pagamento Pix:** Envie um `POST` para `/payments/pix` com um valor e obtenha o QR Code. 📱\n\n2. **Confirmação do pagamento:** Envie um `POST` para `/payments/pix/confirmation` com o `bank_payment_id` e o valor. 💸\n\n3. **Verificação do status de pagamento:** Acesse a URL `/payments/pix/\u003cpayment_id\u003e` para ver se o pagamento foi confirmado ou expirou. 🔍\n\n## 🤝 Contribuições\n\nSinta-se à vontade para abrir issues ou pull requests com melhorias ou correções. 🚀\n\n## 📞 Contato\n\n\u003cdiv\u003e\n    \u003ca href=\"https://www.linkedin.com/in/joschonarth/\" target=\"_blank\"\u003e\u003cimg src=\"https://img.shields.io/badge/LinkedIn-0077B5?style=for-the-badge\u0026logo=linkedin\u0026logoColor=white\" target=\"_blank\"\u003e\u003c/a\u003e\n    \u003ca href=\"mailto:joschonarth@gmail.com\" target=\"_blank\"\u003e\u003cimg src=\"https://img.shields.io/badge/Gmail-D14836?style=for-the-badge\u0026logo=gmail\u0026logoColor=white\" target=\"_blank\"\u003e\u003c/a\u003e\n\u003c/div\u003e","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjoschonarth%2Fflask-payment-api","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjoschonarth%2Fflask-payment-api","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjoschonarth%2Fflask-payment-api/lists"}