Metadata-Version: 2.5
Name: pay-engine
Version: 0.1.0
Summary: All-in-one payment engine for Uzbekistan (Payme, Click, Uzum Bank) with one-liner links, Telegram buttons, and auto-charge.
Project-URL: Homepage, https://github.com/developer/pay-engine
Project-URL: Bug Tracker, https://github.com/developer/pay-engine/issues
Author-email: Developer <dev@example.com>
License: MIT
License-File: LICENSE
Keywords: aiogram,click,fastapi,fintech,payme,payment,telegram,uzbekistan,uzum
Classifier: Development Status :: 4 - Beta
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: MIT License
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Topic :: Office/Business :: Financial :: Point-Of-Sale
Classifier: Topic :: Software Development :: Libraries :: Python Modules
Requires-Python: >=3.9
Requires-Dist: httpx>=0.25.0
Provides-Extra: dev
Requires-Dist: build; extra == 'dev'
Requires-Dist: pytest-asyncio>=0.21.0; extra == 'dev'
Requires-Dist: pytest>=7.0.0; extra == 'dev'
Requires-Dist: twine; extra == 'dev'
Provides-Extra: fastapi
Requires-Dist: fastapi>=0.100.0; extra == 'fastapi'
Provides-Extra: telegram
Requires-Dist: aiogram>=3.0.0; extra == 'telegram'
Description-Content-Type: text/markdown

# 💳 pay-engine

[![PyPI version](https://img.shields.io/badge/pypi-0.1.0-blue.svg)](https://pypi.org/project/pay-engine/)
[![Python](https://img.shields.io/badge/python-3.9%20%7C%203.10%20%7C%203.11%20%7C%203.12%20%7C%203.13-blue)](https://pypi.org/project/pay-engine/)
[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)

**pay-engine** — O'zbekistonning barcha asosiy to'lov tizimlarini (**Payme**, **Click**, **Uzum Bank**) birlashtiruvchi, bir qator kod bilan to'lov havolalari yaratish, Telegram bot tugmalari hosil qilish va avtomatik pul yechish (auto-charge) imkonini beruvchi zamonaviy Python kutubxonasi.

---

## 🚀 Imkoniyatlar (Features)

- ⚡ **1 qatorlik to'lov havolalari:** Payme, Click va Uzum Bank uchun bir lahzada to'lov linklarini olish.
- 🤖 **Telegram Botlar uchun tayyor klaviaturalar:** `aiogram` va boshqa botlar uchun tayyor `InlineKeyboardMarkup` tugmalari.
- 🛡️ **Avtomatlashtirilgan Webhooklar:** FastAPI va boshqa freymvorklarda imzolarni tekshirish va JSON-RPC protokoli bilan bosh qotirmasdan, faqat `on_success(order_id, amount)` orqali pul tushganini qabul qilish.
- 🔄 **Avtomatik yechish (Card Token / Auto-charge):** Karta tokeni orqali qayta SMS-kodsiz to'lov yechish (obunalar va Yandex Go kabi xizmatlar uchun).
- 🧩 **Zero-boilerplate:** `.env` faylidan kalitlarni avtomatik o'qib olish.

---

## 📦 O'rnatish (Installation)

```bash
pip install pay-engine
```

FastAPI yoki Telegram bot integratsiyasi bilan birga o'rnatish uchun:
```bash
pip install "pay-engine[fastapi,telegram]"
```

---

## ⚙️ Sozlash (.env)

Loyihangizning `.env` fayliga kerakli to'lov tizimlari kalitlarini kiriting:

```env
# Payme
PAYME_MERCHANT_ID=your_payme_merchant_id
PAYME_SECRET_KEY=your_payme_secret_key
PAYME_TEST_MODE=false

# Click
CLICK_SERVICE_ID=your_click_service_id
CLICK_MERCHANT_ID=your_click_merchant_id
CLICK_SECRET_KEY=your_click_secret_key
CLICK_MERCHANT_USER_ID=your_click_user_id

# Uzum Bank
UZUM_SHOP_ID=your_uzum_shop_id
UZUM_SECRET_KEY=your_uzum_secret_key
```

---

## 📖 Foydalanish (Quickstart)

### 1. To'lov havolasini olish (1 qatorda)

```python
from pay_engine import payme, click, uzum

# Payme havolasi:
payme_url = payme.link(amount=100_000, order_id="ORDER_123")

# Click havolasi:
click_url = click.link(amount=100_000, order_id="ORDER_123")

# Uzum Bank havolasi:
uzum_url = uzum.link(amount=100_000, order_id="ORDER_123")
```

---

### 2. Telegram Botda to'lov tugmalarini chiqarish (aiogram)

```python
from aiogram import Bot, Dispatcher, types
from pay_engine.integrations.telegram import payment_buttons

bot = Bot(token="BOT_TOKEN")
dp = Dispatcher()

@dp.message(lambda msg: msg.text == "/tolov")
async def pay_command(message: types.Message):
    # Bir qatorda Payme, Click va Uzum tugmalarini yasaymiz:
    keyboard = payment_buttons(
        amount=75_000, 
        order_id=message.from_user.id
    )
    
    await message.answer(
        "To'lov qilish uchun qulay tizimni tanlang:",
        reply_markup=keyboard
    )
```

---

### 3. FastAPI da pul tushganini ushlash (Webhook)

```python
from fastapi import FastAPI
from pay_engine.integrations.fastapi import pay_router

app = FastAPI()

# Pul muvaffaqiyatli tushganda bajariladigan funksiya:
async def tolov_tasdiqlandi(order_id: str, amount: float):
    print(f"✅ Pul to'landi: Buyurtma #{order_id}, Summa: {amount:,.0f} so'm")
    # Bazangizda buyurtma statusini o'zgartiring

# Bitta qatorda /payments/payme, /payments/click, /payments/uzum ulanadi:
app.include_router(pay_router(on_success=tolov_tasdiqlandi))
```

---

### 4. Avtomatik yechish (Card Token Auto-charge)

Mijozning saqlangan karta tokeni orqali hisobidan avtomatik pul yechib olish:

```python
from pay_engine import payme

result = payme.charge(
    card_token="saved_card_token_abc123",
    amount=50_000,
    order_id="SUB_999",
    description="Oylik obuna to'lovi"
)

if result.success:
    print(f"Pul yechildi! Tranzaksiya ID: {result.transaction_id}")
else:
    print(f"Xatolik yuz berdi: {result.message}")
```

---

## 🧪 Testlarni ishga tushirish

```bash
python -m unittest discover -s tests -p "test_*.py"
```

---

## 📄 Litsenziya

MIT License. Ochiq va bepul foydalanish mumkin!
