Skip to main content

Asynchronous wrapper for CrystalPay API

Project description

Project Version License

О библиотеке 💙

Библиотека CrystalPayIO предоставит удобное использование и интеграцию CrystalPay API в ваши проекты.

[!TIP] Документация CrystalPAY: https://docs.crystalpay.io/

В данном репозитории вы найдете способы установки и использования библиотеки. Если вы обнаружите баги или какие-либо проблемы при использовании прошу отписать в телеграм. Данный модуль будет поддерживаться и обновляться. Спасибо, хорошего настроения!

[!NOTE] Чтобы получить AUTH_LOGIN & AUTH_SECRET перейдите в телеграм бота и создайте новую кассу.
В настройках можете включить тестовые платежи.

Установка 🧡

  • Установка, используя пакетный менеджер pip
$ pip install crystalpayio
  • Установка с GitHub (требуется git)
$ git clone https://github.com/Fsoky/crystalpayio
$ cd crystalpayio
$ python setup.py install
  • Или
$ pip install git+https://github.com/Fsoky/crystalpayio

Примеры использования 💜

  • Шаблон
import asyncio
from crystalpayio import CrystalPayIO


async def main() -> None:
    async with CrystalPayIO("AUTH_LOGIN", "AUTH_SECRET") as crystal:
        ...


if __name__ == "__main__":
  asyncio.run(main())
  • Доступные методы
    checkout - Касса
    payment - Платежи
    invoice - Инвойсы (чеки)
    payoff - Вывод средств
    ticker - Доступные валюты и курс
    history - История платежей/выводов/общая
async with CrystalPayIO("AUTH_LOGIN", "AUTH_SECRET") as crystal:
    # Каждый метод хранится в свойстве, например касса:
    checkout = await crystal.checkout.me()

Пример интеграции в телеграм-бота (aiogram 3.x) ❤

import asyncio

from aiogram import Router, Bot, Dispatcher, F
from aiogram.types import Message, CallbackQuery, InlineKeyboardMarkup, InlineKeyboardButton
from aiogram.filters import CommandStart

from crystalpayio import CrystalPayIO

router = Router()
crystal = CrystalPayIO("AUTH_LOGIN", "AUTH_SECRET")


async def create_invoice() -> tuple:
    invoice = await crystal.invoice.create(
        100, # Цена
        5, # Время жизни чека (в минутах)
        amount_currency="RUB" # Валюта
    )
    return (invoice.url, invoice.id)


async def invoice_handler(id: str, message: Message) -> None:
    while True:
        invoice = await crystal.invoice.get(id)
        
        if invoice.state != "notpayed":
            await message.answer("Счёт успешно оплачен!")
        await asyncio.sleep(15) # Задержка


@router.message(CommandStart())
async def show_goods(message: Message) -> None:
    await message.answer(
        "🎃 Тыква - 100 РУБ.",
        reply_markup=InlineKeyboardMarkup(
            inline_keyboard=[
                [InlineKeyboardButton(text="КУПИТЬ", callback_data="buy")]
            ]
        )
    )


@router.callback_query(F.data == "buy")
async def buy_handler(query: CallbackQuery) -> None:
    invoice_task = asyncio.create_task(create_invoice())
    invoice_result = await invoice_task

    await query.message.answer(f"Перейди по ссылке и оплати: {invoice_result[0]}")
    await query.answer()

    asyncio.create_task(invoice_handler(invoice_result[1], query.message))


async def main() -> None:
    bot = Bot("TOKEN")
    dp = Dispatcher()

    dp.include_router(router)

    await bot.delete_webhook(True)
    await dp.start_polling(bot)


if __name__ == "__main__":
    asyncio.run(main())

Пример использования Webhook'ов 🕸

import asyncio

from crystalpayio import CrystalPayIO, WebhookManager, PaymentEvent

from fastapi import FastAPI # pip install fastapi[all]
import uvicorn # pip install uvicorn

WEBHOOK_URL = "https://xxx-xxx-xxx.ngrok-free.app" # ngrok url
WEBHOOK_ENDPOINT = "/my-endpoint"

app = FastAPI()
crystal = CrystalPayIO("AUTH_LOGIN", "AUTH_SECRET")
wm = WebhookManager(app)

wm.register_webhook_endpoint(WEBHOOK_ENDPOINT) # Регистрируем путь к вебхуку


@wm.successfull_payment()
async def handle_successfull_event(event: PaymentEvent) -> None:
    print(event)


async def create_invoice() -> None:
    order = await crystal.invoice.create(
        10, # Сумма (в рублях)
        5, # Время жизни чека (в минутах)
        callback_url=f"{WEBHOOK_URL}{WEBHOOK_ENDPOINT}"
    )
    print(order.url)


if __name__ == "__main__":
    asyncio.run(create_invoice()) # Запуск функции
    uvicorn.run("test:app")

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

crystalpayio-1.0.5.tar.gz (10.9 kB view details)

Uploaded Source

File details

Details for the file crystalpayio-1.0.5.tar.gz.

File metadata

  • Download URL: crystalpayio-1.0.5.tar.gz
  • Upload date:
  • Size: 10.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.10.12

File hashes

Hashes for crystalpayio-1.0.5.tar.gz
Algorithm Hash digest
SHA256 ece27c207b3e9af96867673787474c33404c50080c8a84701e917cd66570f8fc
MD5 2084525f4a2c0f80d75b509d6cfc5716
BLAKE2b-256 75a8edec0d99b8cfa2cdd4b47fbfc12413cba88f8f12e7cb1230ba017c80cf2d

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page