Biblioteca em Python para comunicação com APIs bancárias focada na integração com o PIX
Project description
pypix-api
Biblioteca em Python para comunicação com APIs bancárias, focada na integração com o PIX.
Sumário
Visão Geral
O pypix-api facilita a integração de sistemas Python com APIs bancárias brasileiras, com ênfase no ecossistema do PIX. A biblioteca abstrai autenticação, comunicação segura (MTLS/OAuth2), e operações comuns de bancos como Banco do Brasil e Sicoob.
Instalação
pip install pypix-api
Ou, para desenvolvimento:
git clone https://github.com/laddertech/pypix-api.git
cd pypix-api
pip install -e ".[dev]"
Documentação
📚 Documentação Completa: Sphinx Docs (local) | GitHub Pages
Guias Específicos
- 📋 Guia de Contribuição - Como contribuir para o projeto
- 🔒 Política de Segurança - Relatório de vulnerabilidades e boas práticas
- 📝 Histórico de Mudanças - Todas as versões e alterações
- 🔧 Guias de Desenvolvimento:
- CI/CD Pipeline - Configuração do pipeline
- Pre-commit Hooks - Hooks de qualidade
- Cobertura de Testes - Estratégia de testes
- Type Checking - Verificação de tipos
Referência da API
- 🏦 Bancos - Banco do Brasil, Sicoob
- 🔐 Autenticação - OAuth2, mTLS
- 📊 Modelos - Estruturas de dados PIX
- 🎯 Scopes - Gerenciamento de escopos OAuth2
Exemplos
Para gerar a documentação localmente:
make docs
make docs-serve # Servidor local na porta 8000
Exemplo de Uso
Banco do Brasil
from pypix_api.banks.bb import BancoDoBrasil
from pypix_api.auth.oauth2 import OAuth2Client
# Primeiro crie o cliente OAuth2
oauth = OAuth2Client(
client_id="SEU_CLIENT_ID",
cert="caminho/do/certificado.pem",
pvk="caminho/da/chave.key"
)
# Depois instancie o banco passando o OAuth2Client
bb = BancoDoBrasil(oauth=oauth)
# Exemplo: Cobrança com Vencimento
payload = {
"calendario": {
"dataDeVencimento": "2025-12-31",
"validadeAposVencimento": 30
},
"loc": {
"id": 789
},
"devedor": {
"logradouro": "Alameda Souza, Numero 80, Bairro Braz",
"cidade": "Recife",
"uf": "PE",
"cep": "70011750",
"cpf": "12345678909",
"nome": "Francisco da Silva"
},
"valor": {
"original": "123.45",
"multa": {
"modalidade": "2",
"valorPerc": "15.00"
},
"juros": {
"modalidade": "2",
"valorPerc": "2.00"
},
"desconto": {
"modalidade": "1",
"descontoDataFixa": [
{
"data": "2025-11-30",
"valorPerc": "30.00"
}
]
}
},
"chave": "5f84a4c5-c5cb-4599-9f13-7eb4d419dacc",
"solicitacaoPagador": "Cobrança dos serviços prestados."
}
# Criar cobrança com vencimento
cobv = bb.criar_cobv(txid="uuid-unico", body=payload)
print(cobv)
Sicoob
from pypix_api.banks.sicoob import Sicoob
# Instanciação do Sicoob
sicoob = Sicoob(oauth=oauth) # Reutilizando o mesmo OAuth2Client
# Exemplo: Cobrança imediata
payload_cob = {
"calendario": {
"expiracao": 3600
},
"devedor": {
"cpf": "12345678909",
"nome": "Francisco da Silva"
},
"valor": {
"original": "37.00"
},
"chave": "5f84a4c5-c5cb-4599-9f13-7eb4d419dacc",
"solicitacaoPagador": "Pagamento de serviços."
}
cob = sicoob.criar_cob(txid="uuid-unico-2", body=payload_cob)
print(cob)
Estrutura do Projeto
pypix_api/
├── auth/ # Autenticação (MTLS, OAuth2)
├── banks/ # Integrações com bancos (BB, Sicoob, métodos PIX)
├── models/ # Modelos de dados do PIX
├── utils/ # Utilitários (HTTP client, helpers)
tests/ # Testes automatizados
openapi.yaml # Especificação OpenAPI (se aplicável)
pyproject.toml # Configuração do projeto Python
Makefile # Comandos úteis para desenvolvimento
.env.exemplo # Exemplo de variáveis de ambiente
Configuração
Parâmetros de Inicialização
- Primeiro crie uma instância de OAuth2Client:
from pypix_api.auth.oauth2 import OAuth2Client
oauth = OAuth2Client(
client_id="SEU_CLIENT_ID", # ID do cliente fornecido pelo banco
cert="caminho/do/certificado.pem", # Certificado digital (.pem)
pvk="caminho/da/chave.key" # Chave privada (.key)
)
- Depois instancie o banco passando o OAuth2Client:
banco = BancoDoBrasil(oauth=oauth) # Ou Sicoob(oauth=oauth)
URLs das APIs
As URLs base são configuradas automaticamente por cada banco:
- Banco do Brasil: Definido internamente pela classe
BBPixAPI - Sicoob: Definido internamente pela classe
SicoobPixAPI
Crie um arquivo .env baseado em .env.exemplo com as credenciais e configurações necessárias para autenticação e acesso às APIs bancárias.
Testes
Para rodar os testes automatizados:
make test
ou diretamente com pytest:
pytest
Contribuição
Contribuições são bem-vindas! Por favor, consulte nosso Guia de Contribuição para informações detalhadas sobre:
- Como configurar o ambiente de desenvolvimento
- Padrões de código e commits
- Processo de Pull Request
- Executar testes e verificações de qualidade
Para entender nossos templates e automações GitHub, veja .github/GITHUB_TEMPLATES.md.
Passos rápidos:
- Fork este repositório
- Crie uma branch (
git checkout -b feature/nova-funcionalidade) - Commit suas alterações (
git commit -am 'feat: adiciona nova funcionalidade') - Execute os testes (
make quality-full) - Push para a branch (
git push origin feature/nova-funcionalidade) - Abra um Pull Request
Segurança
Para reportar vulnerabilidades de segurança, consulte nossa Política de Segurança.
NÃO reporte vulnerabilidades através de issues públicos.
Licença
Este projeto está licenciado sob os termos da licença MIT.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file pypix_api-0.7.0.tar.gz.
File metadata
- Download URL: pypix_api-0.7.0.tar.gz
- Upload date:
- Size: 40.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.12.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ffbd0ba7f372eea12aeee787f86ac248e38008681e96029634ec60082a7100a2
|
|
| MD5 |
d5cb1a857668ae5c5b3b43e133f395fb
|
|
| BLAKE2b-256 |
d4c895fee7043d9430abf2d3935c19e7bb935377c05a3b7833578932345dea09
|
Provenance
The following attestation bundles were made for pypix_api-0.7.0.tar.gz:
Publisher:
release.yml on laddertech/pypix-api
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
pypix_api-0.7.0.tar.gz -
Subject digest:
ffbd0ba7f372eea12aeee787f86ac248e38008681e96029634ec60082a7100a2 - Sigstore transparency entry: 461145058
- Sigstore integration time:
-
Permalink:
laddertech/pypix-api@58ea8ceb51b13aaa7f2a5848fc4479628b69575c -
Branch / Tag:
refs/tags/v0.7.0 - Owner: https://github.com/laddertech
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@58ea8ceb51b13aaa7f2a5848fc4479628b69575c -
Trigger Event:
push
-
Statement type:
File details
Details for the file pypix_api-0.7.0-py3-none-any.whl.
File metadata
- Download URL: pypix_api-0.7.0-py3-none-any.whl
- Upload date:
- Size: 52.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.12.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
efce5f68354092a1c7e4cba58e076877ee5c3f651dd9978ae91755a8cc5b81a0
|
|
| MD5 |
4fc6b90f960658a3d9f3a24bd1c4aaf6
|
|
| BLAKE2b-256 |
262a9d965fbf547f66bf799e78620055875a466d4e3e263d568988fb003dba45
|
Provenance
The following attestation bundles were made for pypix_api-0.7.0-py3-none-any.whl:
Publisher:
release.yml on laddertech/pypix-api
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
pypix_api-0.7.0-py3-none-any.whl -
Subject digest:
efce5f68354092a1c7e4cba58e076877ee5c3f651dd9978ae91755a8cc5b81a0 - Sigstore transparency entry: 461145084
- Sigstore integration time:
-
Permalink:
laddertech/pypix-api@58ea8ceb51b13aaa7f2a5848fc4479628b69575c -
Branch / Tag:
refs/tags/v0.7.0 - Owner: https://github.com/laddertech
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@58ea8ceb51b13aaa7f2a5848fc4479628b69575c -
Trigger Event:
push
-
Statement type: