FastAPI integratsiyasi
PayTechUZ ni FastAPI ilovalar bilan integratsiya qilish uchun to'liq qo'llanma.
O'rnatish
PayTechUZ ni FastAPI qo'llab-quvvatlash bilan o'rnating:
pip install paytechuz[fastapi]
Konfiguratsiya
Ma'lumotlar bazasi modellarini sozlang:
from datetime import datetime, timezone
from sqlalchemy.orm import sessionmaker
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import create_engine, Column, Integer, String, Float, DateTime
from paytechuz.integrations.fastapi import Base as PaymentsBase
from paytechuz.integrations.fastapi.models import run_migrations
# Ma'lumotlar bazasi dvigatelini yaratish
SQLALCHEMY_DATABASE_URL = "sqlite:///./payments.db"
engine = create_engine(SQLALCHEMY_DATABASE_URL)
# Asosiy deklarativ klassni yaratish
Base = declarative_base()
# Order modelini yaratish
class Order(Base):
__tablename__ = "orders"
id = Column(Integer, primary_key=True, index=True)
product_name = Column(String, index=True)
amount = Column(Float)
status = Column(String, default="pending")
created_at = Column(DateTime, default=lambda: datetime.now(timezone.utc))
# run_migrations yordamida to'lov jadvallarini yaratish
run_migrations(engine)
# Order jadvalini yaratish
Base.metadata.create_all(bind=engine)
# Sessiya yaratish
SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)
Webhook ishlovchilarini yaratish:
from fastapi import FastAPI, Request, Depends
from sqlalchemy.orm import Session
from paytechuz.integrations.fastapi import PaymeWebhookHandler, ClickWebhookHandler
app = FastAPI()
# Ma'lumotlar bazasi sessiyasini olish uchun bog'liqlik
def get_db():
db = SessionLocal()
try:
yield db
finally:
db.close()
class CustomPaymeWebhookHandler(PaymeWebhookHandler):
def successfully_payment(self, params, transaction):
# Muvaffaqiyatli to'lovni boshqarish
order = self.db.query(Order).filter(Order.id == transaction.account_id).first()
order.status = "paid"
self.db.commit()
def cancelled_payment(self, params, transaction):
# Bekor qilingan to'lovni boshqarish
order = self.db.query(Order).filter(Order.id == transaction.account_id).first()
order.status = "cancelled"
self.db.commit()
class CustomClickWebhookHandler(ClickWebhookHandler):
def successfully_payment(self, params, transaction):
# Muvaffaqiyatli to'lovni boshqarish
order = self.db.query(Order).filter(Order.id == transaction.account_id).first()
order.status = "paid"
self.db.commit()
def cancelled_payment(self, params, transaction):
# Bekor qilingan to'lovni boshqarish
order = self.db.query(Order).filter(Order.id == transaction.account_id).first()
order.status = "cancelled"
self.db.commit()
@app.post("/payments/payme/webhook")
async def payme_webhook(request: Request, db: Session = Depends(get_db)):
handler = CustomPaymeWebhookHandler(
db=db,
payme_id="your_merchant_id",
payme_key="your_merchant_key",
account_model=Order,
account_field='id',
amount_field='amount'
)
return await handler.handle_webhook(request)
@app.post("/payments/click/webhook")
async def click_webhook(request: Request, db: Session = Depends(get_db)):
handler = CustomClickWebhookHandler(
db=db,
service_id="your_service_id",
merchant_id="your_merchant_id",
secret_key="your_secret_key",
account_model=Order
)
return await handler.handle_webhook(request)
To'lov uchun havola yaratish
from paytechuz.gateways.payme import PaymeGateway
from paytechuz.gateways.click import ClickGateway
# Buyurtmani olish
order = db.query(Order).filter(Order.id == 1).first()
# Payme to'lov havolasini yaratish
payme = PaymeGateway(
payme_id='your_payme_id',
payme_key='your_payme_key',
is_test_mode=True # Ishlab chiqarishda False qiling
)
payme_link = payme.create_payment(
id=order.id,
amount=order.amount,
return_url="https://example.com/return"
)
# Click to'lov havolasini yaratish
click = ClickGateway(
service_id='your_click_service_id',
merchant_id='your_click_merchant_id',
merchant_user_id='your_click_merchant_user_id',
secret_key='your_click_secret_key',
is_test_mode=True # Ishlab chiqarishda False qiling
)
click_link = click.create_payment(
id=order.id,
amount=order.amount,
return_url="https://example.com/return"
)
To'liq misol
PayTechUZ integratsiyasi bilan to'liq ishlaydigan FastAPI ilovasi uchun bizning misol loyihamizni ko'ring:
🔗 FastAPI integratsiya misoli - To'lov boshqaruvi bilan to'liq FastAPI loyihasi
Bu misol quyidagilarni o'z ichiga oladi:
- ✅ To'liq ilova sozlash
- ✅ Ma'lumotlar bazasi modellari va migratsiyalar
- ✅ To'lov shlyuzi integratsiyasi
- ✅ Webhook ishlovchilari
- ✅ API endpoints
- ✅ Xatoliklarni boshqarish
Keyingi qadamlar
- FastAPI misol loyihasi - To'liq ishlaydigan misol
- Boshlash - Asosiy o'rnatish qo'llanmasi
- Django integratsiyasi - Muqobil framework integratsiyasi