реклама
разместить

Как настроить прием платежей 2.0 в Telegram за 5 часов

С выходом обновления Платежи 2.0, были интересно написать и потрогать своего бота. Расскажем о нашем опыте и нюансах, с которыми столкнулись при разработке. В конце статьи есть ссылка на канал, в котором живет бот.

Создание бота

Первым делом мы зашли и создали бота в BotFather. Тут всё просто, опираемся на документацию: https://core.telegram.org/bots#creating-a-new-bot

Если в инструкции по ссылке ничего не понятно, то вот инструкция от нас:
1. Находим в Телеграм бота BotFather и добавляем себе в контакт-лист
2. Смотрим доступные команды бота с помощью команды /help
3. Выбираем /newbot и далее по подсказкам выполняем действия
4. После создания бота вы получите токен, которые нужно будет использовать в коде вашего бота. Сообщение с токеном необходимо сохранить.

Подключаем оплату

  • В боте BotFather вводим команду /mybots
  • В созданном боте выбираем поле Payments и выбираем, например, Stripe
  • Выбираем Connect Stripe Test и следуем инструкции
  • После выполнения, вы получите токен оплаты, его нужно сохранить

Связываем бота с приложением

Мы выбрали библиотеку https://github.com/php-telegram-bot/core
В конфиге params.php указали все токены из предыдущего шага. Выглядит так:

<?php return [ 'bot_api_key' => '', 'bot_username' => '', 'bot_payment_token' => '', ];

И с помощью библиотеки организовали взаимодействие бота с приложением:

$botApiKey = \Yii::$app->params['bot_api_key']; $botUsername = \Yii::$app->params['bot_username']; $telegram = new Telegram($botApiKey, $botUsername); $result = $telegram->setWebhook($url); if ($result->isOk()) { echo $result->getDescription(); }

Одна из первых тонкостей: для реализации нужен домен и SSL сертификат. Для наших задач мы взяли VDS c панелью Vesta и бесплатный SSL Let’s Encrypt. Бот работает на PHP, поэтому подойдет и обычный хостинг.

Написание кода бота

Теперь самое интересное — программирование. После того, как связали наше приложение и бота, можно начинать писать логику.

Для того что бы работать с ботами, надо реализовать поддержку различных команд. В нашем случае мы добавили только одну — “Спасибо”. Механика до безумия простая: при её написании формируется сообщение и сразу же выписывается счёт.

public function execute(): ServerResponse { $message = $this->getChannelPost() ? $this->getChannelPost() : $this->getMessage(); $text = $message->getText(true); if ($text && mb_strpos(mb_strtolower($text), 'спасибо') !== false) { //code... } return Request::emptyResponse(); }

Осталось в него только добавить нужный для нас товар и отправить пользователю этот счет. Все это уже есть в документации и кратко поля, которые использовались.

$chatId = $message->getChat()->getId(); Request::sendInvoice([ 'chat_id' => $chatId, 'title' => 'Чаевые', 'description' => 'Благодарность сотрудникам', 'payload' => uniqid(), 'provider_token' => \Yii::$app->params['bot_payment_token'], 'currency' => 'RUB', 'prices' => [ [ 'label' => 'Чаевые', 'amount' => 10000, ], ], 'reply_to_message_id' => $message->getMessageId(), 'max_tip_amount' => 100000, 'suggested_tip_amounts' => [10000, 20000, 30000] ]);

В title пишем название товара. В description — его описание. В currency валюту, которую мы использовали. В качестве price указывается цена. Кстати, она делится на 100. Чтобы указать цену товара в 100 рублей, нужно поставить amount 10000. Не сложно, правда?

Окончательный наш код с логикой выглядел таким образом:

declare(strict_types=1); namespace app\components\commands; use Longman\TelegramBot\Commands\SystemCommand; use Longman\TelegramBot\Entities\InlineKeyboard; use Longman\TelegramBot\Entities\Keyboard; use Longman\TelegramBot\Entities\ServerResponse; use Longman\TelegramBot\Request; class GenericMessageCommand extends SystemCommand { /** * @var string */ protected $name = 'genericmessage'; /** * @var string */ protected $description = ''; public function execute(): ServerResponse { $message = $this->getChannelPost() ? $this->getChannelPost() : $this->getMessage(); $text = $message->getText(true); if ($text && mb_strpos(mb_strtolower($text), 'спасибо') !== false) { $chatId = $message->getChat()->getId(); Request::sendInvoice([ 'chat_id' => $chatId, 'title' => 'Чаевые', 'description' => 'Благодарность сотрудникам', 'payload' => uniqid(), 'provider_token' => \Yii::$app->params['bot_payment_token'], 'currency' => 'RUB', 'prices' => [ [ 'label' => 'Чаевые', 'amount' => 10000, ], ], 'reply_to_message_id' => $message->getMessageId(), 'max_tip_amount' => 100000, 'suggested_tip_amounts' => [10000, 20000, 30000] ]); } return Request::emptyResponse(); } }

Проблемы с Payments 2.0

Payments 2.0 вышел совсем недавно. Главной проблемой стала неспособность платежных систем взаимодействовать с Telegram. Изначально мы выбрали ЮMoney, но он пока умеет работать только с первой версией. Остановились на Stripe, чтобы весь функционал был доступен.

Плюс стоит учитывать, что минимальная сумма пополнения — 100 рублей. И нет возможности настраивать поля в товаре. Например, оставить комментарии.

Настроив бота, добавьте его в ваш чат, выдав функции администратора. Он будет реагировать на ключевую фразу.
Важно: постарайтесь учесть написание такой фразы в разном регистре и даже на латинице. Предусмотрите все варианты, даже самые заковыристые с использованием латинских и кириллических букв. Так вы сделаете бота максимально удобным для пользователей.

Меню бота в десктопной версии Telegram после перехода к оплате Timeweb
Меню бота в десктопной версии Telegram после перехода к оплате Timeweb

Поиграть с ботом можно в нашем чате (реагирует на “Спасибо”). Если вы тоже настраивали бота с использованием Платежей 2.0 — делитесь опытом в комментариях. Об ошибках тоже сообщайте. Будем дополнять пост по мере появления ценных советов и рекомендаций.
Как вам кажется, для покупки каких услуг Платежи 2.0 подходят лучше всего?

3434
реклама
разместить
21 комментарий

Спасибо! Как раз озадачивался)

6

Привет. Как решите заниматься - делитесь подробностями)

