Fragment Donor SDKИсходный код

Версия 0.1.3 · Команды установки используют точные версии.

Python: безопасная интеграция покупки Telegram Stars

Python backend: username, баланс, подарки Telegram Stars/Premium и 429 без автоматического повторения покупки.

При покупке mnemonic кошелька и сессия/cookie Fragment передаются оператору API.

Начните с публичной проверки username через Python: аккаунт сервиса и данные кошелька не нужны. Проверьте статус пакета до установки или соберите SDK из исходного каталога.

Передайте mnemonic кошелька и сессию Fragment во время выполнения. Сначала проверьте баланс, сохраняя decimal-строки. Покупки в примере требуют FRAGMENT_ALLOW_PURCHASES=yes и FRAGMENT_PURCHASE_KIND=stars либо premium; выполняется только один выбранный подарок.

Выберите один нужный подарок: 50–1 000 000 Stars или Premium на 3/6/12 месяцев. Оба метода показаны для справки, а не как команда выполнить две покупки. Каждая покупка расходует реальные средства.

Обработайте типизированный flood-wait и передайте время ожидания планировщику. Не повторяйте покупку автоматически. После timeout/unconfirmed сверяйте кошелёк и получателя перед новым намеренным запросом.

Установка

python -m pip install fragment-donor-sdk==0.1.3

Пример

"""Server example; opt in and choose exactly one purchase kind explicitly."""

import os

from fragment_donor_sdk import (
    ApiError,
    FloodWaitError,
    FragmentDonorClient,
    WalletCredentials,
)


def main():
    allow_purchase = os.getenv("FRAGMENT_ALLOW_PURCHASES") == "yes"
    purchase_kind = os.getenv("FRAGMENT_PURCHASE_KIND")
    if allow_purchase and purchase_kind not in {"stars", "premium"}:
        raise SystemExit(
            "Set FRAGMENT_PURCHASE_KIND=stars or premium; no purchase sent"
        )
    client = FragmentDonorClient()
    username = os.getenv("FRAGMENT_USERNAME", "durov")
    try:
        user = client.get_user_info(username)
        print("Username:", user.username)
        if not os.getenv("FRAGMENT_MNEMONIC"):
            return
        credentials = WalletCredentials(
            mnemonic=os.environ["FRAGMENT_MNEMONIC"],
            cookie=os.getenv("FRAGMENT_COOKIE"),
            provider_key=os.getenv("TONCONSOLE_API_KEY"),
        )
        balance = client.wallet_balance(credentials=credentials)
        print("TON:", balance.ton, "USDT:", balance.usdt_ton)
        if allow_purchase and purchase_kind == "stars":
            # One intentional call; do not retry if the outcome is unknown.
            client.buy_stars(username, 50, credentials=credentials)
        elif allow_purchase and purchase_kind == "premium":
            client.buy_premium(username, 3, credentials=credentials)
    except FloodWaitError as error:
        print("FLOOD_WAIT seconds:", error.retry_after)
    except ApiError as error:
        print(
            type(error).__name__,
            "status:",
            error.status,
            "purchase outcome unknown:",
            error.purchase_outcome_unknown,
        )


if __name__ == "__main__":
    main()

Читайте дальше

API Telegram Stars: отправка Stars по username · Python SDK для Telegram Stars и Premium · Timeout платежа: защита от повторной покупки Telegram Stars

OpenAPI 3.0 · Postman collection