Co je to peněžní bot v Telegramu?
Řekneme vám, jak připojit platební systém k robotovi Telegram a hostit jej na serveru.
Tato instrukce je součástí kurzu „Jak vytvořit telegramové roboty“.
Zobrazit celý kurz
úvod
Telegram boti mají širokou funkčnost a řeší spoustu problémů pro klienty různých podniků. Řekneme vám, jak vytvořit a hostit robota pro přijímání plateb v telegramu v Pythonu.
Telegram má vestavěný platební systém, takže existuje spousta scénářů, jak používat robota k přijímání plateb. Může se jednat o jednorázovou platbu za objednávku nebo měsíční předplatné.
Platební systémy Telegram
Nyní messenger podporuje platby ve více než 200 zemích prostřednictvím bran, jako jsou: Stripe, YooMoney, Sberbank, LiqPay, PayMaster a další.
Vše začíná instalací knihovny aiogram. Nyní je to možná nejoblíbenější knihovna pro vývoj botů v Pythonu.
python -m pip install aiogram
Přejděte na Telegram a napište příkaz /newbot do BotFather. Zadejte jméno nového robota. Důležité je, aby to končilo slovem Bot.

Obdržíme unikátní token pro nového robota. Nyní napíšeme kód pro jednoduchý echo bot, který zkontroluje jeho fungování.
Propojte robota s aplikací
Vytvoříme soubor config.py a zadáme do něj token, který vydal BotFather. Do hlavního souboru main.py zapíšeme základní kód libovolného bota.
Vezměte prosím na vědomí jeden důležitý bod: robot musí zpracovat každou zprávu ze serverů telegramu. Chcete-li to provést, při spouštění robota musíte nastavit argument skip_updates na hodnotu False. Vyhnete se tak problémům při zpracování plateb.
import config import logging from aiogram import Bot, Dispatcher, executor, types from aiogram.types.message import ContentType # log logging.basicConfig(level=logging.INFO) # init bot = Bot(token=config.TOKEN) dp = Dispatcher(bot) # echo bot @dp.message_handler() async def echo(message; types.Message): await message.answer (message.text) # run long-polling if __name__ == "main": executor.start_polling(dp, skip_updates=False) Nyní můžete spustit kód a zkontrolovat, zda robot funguje. Po ujištění, že je vše v pořádku, přistoupíme k propojení plateb.

Vrátíme se do BotFather, zadáme příkaz /mybots a vybereme svého robota ze seznamu.
V nabídce, která se otevře, klikněte na tlačítko „Platby“. Z poskytnutého seznamu vyberte požadovanou platební bránu. PayMaster používáme jako test. Chcete-li připojit platbu k robotovi Telegram, musíte nejprve provést test, takže vyberte „PayMaster Test“.

Postupujeme podle jednoduchých pokynů robota platebního systému a obdržíme testovací token PayMaster. Můžete jej okamžitě uložit do config.py.
TOKEN = "5432877141:AAHEwBEb2mwnZX56oaHM10o33ZBZwVkvv-s" PAYMENTS_TOKEN = "1744374395:TEST:f14d9f0d42528b780370" Vraťme se ke kódu bota. Abyste mohli požádat o platbu za zboží/služby, musíte vygenerovat fakturu s platebními údaji. Pošlete to klientovi a zpracujte výsledek.
Spojujeme platbu
Poskytujeme seznam dostupných cen produktů. Jako cenu musíte předat celočíselnou hodnotu v co nejmenších měnových jednotkách. Pokud mluvíme o rublech, musí být náklady uvedeny v kopejkách. To znamená, že místo 500 rublů zde uvedeme 500 * 100 nebo 50 000 kopecků. V případě dolarů to bude téměř stejné, $1=100 centů. Pokud máte v úmyslu pracovat s jinými měnami, můžete použít currencies.json z rozhraní Telegram API.
Dále v kódu bota platebního systému vytvoříme handler pro příkaz /buy. Příkaz vygeneruje a odešle uživateli platební fakturu. Příklad používá měsíční předplatné.
import config import logging from aiogram import Bot, Dispatcher, executor, types from aiogram.types.message import ContentType # log logging.basicConfig(level=logging.INFO) # init bot = Bot(token=config.TOKEN) dp = Dispatcher(bot) # prices PRICE = types.LabeledPrice(label="Подписка на 1 месяц", amount=500*100) # в копейках (руб) # buy @dp.message_handler(commands=['buy']) async def buy(message: types.Message): if config.PAYMENTS_TOKEN.split(':')[1] == 'TEST': await bot.send_message(message.chat.id, "Тестовый платеж. ") await bot.send_invoice(message.chat.id, title="Подписка на бота", description="Активация подписки на бота на 1 месяц", provider_token=config.PAYMENTS_TOKEN, currency="rub", photo_url="https://www.aroged.com/wp-content/uploads/2022/06/Telegram-has-a-premium-subscription.jpg", photo_width=416, photo_height=234, photo_size=416, is_flexible=False, prices=[PRICE], start_parameter="one-month-subscription", payload="test-invoice-payload") Samotný proces generování faktury je poměrně jednoduchý. Nebojte se spousty hádek. Jsou to názvy produktů nebo služeb, popisy, cena, měna atd.