1

@Timeweb благодарны, будем тестировать! 🎴🦄

2

Насколько реально зарегистрировать stripe простому смертному в России? И поддерживает ли 2.0 кто-нибудь кроме страйпа?

1

Привет. Можно ориентироваться на статью: https://vc.ru/finance/82502-kak-podklyuchit-stripe-esli-vy-nahodites-ne-v-ssha

Иными словами, нужен посредник. Имеет смысл дождаться появления поддержки от российских платёжных сервисов. Пока что Сбер, ЮMoney, Tranzzo, LiqPay не поддерживают, но очень ждём :) 

3

Поскорее бы работал с другими платёжными системами. Хочу похоже реализовать, и тем более что б ЮMoney был :)

1

Да, с ЮMoney было бы отлично)

2
Раскрывать всегда
Президентство Дональда Тампа может дать иностранным компаниям «повод задержаться в России» — Reuters

Но может сработать и наоборот — компании чаще станут уходить из страны.

Источник: Reuters
77
22
11
11
11
реклама
разместить
В Москве начнут развивать новую сеть магазинов у дома «Фуд сити экспресс» — «Ведомости»

Её запустили на базе продовольственного комплекса «Фуд сити».

Фото «Ведомости» 
1313
77
11
11
11
"Фуд сити экспресс" Борьба с заимствованиями и чистотой языка где? ))
«Теневой» прокат зарубежных новинок принёс российским кинотеатрам 4,3 млрд рублей в 2024 году

Против 4,8 млрд рублей в 2023 году.

Кадр из фильма «Дэдпул и Россомаха», 2024 год
88
33
22
11
Почему он теневой? Это чистой воды пиратство с целью наживы. Таким Макаром я могу поставить теневую копию софта на комп....
Какие функции ИИ-монтажёра Director могут сэкономить время при работе с видео

Нейросеть вырезает и склеивает фрагменты, накладывает субтитры, делает дубляж и цензурирует мат.

77
11
Российские экспортёры столкнулись со сложностями при возврате валютной выручки в страну

Проблемы усугубились после ноября 2024 года, когда Минфин США ввёл санкции против нескольких десятков финансовых компаний.

Источник фото: «Портал малого и среднего предпринимательства Республики Саха»
1111
55
11
11
11
11
11
Что за вранье опять. Президент твердо и четко сказал: санкции нам на пользу.
Как я открыл и продал самую крупную сеть настольных игр в России

Мы открыли 79 магазинов, на нас работало 300 человек, а на пике оборот магазинов составил 700 млн рублей. За 10 лет я видел миллионы прибыли, долги в 150 млн ₽, обороты в 700 млн в год, скандалы с правообладателями и кризисы.

Мосигра
6666
99
11
11
#H2 Автоматизация маркетинга: как мы собрали более 300.000 просмотров для нашей инди-игры

Привет, меня зовут Лев, я владелец студии разработки Keyron. Сегодня я расскажу о том, как мне удалось продумать стратегию взаимодействия с лидом. В данном контексте моим лидом являлся ютюбер с большой(ну или малой) аудиторией.

#H2 Автоматизация маркетинга: как мы собрали более 300.000 просмотров для нашей инди-игры
2626
44
22
11
11
11
С 1 января любой гражданин РФ может получить цифровую профессию бесплатно. Для участия достаточно заполнить анкету и пройти тест.
С 1 января любой гражданин РФ может получить цифровую профессию бесплатно. Для участия достаточно заполнить анкету и пройти тест.
22
22
[]