Python SDK for Zarinpal Payment Gateway with sync and async support.
Project description
Zarinpal Python SDK
A modern, type-safe Python SDK for Zarinpal Payment Gateway with both synchronous and asynchronous support.
Features
- ✅ Sync and async client support
- ✅ Type hints and full IDE autocomplete
- ✅ Comprehensive error handling
- ✅ Support for all Zarinpal API endpoints
- ✅ Sandbox environment for testing
- ✅ Custom StartPay endpoint configuration
- ✅ Wage splitting for shared settlements
- ✅ Fee calculation utilities
Installation
pip install irgateway
Quick Start
Synchronous Usage
from irgateway.zarinpal import ZarinpalClient
from irgateway.zarinpal.enums import Environment, Currency
# Initialize client
client = ZarinpalClient(
merchant_id="YOUR-MERCHANT-ID",
environment=Environment.SANDBOX # Use PRODUCTION for live
)
# Create payment request
payment = client.request(
amount=10000,
callback_url="https://yoursite.com/callback",
description="خرید محصول"
)
print(f"Payment URL: {payment.payment_url}")
# Verify payment after callback
verification = client.verify(
authority="A00000000000000000000000000123456789",
amount=10000
)
print(f"Reference ID: {verification.ref_id}")
Asynchronous Usage
from irgateway.zarinpal import ZarinpalClient
from irgateway.zarinpal.enums import Environment, Currency
async def process_payment():
async with AsyncZarinpalClient(
merchant_id="YOUR-MERCHANT-ID",
environment=Environment.SANDBOX
) as client:
payment = await client.request(
amount=10000,
callback_url="https://yoursite.com/callback",
description="خرید محصول"
)
return payment.payment_url
# In your async function
url = await process_payment()
API Methods
| Method | Description |
|---|---|
request() |
Create new payment request |
verify() |
Verify payment after user returns |
unverified() |
Get list of unverified transactions |
reverse() |
Request refund (requires permission) |
inquiry() |
Check payment status |
calculate_fee() |
Calculate gateway fees |
Advanced Features
Payment Metadata
from irgateway.types import PaymentMetadata
metadata = PaymentMetadata(
mobile="09123456789",
email="user@example.com"
)
payment = client.request(
amount=10000,
callback_url="https://yoursite.com/callback",
description="خرید محصول",
metadata=metadata
)
Wage Splitting
from irgateway.zarinpal.types import Wage
wages = [
Wage(iban="IR123456789012345678901234", amount=5000),
Wage(iban="IR987654321098765432109876", amount=3000)
]
payment = client.request(
amount=10000,
callback_url="https://yoursite.com/callback",
description="خرید مشترک",
wages=wages
)
Configuration
from irgateway.zarinpal import ZarinpalClient, ZarinpalConfig
config = ZarinpalConfig(
timeout=30, # Request timeout in seconds
startpay_endpoint="https://custom-gateway.com/" # Optional custom gateway
)
client = ZarinpalClient(
merchant_id="YOUR-MERCHANT-ID",
config=config
)
Error Handling
from irgateway.zarinpal.errors import ZarinpalException, InvalidMerchantError
try:
payment = client.request(...)
except InvalidMerchantError:
print("Merchant ID is invalid")
except ZarinpalException as e:
print(f"Error {e.code}: {e.message}")
Requirements
- Python 3.7+
- requests (for sync client)
- aiohttp (for async client)
Development
# Clone repository
git clone https://github.com/javad2nd/irgateway.git
cd irgateway
# Install dependencies
pip install -e ".[dev]"
# Run tests
pytest
License
MIT License - see LICENSE file for details
Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
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
irgateway-0.1.0.tar.gz
(14.4 kB
view details)
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 irgateway-0.1.0.tar.gz.
File metadata
- Download URL: irgateway-0.1.0.tar.gz
- Upload date:
- Size: 14.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: python-requests/2.31.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
57234c75144a650f84a3e947d29fe2e7e009e13c9be3e8ef1bafdd9677069e7e
|
|
| MD5 |
e685a6a0dca0b1435cfb3ca6c0751be5
|
|
| BLAKE2b-256 |
66415aa5b42a22f51037f5c43b425b2ec41e51dba1a16e0db8d070a038575b04
|
File details
Details for the file irgateway-0.1.0-py2.py3-none-any.whl.
File metadata
- Download URL: irgateway-0.1.0-py2.py3-none-any.whl
- Upload date:
- Size: 15.3 kB
- Tags: Python 2, Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: python-requests/2.31.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9c3de9b0a2952f993778853c2219dc79e814575b7ad09bd7e3387562c39660e4
|
|
| MD5 |
aa401257b6506316154e857903b38e0d
|
|
| BLAKE2b-256 |
071b4db9a742a20a00c0cb9ec4c27c8064d267005c7095e7918f27fcd1394122
|