Ir al contenido

SDK de Python

El SDK sangho es compatible con Python 3.8+ y ofrece una interfaz síncrona y asíncrona (asyncio). Compatible con Django, FastAPI, Flask y cualquier proyecto Python estándar.

Instalación

bash
# Avec PIP
pip install sangho
# Avec POETRY
poetry add sangho

Uso síncrono

En modo síncrono, cada llamada se bloquea hasta recibir la respuesta. Adecuado para scripts, tareas de Celery y la mayoría de las aplicaciones Django.

Variables de entorno

No escriba nunca su clave API directamente en el código fuente. Utilice os.environ[“SANGHO_SECRET_KEY”] o una biblioteca como python-dotenv en el desarrollo local.

Uso síncrono

python
import os
import sangho


sangho.api_key = os.environ["SANGHO_SECRET_KEY"]
# Créer un PaymentIntent
intent = sangho.payment_intents.create(
    amount=5000,
    currency="XAF",
    payment_method_types=["mobile_money", "card"],
    metadata={"order_id": "CMD-001"},
)
print(intent.id)             # pi_xxxxxxxxxxxx
print(intent.client_secret)  # pi_xxx_secret_xxx

Uso asíncrono (asyncio)

Para FastAPI y cualquier framework asíncrono de Python, utilice AsyncSangho en lugar de Sangho. La interfaz es idéntica: todos los métodos son corrutinas que admiten await.

Gestión de errores

Todos los errores heredan de sangho.error.SanghoError. Las subclases permiten tratar cada caso de negocio por separado.

Reintento automático

El SDK reintenta automáticamente los errores 429 y 5xx con un backoff exponencial. Pase max_retries=0 al constructor para desactivar este comportamiento.

Uso asíncrono (FastAPI)

python
import os
from sangho import AsyncSangho
from fastapi import FastAPI


app = FastAPI()
sangho = AsyncSangho(api_key=os.environ["SANGHO_SECRET_KEY"])


@app.post("/create-payment")
async def create_payment(amount: int):
    intent = await sangho.payment_intents.create(
        amount=amount,
        currency="XAF",
        payment_method_types=["mobile_money"],
    )
    return {"client_secret": intent.client_secret}

Gestión de errores

python
import time
import sangho


try:
    intent = sangho.payment_intents.create(
        amount=5000,
        currency="XAF",
    )
except sangho.error.AuthenticationError:
    # Clé API invalide ou expirée
    print("Clé API invalide")
except sangho.error.RateLimitError:
    # Trop de requêtes — retenter avec backoff
    time.sleep(2 ** attempt)
    retry()
except sangho.error.InvalidRequestError as e:
    # Paramètres invalides
    print(e.param, e.message)
except sangho.error.SanghoError as e:
    # Erreur générique
    print(e.code, e.message, e.status_code)