Nastavení plateb
Všimněte si argumentu is_flexible. Mělo by být nastaveno na True pouze v případě, že konečná cena závisí na zvoleném způsobu doručení, pokud mluvíme o prodeji fyzického produktu.
O dalších parametrech metody send_invoice si vždy můžete přečíst v oficiální dokumentaci Telegram API.
Nyní potřebujeme vytvořit další dva obslužné nástroje: Dotaz před pokladnou a Úspěšná platba.
Dotaz před pokladnou odpovídá za zpracování a schválení platby před tím, než ji uživatel provede. Tímto způsobem můžete zkontrolovat dostupnost zboží na skladě nebo zkontrolovat cenu.
Je důležité, aby telegramové servery potřebovaly odpověď do 10 sekund. Pokud tam není, platba neproběhne.
Úspěšná platba je odpovědný za zpracování úspěšně dokončené platby.
# pre checkout (must be answered in 10 seconds) @dp.pre_checkout_query_handler(lambda query: True) async def pre_checkout_query(pre_checkout_q: types.PreCheckoutQuery): await bot.answer_pre_checkout_query(pre_checkout_q.id, ok=True) # successful payment @dp.message_handler(content_types=ContentType.SUCCESSFUL_PAYMENT) async def successful_payment(message: types.Message): print("SUCCESSFUL PAYMENT:") payment_info = message.successful_payment.to_python() for k, v in payment_info.items(): print(f" = ") await bot.send_message(message.chat.id, f"Платеж на сумму прошел успешно. ") # run long-polling if __name__ == "__main__": executor.start_polling(dp, skip_updates=False) Zde můžete uživateli poskytnout stejný měsíc předplatného, za který zaplatil, nebo jakoukoli jinou službu.
Jak robot funguje v praxi
Po obdržení faktury za platbu od robota klikněte na „Zaplatit“. Protože nejprve testujeme bota, použijeme speciální testovací kartu.

Zadáme údaje a zaplatíme předplatné – vše funguje. Při přechodu na bojový projekt je důležité nezapomenout vybrat správné skóre.
Nyní se vrátíme do BotFather, abychom obdrželi skutečný token z vybrané platební brány. Pokud existuje požadavek na různé sazby nebo platební metody, je lepší požádat o 2-3 tokeny z různých platebních bran najednou. Dále budete muset vygenerovat fakturu pomocí tokenu vybraného poskytovatele.
Přenos robota na produkční server
Aby bot fungoval 24 hodin denně, 7 dní v týdnu, bez ohledu na to, zda je počítač zapnutý nebo ne, nahrajeme jej na skutečný server.
K tomu použijeme cloudový server Shared Line od Selectel. Kalkulačka ovládacího panelu umožňuje zvolit flexibilní konfiguraci serveru a okamžitě zjistit, kolik bude řešení stát. Všechny produkty a služby jsou shromažďovány od poskytovatele na jednom místě, takže je lze snadno spravovat. Server si můžete pronajmout od 10 ₽/den a konzole má v případě potřeby možnost rychle škálovat výpočetní zdroje.
Zaregistrujte se a přihlaste se do ovládacího panelu my.selectel.ru. Přejděte do sekce „Cloud Platform“ a vyberte „Servery“. Vytvoříme server – po tomto kroku se v seznamu rozsvítí jako „AKTIVNÍ“.
Nastavení konfigurace. Například používáme 1 jádro, 512 MB DDR4 a 5 GB místa na disku.

Nyní přejdeme k nahrání robota na produkční server. Nejprve se musíte připojit k serveru přes SSH. K tomu můžeme použít program WinSCP pro Windows. Linux a MAC k tomu mají vlastní vestavěné nástroje.
Spusťte WinSCP. Jako název hostitele zadáme IP adresu našeho nového serveru. Přihlašovací jméno a heslo můžete získat v záložce „Konzola“ na ovládacím panelu.
Nyní přesuneme soubory našeho robota sem: config.py a main.py. Dále otevřete samostatné připojení k serveru přes SSH v konzole.
Chcete-li to provést, klikněte na tlačítko ve WinSCP a otevřete PuTTY. Můžete použít i příkazový řádek, v tom není žádný zásadní rozdíl.