qpay-client нь QPay v2 API-тай Python орчноос холбогдохыг хялбарчлах клиент сан юм.
Энэ сан нь async болон sync клиент, schema validation, access token / refresh token удирдлага,
retry logic, мөн түгээмэл endpoint-уудын typed wrapper-уудыг агуулдаг.
Баримт бичиг: qpay-client.readthedocs.io
QPay developer портал: developer.qpay.mn
AsyncQPayClientболонQPayClientхоёуланг нь дэмжинэ- Authentication, token refresh-ийг дотооддоо удирдана
- Pydantic schema ашиглан request/response-ийг шалгана
- Network error болон серверийн түр зуурын алдаанд retry хийж чадна
payment_checkpolling-ийг тохиргоогоор удирдаж чаднаwithболонasync withcontext manager дэмждэг- QPay алдааг
QPayErrorхэлбэрээр илүү ойлгомжтой буцаана
pip ашиглах:
pip install qpay-clientuv ашиглах:
uv add qpay-clientpoetry ашиглах:
poetry add qpay-clientfrom decimal import Decimal
from qpay_client.v2 import AsyncQPayClient, QPaySettings
from qpay_client.v2.schemas.schemas import InvoiceCreateSimpleRequest
settings = QPaySettings.sandbox()
async def main():
async with AsyncQPayClient(settings=settings) as client:
invoice = await client.invoice_create(
InvoiceCreateSimpleRequest(
sender_invoice_no="ORDER-1001",
invoice_receiver_code="terminal",
invoice_description="Туршилтын нэхэмжлэх",
amount=Decimal("1500"),
callback_url="https://example.com/qpay/callback?payment_id=ORDER-1001",
)
)
print(invoice.invoice_id)
print(invoice.qPay_shortUrl)from decimal import Decimal
from qpay_client.v2 import QPayClient, QPaySettings
from qpay_client.v2.schemas.schemas import InvoiceCreateSimpleRequest
settings = QPaySettings.sandbox()
with QPayClient(settings=settings) as client:
invoice = client.invoice_create(
InvoiceCreateSimpleRequest(
sender_invoice_no="ORDER-1002",
invoice_receiver_code="terminal",
invoice_description="Sync туршилтын нэхэмжлэх",
amount=Decimal("2500"),
callback_url="https://example.com/qpay/callback?payment_id=ORDER-1002",
)
)
print(invoice.invoice_id)from qpay_client.v2 import QPaySettings
settings = QPaySettings.sandbox()from qpay_client.v2 import QPaySettings
settings = QPaySettings.production(
username="your-merchant-username",
password="your-merchant-password",
invoice_code="YOUR_INVOICE_CODE",
)settings = QPaySettings.sandbox(
client_retries=2,
client_delay=0.25,
client_jitter=0.1,
payment_check_retries=8,
payment_check_delay=0.5,
payment_check_jitter=0.2,
)from qpay_client.v2.schemas.enums import ObjectType
from qpay_client.v2.schemas.schemas import Offset, PaymentCheckRequest
check_request = PaymentCheckRequest(
object_type=ObjectType.invoice,
object_id="YOUR_INVOICE_ID",
offset=Offset(page_number=1, page_limit=100),
)
result = await client.payment_check(check_request)
if result.count > 0:
print("Төлбөр олдлоо")examples/quickstart.py файлд callback endpoint-тэй энгийн async жишээ бий.
Үндсэн санаа нь:
- Invoice үүсгэнэ
invoice_id-г өөрийн storage-д хадгална- QPay callback ирэх үед
payment_checkашиглан төлбөрийг шалгана - Амжилттай боловсруулсны дараа
SUCCESSбуцаана
Жишээ файлыг ажиллуулах:
fastapi dev examples/quickstart.pyQPay callback endpoint-ийн хариу амжилттай байх үед HTTP 200 болон SUCCESS буцаах нь чухал.
Клиент болон тохиргоог qpay_client.v2-оос импортлоорой:
from qpay_client.v2 import AsyncQPayClient, QPayClient, QPaySettings, QPayErrorSchema болон enum-уудыг дараах модулиудаас импортлоно:
from qpay_client.v2.schemas.enums import ObjectType
from qpay_client.v2.schemas.schemas import InvoiceCreateSimpleRequest, Offset, PaymentCheckRequesttokenrefresh
invoice_getinvoice_createinvoice_cancel
payment_getpayment_listpayment_checkpayment_cancelpayment_refund
ebarimt_getebarimt_create
subscription_getsubscription_cancel
QPaySettings()-ийг хоосноор нь дуудахгүй.sandbox()эсвэлproduction()factory ашиглана.- Public endpoint-ууд auth-аа өөрсдөө шалгадаг тул request бүрийн өмнө токенээ гараар шинэчлэх шаардлагагүй.
payment_checkpolling хийж болох тул timeout болон retry тохиргоогоо өөрийн хэрэглээнд тааруулж сонгоно.- Production credential-ээ репод шууд хадгалахгүй байхыг зөвлөе.
MIT License