Загрузка...

Как принимать оплату Telegram Stars в ботах

Тема в разделе Статьи создана пользователем CursorVPN 29 авг 2024. 1336 просмотров

  1. CursorVPN
    CursorVPN Автор темы 29 авг 2024 7 19 янв 2024
    "Telegram Stars" или "Звёзды" являются внутренней валютой Telegram за которую можно приобретать товары или услуги, отправлять пожертвования и т.п. Сейчас мы расскажем об интеграции приема платежей в данной валюте на примере Telegram бота, написанного на Nodejs и библиотеке Telegraf.

    [IMG]

    [1] Создание платежа

    Для начала сохраните платеж пользователя в базе данных. Он должен иметь следующие поля:
    JS
    amountInStars: {
    type: Number,
    required: true,
    },
    telegramPaymentChargeId: {
    type: String,
    },
    providerPaymentChargeId: {
    type: String,
    }
    amountInStars - сумма платежа в валюте Telegram Stars.
    telegramPaymentChargeId и providerPaymentChargeId - это поля, которые пригодятся нам после того, как пользователь произведет оплату.

    Для выставления платежа в валюте Stars вызовете асинхронный метод sendInvoice у контекста Telegraf.

    JS
    await ctx.sendInvoice({
    title: Пополнение баланса на ${amount} RUB,
    description: Пополнение баланса в боте на сумму ${amount} рублей,
    payload: ${payment._id},
    currency: 'XTR',
    prices: [{ label: 'XTR', amount: amountInTelegramStars }],
    provider_token: '',
    });
    title и description - отвечают за визуальное отображение информации о платеже
    payload - номер заказа в вашей системе
    currency - используйте значение "XTR" для валюты Telegram Stars
    prices - значения суммы платежа и валюты
    provider_token - для валюты Telegram Stars в качестве значения передайте пустую строку

    [2] Проверка перед оплатой платежа пользователем

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

    JS
    bot.on('pre_checkout_query', validateTelegramStarsPayment);
    Нам понадобится поле invoice_payload, содержащие номер заказа для последующей проверки.

    JS
    const preCheckoutQuery = ctx.update.pre_checkout_query;
    const paymentId = preCheckoutQuery.invoice_payload;
    const paymentAmount = preCheckoutQuery.total_amount;
    Мы делали следующие проверки:
    1) Заказ с данным id существует
    2) Заказ с данным id не оплачен на данный момент
    3) paymentAmount совпадает с суммой платежа в базе данных
    Если вы конвертируете рубли или другую фиатную валюту в Telegram Stars, стоит добавить проверку на то, что счет создан не позднее определенного времени. К примеру, если счет создан более 24 часов, курс мог измениться, что сделает его неактуальным. В таком случае, можно отозвать данный счет следующим образом:

    JS
    await ctx.answerPreCheckoutQuery(false, 'Счет устарел');
    Если же все хорошо, одобряем оплату счета:

    JS
    await ctx.answerPreCheckoutQuery(true);
    [3] Зачисляем платеж

    Когда Звезды списываются со счета пользователя и передаются вам, тем самым производя оплату выставленного счета, Telegram отправляет событие successful_payment.

    JS
    bot.on('successful_payment', handleSuccessefulTelegramStarsPayment);
    Нам понадобятся следующие параметры:

    JS
    const {
    invoice_payload: invoicePayload,
    telegram_payment_charge_id: telegramPaymentChargeId,
    provider_payment_charge_id: providerPaymentChargeId,
    } = ctx.message.successful_payment;
    С invoice_payload, содержащим номер заказа в нашем базе мы уже знакомы. Новые поля telegram_payment_charge_id и provider_payment_charge_id мы также должны сохранить в нашей базе данных. Это требование Telegram. В случае спорной ситуации по платежу или chargeback'а они будут нужны.
    Далее можно сделать повторную проверку на то, что счет существует, он не был оплачен и т.п. После чего следует реализация логика выдачи товара, зачисления средств на баланс или другого действия.

    [4] Последний момент

    После завершения реализации вышеуказанных действий, добавляем ответ бота на команду /paysupport.

    JS
    bot.command('paysupport', telegramPaysupportCommand);


    Это тоже является требованием от Telegram. Мы в ответ на эту команду просто отдаем текст с контактами поддержки бота и призывом обратиться туда в случае вопросов, касающихся платежей Telegram Stars.

    Вот и всё. В реализации функционала приема платежей в валюте Telegram Stars нет сложных моментов. Больше всего умственной работы тут занимает то, как переводить фиатные валюты в Звезды. К примеру, товар стоит 100 рублей, как высчитать его стоимость в Stars? Или как выводить Stars, учитывая их hold после получения и комиссию, достигающую 30%.

    От себя добавим, что не стоить спешить с переходом на прием Telegram Stars. Чувствуется, что Telegram еще есть над чем поработать. Подкупает тут то, что пользователи со всего мира могут легко покупать Звезды со своих банковских карт. В том числе и выпущенных в РФ.

    Будет интересно почитать тех, кто уже давно использует прием платежей в Telegram Stars и что они думают по поводу всего этого.

    P.S. Статья для питонистов - https://habr.com/ru/articles/821415/
     
    Этот материал оказался полезным?
    Вы можете отблагодарить автора темы путем перевода средств на баланс
    Отблагодарить автора
  2. B_O_U_E
    B_O_U_E 23 сен 2024 11 19 дек 2016
    мля какаята сложная и муторная штука
     
  3. LifeFounder
    LifeFounder 23 сен 2024 ) 20 145 25 сен 2018
    Какая комиссия? Как долго вывод? Есть ли задержки?
     
    1. matBast0s
      LifeFounder, комиссия 0, если выводить с бота, вывод 1 звезда = 1 рубль, звёзды для вывода становятся доступны спустя 21 день с момента поступления, вывод моментальный, от 1000 звёзд
Top
Загрузка...