Sistema de pagamentos PIX desenvolvido em Flask com suporte a WebSockets para notificações em tempo real. O projeto permite criar pagamentos, gerar QR codes e receber confirmações instantâneas quando um pagamento é realizado.
- ✅ Criação de pagamentos PIX
- ✅ Geração automática de QR codes
- ✅ Notificações em tempo real via WebSockets
- ✅ Interface web responsiva para visualização de pagamentos
- ✅ Sistema de expiração de pagamentos (30 minutos)
- ✅ Confirmação de pagamentos via API
- ✅ Banco de dados SQLite para persistência
- Python 3.7 ou superior
- pip (gerenciador de pacotes Python)
- Clone o repositório:
git clone <url-do-repositorio>
cd WebSockets- Crie um ambiente virtual (recomendado):
python -m venv venv
source venv/bin/activate # No Windows: venv\Scripts\activate- Instale as dependências:
pip install -r requirements.txt- Execute o servidor Flask:
python app.py- O servidor estará disponível em
http://127.0.0.1:5000
WebSockets/
├── app.py # Aplicação principal Flask
├── requirements.txt # Dependências do projeto
├── db_models/
│ └── payment.py # Modelo de dados para pagamentos
├── payments/
│ └── pix.py # Lógica de geração de QR codes PIX
├── repository/
│ └── database.py # Configuração do banco de dados
├── templates/
│ ├── payment.html # Página de pagamento pendente
│ ├── confirmed_payment.html # Página de pagamento confirmado
│ └── 404.html # Página de erro
├── static/
│ ├── css/
│ │ └── styles.css # Estilos CSS
│ ├── image/ # QR codes gerados
│ └── template_img/ # Imagens estáticas
└── test/
└── test_pix.py # Testes unitários
POST /payments/pix
Content-Type: application/json
{
"value": 100.50
}Resposta:
{
"message": "The payment has been created",
"payments": {
"id": 1,
"value": 100.5,
"paid": false,
"bank_payment_id": "uuid-gerado",
"qr_code": "qr_code_hash_payment_uuid",
"expire_in": "2024-01-01T12:30:00"
}
}GET /payments/pix/<id>Retorna a página HTML com o QR code e informações do pagamento.
GET /payments/qr_code/pix/<qr_code>Retorna a imagem PNG do QR code.
POST /payments/pix/confirmation
Content-Type: application/json
{
"bank_payment_id": "uuid-do-pagamento",
"value": 100.50
}Resposta:
{
"message": "Payments Confimation"
}Quando um pagamento é confirmado, um evento WebSocket é emitido para notificar o cliente em tempo real.
O projeto utiliza Flask-SocketIO para comunicação em tempo real. Quando um pagamento é confirmado, um evento é emitido com o formato:
payment-confirmed-{payment_id}
O cliente JavaScript na página de pagamento escuta este evento e recarrega a página automaticamente quando o pagamento é confirmado.
O projeto utiliza SQLite como banco de dados. O arquivo database.db é criado automaticamente na primeira execução.
Payments:
id(Integer, Primary Key)value(Float) - Valor do pagamentopaid(Boolean) - Status do pagamentobank_payment_id(String) - ID único do pagamento no bancoqr_code(String) - Nome do arquivo do QR codeexpire_in(DateTime) - Data de expiração do pagamento
Execute os testes unitários:
pytest test/test_pix.py- Flask - Framework web Python
- Flask-SocketIO - WebSockets para Flask
- Flask-SQLAlchemy - ORM para banco de dados
- qrcode - Geração de QR codes
- Pillow - Processamento de imagens
- Os pagamentos expiram automaticamente após 30 minutos
- Os QR codes são salvos na pasta
static/image/ - O banco de dados SQLite é criado automaticamente na primeira execução
- O servidor roda em modo debug por padrão