Retour aux SDKsGitHub
Py
Python SDK
v1.0.0SDK officiel pour Python 3.10+ avec support asyncio et httpx
Installation
pip install simizOu avec poetry: poetry add simiz
Configuration
import os
from simiz import Simiz
# Créer une instance du client
client = Simiz(os.environ['SIMIZ_SECRET_KEY'])
# Ou avec des options
client = Simiz(
os.environ['SIMIZ_SECRET_KEY'],
api_version='2024-01',
timeout=30,
max_retries=3,
)Utilisation
Créer une transaction
from simiz import Simiz
client = Simiz('smz_live_xxx')
transaction = client.transactions.create(
amount=5000,
currency='XAF',
payment_method='ORANGE_MONEY',
payer={
'phone': '+237690000000',
'name': 'John Doe',
'email': 'john@example.com',
},
description='Achat sur Ma Boutique',
reference='ORDER-123',
metadata={
'order_id': '123',
'customer_id': 'cust_456',
},
callback_url='https://votre-site.com/webhooks/simiz',
return_url='https://votre-site.com/payment/success',
)
print(transaction['id']) # txn_xxx
print(transaction['status']) # PENDING
print(transaction['paymentUrl']) # URL de paiementRécupérer une transaction
transaction = client.transactions.retrieve('txn_xxx')
if transaction['status'] == 'COMPLETED':
print('Paiement réussi!')Lister les transactions
# Avec pagination
transactions = client.transactions.list(
limit=20,
status='COMPLETED',
)
for tx in transactions['data']:
print(f"{tx['id']} - {tx['amount']}")
# Pagination automatique
for tx in client.transactions.auto_paging_iter():
print(tx['id'])Support Asyncio
Le SDK supporte nativement asyncio pour les applications haute performance.
import asyncio
from simiz import AsyncSimiz
async def create_payment():
client = AsyncSimiz(api_key='sk_xxx')
transaction = await client.transactions.create(
amount=5000,
currency='XAF',
payment_method='ORANGE_MONEY',
payer={'phone': '237690000000'},
)
return transaction
# Exécuter
transaction = asyncio.run(create_payment())Intégration Django
Configuration (settings.py)
# settings.py
SIMIZ_SECRET_KEY = os.environ.get('SIMIZ_SECRET_KEY')
SIMIZ_WEBHOOK_SECRET = os.environ.get('SIMIZ_WEBHOOK_SECRET')Vue de paiement
# views.py
from django.http import JsonResponse
from django.views import View
from django.conf import settings
import simiz
simiz.api_key = settings.SIMIZ_SECRET_KEY
class CheckoutView(View):
def post(self, request):
import json
data = json.loads(request.body)
transaction = simiz.Transaction.create(
amount=data['amount'],
currency='XAF',
payment_method='ORANGE_MONEY',
payer={'phone': data['phone']},
callback_url=request.build_absolute_uri('/webhooks/simiz/'),
return_url=request.build_absolute_uri('/success/'),
)
return JsonResponse({
'transaction_id': transaction.id,
'payment_url': transaction.payment_url,
})Webhooks
# views.py
from django.http import HttpResponse
from django.views.decorators.csrf import csrf_exempt
from django.conf import settings
import simiz
import json
@csrf_exempt
def webhook_handler(request):
payload = request.body
signature = request.headers.get('X-Simiz-Signature')
try:
event = simiz.Webhook.construct_event(
payload,
signature,
settings.SIMIZ_WEBHOOK_SECRET
)
except simiz.error.SignatureVerificationError:
return HttpResponse('Invalid signature', status=400)
if event.type == 'transaction.completed':
transaction = event.data
# Mettre à jour la commande
Order.objects.filter(
payment_id=transaction.id
).update(status='paid')
elif event.type == 'transaction.failed':
# Gérer l'échec
pass
return HttpResponse('OK', status=200)Gestion des erreurs
import simiz
from simiz.error import (
AuthenticationError,
InvalidRequestError,
APIError,
SimizError,
)
try:
transaction = simiz.Transaction.create(...)
except AuthenticationError:
# Clé API invalide
print('Vérifiez votre clé API')
except InvalidRequestError as e:
# Paramètres invalides
print(f'Erreur: {e.user_message}')
print(f'Paramètre: {e.param}')
except APIError as e:
# Erreur serveur
print(f'Erreur API: {e}')
except SimizError as e:
# Autre erreur
print(f'Erreur: {e}')