Configuração de Webhooks
Os webhooks permitem receber notificações em tempo real sobre eventos PIX.
Configuração Básica
from pypix_api.auth.oauth2 import OAuth2Client
from pypix_api.banks.bb import BBPixAPI
oauth = OAuth2Client(
token_url=BBPixAPI.TOKEN_URL,
client_id='seu_client_id',
cert_pfx='certificado.pfx',
pwd_pfx='senha_cert',
)
api = BBPixAPI(oauth=oauth)
def configurar_webhook():
resultado = api.configurar_webhook(
chave='sua-chave-pix@email.com',
webhook_url='https://seu-sistema.com/webhook/pix',
)
print(f"✅ Webhook configurado: {resultado['webhookUrl']}")
Servidor Flask para Webhooks
from flask import Flask, request, jsonify
app = Flask(__name__)
@app.route('/webhook/pix', methods=['POST'])
def webhook_pix():
try:
data = request.get_json()
if data.get('tipo') == 'cobranca':
processar_cobranca(data.get('cobranca', {}))
elif data.get('tipo') == 'pix':
processar_pix_recebido(data.get('pix', {}))
return jsonify({'status': 'ok'}), 200
except Exception as e:
return jsonify({'erro': str(e)}), 500
def processar_cobranca(cobranca):
txid = cobranca.get('txid')
status = cobranca.get('status')
if status == 'CONCLUIDA':
print(f"✅ Pagamento recebido: {txid}")
def processar_pix_recebido(pix):
e2e_id = pix.get('endToEndId')
valor = pix.get('valor')
print(f"💰 PIX recebido: R$ {valor} ({e2e_id})")
if __name__ == '__main__':
app.run(host='0.0.0.0', port=5000)
Gerenciamento de Webhooks
def gerenciar_webhooks():
# Listar webhooks existentes (por período)
webhooks = api.listar_webhooks(
inicio='2025-01-01T00:00:00-03:00',
fim='2025-12-31T23:59:59-03:00',
)
print(f"📋 Webhooks: {len(webhooks.get('webhooks', []))}")
# Configurar/atualizar webhook (PUT idempotente pela chave)
resultado = api.configurar_webhook(
chave='chave@email.com',
webhook_url='https://novo-sistema.com/webhook',
)
# Consultar um webhook específico
api.consultar_webhook(chave='chave@email.com')
# Excluir o webhook
api.excluir_webhook(chave='chave@email.com')
Testando Webhooks Localmente
Use ngrok para expor seu servidor local:
# Instalar ngrok
npm install -g ngrok
# Expor servidor local
ngrok http 5000
# Use a URL gerada no webhook