SDK Oficial Produção v1.3.0
EDPay Python SDK
Biblioteca oficial para Python 3.9+ com suporte a frameworks como Django, FastAPI e Flask, tipagem estrita com Pydantic e clientes assíncronos/síncronos.
edutecka/edpay-python-sdk
Produção v1.3.0
Repositório oficial no GitHub com código aberto sob licença MIT.
Instalação via Pip
Instale o pacote no seu ambiente virtual Python via PyPI:
Terminal
pip install edpayInicialização do Cliente
Carregue as credenciais seguras da sua conta (X-EDPay-Public-Key e X-EDPay-Private-Key):
main.py
from edpay import EDPayClient
import os
# Inicializar cliente com credenciais do ambiente
client = EDPayClient(
public_key=os.environ["EDPAY_PUBLIC_KEY"],
private_key=os.environ["EDPAY_PRIVATE_KEY"],
base_url="https://api-pay.edutecka.com" # Padrão
)Criar Pagamento Multicanal
Exemplo de envio de intenção de pagamento com idempotência automática:
create_payment.py
# Criar pagamento multicanal agnóstico
payment = client.payments.create(
amount=1500, # 1.500,00 MZN
currency="MZN",
reference="FAT-2026-002",
description="Assinatura de Plano Empresarial",
customer={
"name": "Mariamo Cassamo",
"email": "[email protected]",
"phone": "+25884xxxxxxx",
},
metadata={"account_id": "acc_7891"},
idempotency_key="req_order_python_98413",
)
print(f"Pagamento ID: {payment['data']['id']}")
print(f"Estado: {payment['data']['status']}")Recepção de Webhooks com FastAPI
Exemplo de endpoint para receber e autenticar notificações assíncronas:
webhook_handler.py
from fastapi import FastAPI, Request, HTTPException
import hmac
import hashlib
import os
app = FastAPI()
@app.post("/webhooks/edpay")
async def handle_edpay_webhook(request: Request):
payload = await request.body()
signature = request.headers.get("X-EDPay-Signature", "")
secret = os.environ["EDPAY_WEBHOOK_SECRET"]
# Validação da assinatura criptográfica
is_valid = client.webhooks.verify_signature(payload, signature, secret)
if not is_valid:
raise HTTPException(status_code=401, detail="Invalid signature")
event = await request.json()
if event["event"] == "payment.succeeded":
payment_id = event["data"]["id"]
# Processar confirmação de pagamento
return {"received": True}