Cobranças com Vencimento

Este guia mostra como criar e gerenciar cobranças PIX com data de vencimento.

Cobrança com Vencimento Simples

import uuid
from datetime import datetime, timedelta
from pypix_api.auth.oauth2 import OAuth2Client
from pypix_api.banks.bb import BBPixAPI

oauth = OAuth2Client(
    client_id='seu_client_id',
    client_secret='seu_client_secret',
    cert_path='certificado.p12',
    cert_password='senha_cert',
    scope='cobv.write cobv.read'
)

api = BBPixAPI(oauth=oauth)

def criar_cobranca_com_vencimento():
    """Cria cobrança PIX com data de vencimento."""

    txid = str(uuid.uuid4())
    vencimento = datetime.now() + timedelta(days=7)

    cobranca = {
        'calendario': {
            'dataDeVencimento': vencimento.strftime('%Y-%m-%d'),
            'validadeAposVencimento': 30
        },
        'devedor': {
            'cpf': '12345678901',
            'nome': 'Cliente Mensal'
        },
        'valor': {
            'original': '299.90'
        },
        'chave': 'empresa@email.com',
        'solicitacaoPagador': 'Mensalidade - Janeiro 2025'
    }

    resultado = api.criar_cobv(txid, cobranca)
    print(f"✅ Cobrança criada: {resultado['txid']}")
    return resultado

Cobrança Recorrente Mensal

class CobrancaRecorrente:
    """Gerenciador de cobranças recorrentes."""

    def __init__(self, api):
        self.api = api

    def criar_cobranca_mensal(self, cliente_dados, valor, referencia):
        """Cria cobrança mensal para um cliente."""

        hoje = datetime.now()
        vencimento = hoje + timedelta(days=30)  # Vence em 30 dias

        txid = f"MENSAL-{cliente_dados['cpf']}-{vencimento.strftime('%Y%m')}"

        cobranca = {
            'calendario': {
                'dataDeVencimento': vencimento.strftime('%Y-%m-%d'),
                'validadeAposVencimento': 30
            },
            'devedor': cliente_dados,
            'valor': {
                'original': str(valor)
            },
            'chave': 'cobranca@empresa.com',
            'solicitacaoPagador': f'Mensalidade - {referencia}'
        }

        try:
            resultado = self.api.criar_cobv(txid, cobranca)
            print(f"✅ Mensalidade criada: {cliente_dados['nome']}")
            return resultado
        except Exception as e:
            print(f"❌ Erro: {e}")
            return None

Exemplo de Uso

def exemplo_cobrancas_mensais():
    """Exemplo completo de cobranças mensais."""

    clientes = [
        {
            'cpf': '12345678901',
            'nome': 'João Silva'
        },
        {
            'cpf': '98765432100',
            'nome': 'Maria Santos'
        }
    ]

    gerenciador = CobrancaRecorrente(api)

    for cliente in clientes:
        gerenciador.criar_cobranca_mensal(
            cliente,
            150.00,
            'Janeiro/2025'
        )

Monitoramento de Cobranças

def monitorar_cobrancas():
    """Monitora status das cobranças."""

    inicio = datetime.now() - timedelta(days=30)
    fim = datetime.now()

    cobrancas = api.consultar_cobvs(
        data_inicio=inicio.strftime('%Y-%m-%dT%H:%M:%S-03:00'),
        data_fim=fim.strftime('%Y-%m-%dT%H:%M:%S-03:00')
    )

    for cob in cobrancas.get('cobs', []):
        status = cob['status']
        valor = cob['valor']['original']

        if status == 'ATIVA':
            print(f"⏳ Pendente: R$ {valor}")
        elif status == 'CONCLUIDA':
            print(f"✅ Paga: R$ {valor}")

Script Completo

#!/usr/bin/env python3
"""Sistema de cobranças recorrentes."""

import os
from datetime import datetime
from pypix_api.auth.oauth2 import OAuth2Client
from pypix_api.banks.bb import BBPixAPI

def main():
    oauth = OAuth2Client(
        client_id=os.getenv('BB_CLIENT_ID'),
        client_secret=os.getenv('BB_CLIENT_SECRET'),
        cert_path=os.getenv('BB_CERT_PATH'),
        cert_password=os.getenv('BB_CERT_PASSWORD'),
        scope='cobv.write cobv.read'
    )

    api = BBPixAPI(oauth=oauth)
    gerenciador = CobrancaRecorrente(api)

    # Processar cobranças
    clientes = [{'cpf': '12345678901', 'nome': 'Cliente Teste'}]

    for cliente in clientes:
        gerenciador.criar_cobranca_mensal(
            cliente,
            99.90,
            datetime.now().strftime('%B/%Y')
        )

if __name__ == '__main__':
    main()