Official Python SDK for Snippe Payment API
Project description
Snippe Python SDK
Official Python SDK for Snippe Payment API - Accept payments via mobile money, card, and QR code in East Africa.
Installation
pip install snippe
Quick Start
from snippe import Snippe, Customer
client = Snippe("your_api_key")
# Create a mobile money payment
payment = client.create_mobile_payment(
amount=1000,
currency="TZS",
phone_number="0788500000",
customer=Customer(firstname="John", lastname="Doe"),
)
print(f"Payment reference: {payment.reference}")
print(f"Status: {payment.status}")
Payment Types
Mobile Money (USSD Push)
Customer receives a USSD prompt on their phone to confirm payment.
payment = client.create_mobile_payment(
amount=5000,
currency="TZS",
phone_number="0712345678",
customer=Customer(
firstname="Jane",
lastname="Doe",
email="jane@example.com" # optional
),
webhook_url="https://yourapp.com/webhooks", # optional
metadata={"order_id": "ORD-123"}, # optional
)
Card Payment
Returns a payment_url to redirect the customer to complete payment.
payment = client.create_card_payment(
amount=50000,
currency="TZS",
phone_number="0712345678",
customer=Customer(
firstname="John",
lastname="Doe",
email="john@example.com",
address="123 Main Street",
city="Dar es Salaam",
state="DSM",
postcode="14101",
country="TZ",
),
callback_url="https://yourapp.com/callback", # required for card
webhook_url="https://yourapp.com/webhooks",
)
# Redirect customer to this URL
print(payment.payment_url)
QR Code Payment
Returns a QR code for the customer to scan.
payment = client.create_qr_payment(
amount=25000,
currency="TZS",
phone_number="0712345678",
customer=Customer(firstname="John", lastname="Doe"),
)
# Display this QR code to customer
print(payment.payment_qr_code)
print(payment.payment_token)
Check Payment Status
payment = client.get_payment("payment_reference")
print(f"Status: {payment.status}") # pending, completed, failed, expired, voided
List Payments
result = client.list_payments(limit=20, offset=0)
for payment in result.payments:
print(f"{payment.reference}: {payment.status}")
Check Balance
balance = client.get_balance()
print(f"Available: {balance.available_balance} {balance.currency}")
Webhooks
Verify and parse webhook events from Snippe.
from snippe import verify_webhook, WebhookVerificationError
# In your webhook endpoint
try:
payload = verify_webhook(
body=request.body.decode(),
signature=request.headers["X-Webhook-Signature"],
timestamp=request.headers["X-Webhook-Timestamp"],
signing_key="your_webhook_signing_key",
)
if payload.event == "payment.completed":
print(f"Payment {payload.reference} completed!")
# Fulfill the order
elif payload.event == "payment.failed":
print(f"Payment {payload.reference} failed")
# Notify customer
except WebhookVerificationError as e:
print(f"Invalid webhook: {e}")
Webhook Events
| Event | Description |
|---|---|
payment.completed |
Payment successful |
payment.failed |
Payment declined or failed |
payment.expired |
Payment timed out |
payment.voided |
Payment cancelled |
Async Support
For async applications (FastAPI, aiohttp, etc.):
from snippe import AsyncSnippe, Customer
async def create_payment():
async with AsyncSnippe("your_api_key") as client:
payment = await client.create_mobile_payment(
amount=1000,
currency="TZS",
phone_number="0788500000",
customer=Customer(firstname="John", lastname="Doe"),
)
return payment
Idempotency
Prevent duplicate payments by providing an idempotency key:
payment = client.create_mobile_payment(
amount=1000,
currency="TZS",
phone_number="0788500000",
customer=Customer(firstname="John", lastname="Doe"),
idempotency_key="unique_order_id_123", # Your unique identifier
)
Error Handling
from snippe import (
Snippe,
AuthenticationError,
ValidationError,
NotFoundError,
RateLimitError,
ServerError,
)
try:
payment = client.create_mobile_payment(...)
except AuthenticationError:
print("Invalid API key")
except ValidationError as e:
print(f"Invalid request: {e.message}")
except NotFoundError:
print("Payment not found")
except RateLimitError:
print("Too many requests, slow down")
except ServerError:
print("Snippe server error, try again later")
Supported Currencies
| Currency | Country |
|---|---|
| TZS | Tanzania |
| KES | Kenya |
| UGX | Uganda |
License
MIT
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file snippe-0.1.1.tar.gz.
File metadata
- Download URL: snippe-0.1.1.tar.gz
- Upload date:
- Size: 7.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: Hatch/1.16.3 cpython/3.11.13 HTTPX/0.28.1
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
cb3c4e395e356b98fc172899dce782d53294a725b1cadb2bde1b2d98ddc22531
|
|
| MD5 |
83410da1dff7c4eb0651c920aa0b0fbe
|
|
| BLAKE2b-256 |
34264e85501826ec8d41b267a9ab46606c304fb1cbf2b498a962c30ebeb955dc
|
File details
Details for the file snippe-0.1.1-py3-none-any.whl.
File metadata
- Download URL: snippe-0.1.1-py3-none-any.whl
- Upload date:
- Size: 9.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: Hatch/1.16.3 cpython/3.11.13 HTTPX/0.28.1
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c38e5b5fc1f3bb7ada34e7ae2737106b33f854e349515bc23db9ab0e007e1aba
|
|
| MD5 |
f4874ee32c192469a837138a277cd861
|
|
| BLAKE2b-256 |
3fd6031c653c9fceccb9c326afae1f6f656e6dd0b10fbf90754de476430ce861
|