This release is a pre-release and may not be stable for production use.
Poolak SDK 🪙
کتابخانه رسمی پایتون برای تعامل با درگاه خدمات پرداخت و موتور تطبیق هوشمند تراکنشهای پولک (Poolak).
این کیت توسعه نرمافزار (SDK) به شما اجازه میدهد تا به سادگی تراکنشهای مالی را در پروژههای خود (نظیر رباتهای تلگرامی، سیستمهای مالی و وبسایتها) ثبت، پیگیری و از طریق استریم زنده یا روترهای وبهوک هوشمند پایش کنید.
قابلیتهای برجسته
- کلاینتهای همگام و ناهمگام (Sync/Async): پشتیبانی کامل از برنامهنویسی غیرهمزمان با
AsyncPoolakو همزمان باPoolakبر پایه کتابخانه قدرتمندhttpx. - مدیریت خودکار ارزها: تعریف مستقیم مبالغ با کلاسهای
TomanیاRialو مدیریت هوشمند تبدیل واحدها قبل از ارسال به درگاه. - استریم زنده وضعیت تراکنشها (SSE): امکان رصد و دریافت آنی وضعیت تراکنشها بدون نیاز به کوئریهای تکراری (Polling).
- پلاگین آماده وبهوک برای FastAPI: دارای روتر توکار جهت دریافت امن اعلانهای وبهوک پرداخت همراه با اعتبارسنجی خودکار امضای هَششده (HMAC-SHA256).
- اعتبارسنجی قوی با Pydantic: استفاده از Pydantic نسخه ۲ برای مدلسازی و بررسی دقیق دادهها قبل و بعد از ارسال به سرور.
نصب و راهاندازی
شما میتوانید بسته اصلی کتابخانه را با دستور زیر نصب کنید:
pip install poolak
اگر قصد دارید از افزونه وبهوک این کتابخانه برای هماهنگی با فریمورک FastAPI استفاده کنید، آن را با دستور زیر نصب نمایید تا ابزارهای موردنیاز FastAPI نیز به طور خودکار دریافت شوند:
pip install poolak[fastapi]
تنظیمات محیطی (Environment Variables)
برای راهاندازی آسان و بدون نیاز به پاس دادن توکنها درون کد برنامهنویسی، میتوانید متغیرهای محیطی زیر را تنظیم کنید:
export POOLAK_BOT_TOKEN="your_bot_token_here"
export POOLAK_PARTNER_TOKEN="your_partner_token_here" # اختیاری
export POOLAK_BASE_URL="https://api.poolak.ir" # اختیاری برای تغییر درگاه سرور
شروع سریع (Quick Start)
برای ایجاد تراکنش، به شناسه کارت بانکی فعال خود (destination_card_id) نیاز دارید. در ابتدا میتوانید لیست کارتهای فعال خود را دریافت کنید:
۱. دریافت لیست کارتهای بانکی فعال
from poolak import Poolak
with Poolak(bot_token="your_bot_token") as client:
cards = client.get_cards()
for card in cards:
print(f"بانک: {card.bank.name} | شماره کارت: {card.card_number} | شناسه کارت: {card.id}")
۲. ثبت تراکنش به صورت همگام (Synchronous)
from poolak import Poolak, Toman
# ثبت یک تراکنش جدید با واحد تومان
with Poolak(bot_token="your_bot_token") as client:
try:
transaction = client.create_transaction(
order_id="order_10024",
amount=Toman(10000), # مقداردهی با تومان (به طور خودکار به ریال تبدیل میشود)
destination_card_id="وارد کنید card.id شناسه کارت خود را از بخش قبلی"
)
print(f"تراکنش با شناسه {transaction.id} ثبت شد. مبلغ نهایی ریال: {transaction.final_amount}")
except Exception as e:
print(f"خطا در ثبت تراکنش: {e}")
۳. اجرای ناهمگام (Asynchronous)
استفاده از کلاس AsyncPoolak به همراه ساختار async with برای پروژههای ناهمگام (نظیر رباتهای تلگرامی پیشرفته):
import asyncio
from poolak import AsyncPoolak, Toman
async def main():
async with AsyncPoolak() as client: # خواندن خودکار توکن از متغیر محیطی
# ایجاد تراکنش
transaction = await client.create_transaction(
order_id="order_10025",
amount=Toman(5000),
destination_card_id="8f90b1c0-0000-0000-0000-000000000000"
)
print(f"تراکنش ثبت شد: {transaction.id}")
# بررسی آنی وضعیت تراکنش
status = await client.check_transaction(transaction_id=transaction.id)
print(f"وضعیت فعلی: {status.status}")
asyncio.run(main())
ردیابی آنی پرداختها (Real-time Payment Tracking)
یکی از ویژگیهای قدرتمند سرویس پولک، ردیابی زنده وضعیت تراکنشها بدون ارسال کوئریهای مکرر به شبکه است. به دو روش میتوانید منتظر تایید تراکنش بمانید:
متد معلقکننده (Blocking)
این متد تا زمانی که خریدار تراکنش را با موفقیت واریز نکند، برنامه را متوقف نگه میدارد (تا سقف زمان مشخصشده برای انقضا):
import asyncio
from poolak import AsyncPoolak
async def main():
async with AsyncPoolak() as client:
print("در حال انتظار برای پرداخت...")
status = await client.wait_for_payment(
transaction_id="8f90b1c0-0000-0000-0000-000000000000",
timeout=900 # حداکثر زمان انتظار به ثانیه
)
print(f"پرداخت با وضعیت خاتمه یافت: {status}")
asyncio.run(main())
استریم زنده رویدادها (Stream)
اگر نیاز دارید تا وضعیت تغییرات را به صورت واکنشی پایش کنید، میتوانید رویدادها را استریم کنید:
import asyncio
from poolak import AsyncPoolak
async def main():
async with AsyncPoolak() as client:
async for event in client.stream_transaction("8f90b1c0-0000-0000-0000-000000000000"):
print(f"رویداد جدید دریافت شد: {event.status}")
asyncio.run(main())
یکپارچهسازی وبهوک با FastAPI
اگر میخواهید اطلاعات پرداختها را مستقیماً بر روی وبسایت خود دریافت کنید، میتوانید از روتر اختصاصی پولک استفاده کنید. این روتر به طور خودکار صحت امضای ارسالی از سرور پولک را بررسی میکند و در صورت صحت، عملیات را در پسزمینه اجرا مینماید:
from fastapi import FastAPI
from poolak.contrib.fastapi import PoolakWebhookRouter
app = FastAPI()
# تعریف وبهوک با کلید رمز وبهوک دریافت شده از پنل پولک
webhook_router = PoolakWebhookRouter(webhook_secret="your_webhook_secret_key")
@webhook_router.on_paid()
async def handle_payment_event(payload: dict):
# این تابع زمانی که واریز تایید شد در پسزمینه صدا زده میشود
transaction_id = payload.get("transaction_id")
order_id = payload.get("order_id")
final_amount = payload.get("final_amount")
print(f"پرداخت موفق تایید شد! شماره سفارش: {order_id}، مبلغ: {final_amount}")
# اضافه کردن روتر به اپلیکیشن وب
app.include_router(webhook_router, prefix="/webhooks/poolak")
مدیریت خطاها (Error Handling)
خطاهای مربوط به ارتباط با درگاه در استثناهای ساختاریافته دستهبندی شدهاند تا کنترل جریان برنامه آسانتر باشد:
from poolak import (
Poolak,
Toman,
AuthenticationError,
ValidationError,
RateLimitError,
APIResponseError
)
try:
with Poolak() as client:
client.create_transaction("order_12", Toman(100), "invalid_card_id")
except AuthenticationError as e:
print(f"خطای تایید هویت یا توکن نامعتبر: {e}")
except ValidationError as e:
print(f"خطای اعتبارسنجی مقادیر ارسالی: {e}")
except RateLimitError as e:
print(f"محدودیت درخواستهای مکرر به سرور: {e}")
except APIResponseError as e:
print(f"خطای پاسخ سرور: {e}")
سایر متدها و ابزارهای کمکی
علاوه بر متدهای اصلی، SDK قابلیتهای زیر را نیز ارائه میدهد:
- دریافت وضعیت کیف پول (
get_wallet_status): مشاهده موجودی، طرح فعال و تراکنشهای باقیمانده. - تایید دستی تراکنش (
manual_verify): امکان تطبیق دستی یک تراکنش تعلیق شده با یک پیامک واریز یتیم (Orphan). - دریافت پیامکهای یتیم (
get_orphans): استعلام پیامکهایی که به دلیل عدم تطبیق خودکار سیستمی، در دیتابیس یتیم ماندهاند.
توسعه و اجرای تستها
جهت اجرای آزمونهای واحد و ارزیابی صحت کارکرد ابزار بر روی سیستم خود، ابتدا نیازمندیهای توسعه را نصب کرده و دستور زیر را در مسیر ریشه پروژه اجرا کنید:
pytest
لایسنس
این پروژه تحت مجوز LICENSE منتشر شده است. استفاده و تغییر در آن برای عموم توسعهدهندگان آزاد است.
Metadata
Release files for poolak 0.1.0b1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| poolak-0.1.0b1.tar.gz | 12.2 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| poolak-0.1.0b1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 23.1 kB
Release files / poolak-0.1.0b1.tar.gz
| Download URL | poolak-0.1.0b1.tar.gz |
|---|---|
| Size | 12.2 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
47d5bf9358e632c4bf5e7cfb6067937c041fa31f4e6b65f4652981f366d8dfe4
|
|
BLAKE2b-256 checksum How to use checksums |
3ece12e013815cbd514de20d21cc616ad978f7c6525879010ae938481e08e0bf
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jul 30, 2026.
Transparency logRelease files / poolak-0.1.0b1-py3-none-any.whl
| Download URL | poolak-0.1.0b1-py3-none-any.whl |
|---|---|
| Size | 10.9 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
7d653f92266830012ed3b5380daeb871d55ebff7f7415dcceb4803baa0b229db
|
|
BLAKE2b-256 checksum How to use checksums |
43a56f1d177bdfa3912a6a2836e76bdbba52b533fdb9211cf8e704b42a17c798
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jul 30, 2026.
Transparency log