洞察 · 方法 · 决策 · 实践
专题文章

Telegram机器人支付功能接入完全指南:从配置到上线

本文详细介绍如何在Telegram机器人中接入官方支付功能,涵盖BotFather设置、付款提供商绑定、Invoice创建、支付回调处理及代码实例,帮助开发者快速实现付费内容、会员订阅等场景。

阅读提示建议先浏览文章结构,再按需深入阅读具体段落。

Telegram机器人不仅仅是聊天工具,更是强大的业务平台。通过接入官方支付功能,你可以让机器人实现付费服务、会员订阅、数字商品销售等高级玩法。本文将带你从零开始,完整实现Telegram机器人支付功能接入,每一步都配有详细说明和代码示例。

一、Telegram机器人支付功能概述

Telegram Bot API 提供了一套完整的支付解决方案,允许机器人向用户发送发票(Invoice),用户可直接通过 Telegram 内置支付系统完成付款。支付过程由 Telegram 处理,机器人只需与 Bot API 交互,无需直接触碰敏感支付信息。目前支持的付款提供商包括 Stripe、PayPal 等,其中 Stripe 是大多数开发者的首选。

二、准备工作:创建机器人并获取密钥

在接入支付前,你需要完成以下基础设置:

  1. 在 Telegram 中搜索 @BotFather,输入 /newbot 创建一个新机器人,获取 API Token
  2. 向 BotFather 发送 /mybots,选择你的机器人,进入 Bot SettingsPayments
  3. 根据提示选择付款提供商(如 Stripe),并绑定你的商户账户。完成后,BotFather 会提供 Provider Token(测试和正式环境各一个)。
  4. API TokenProvider Token 妥善保存,后续代码中需要用到。

三、创建支付 Invoice

要发起支付,机器人需通过 sendInvoice 方法向用户发送一张“发票”。发票包含商品信息、价格和货币单位。核心参数如下:

  • chat_id:接收发票的用户或群组 ID。
  • titledescription:商品名称和描述。
  • payload:自定义的字符串,用于标识订单,在支付成功回调中原样返回。
  • provider_token:你从 BotFather 获取的 Provider Token。
  • currency:ISO 4217 货币代码,如 USD、CNY 等。
  • prices:数组,每个元素包含 labelamount(以最小货币单位计,如分为单位)。

示例代码(Python 使用 requests):

import requests

bot_token = '你的_API_Token'
provider_token = '你的_Provider_Token'
chat_id = '用户ID'

url = f'https://api.telegram.org/bot/sendInvoice'
payload = {
    'chat_id': chat_id,
    'title': '高级会员月卡',
    'description': '开通后即可解锁全部高级功能',
    'payload': 'unique_order_id',
    'provider_token': provider_token,
    'currency': 'CNY',
    'prices': [{'label': '月卡', 'amount': 1990}]  # 19.90元,以分为单位
}

response = requests.post(url, json=payload)
print(response.json())

四、处理支付回调和成功消息

支付流程中,Telegram 会发送两个关键更新:

  • pre_checkout_query:用户点击支付后会先触发此回调,机器人必须在约10秒内调用 answerPreCheckoutQuery 确认(或拒绝)订单。
  • successful_payment:支付成功后,机器人会收到一条包含支付信息(如总价、货币、payload)的消息,此时应给用户发货或开通权限。

以下是用 Flask 处理 Webhook 的示例:

from flask import Flask, request
import requests

app = Flask(__name__)

bot_token = '你的_API_Token'

def send_message(chat_id, text):
    url = f'https://api.telegram.org/bot/sendMessage'
    requests.post(url, json={'chat_id': chat_id, 'text': text})

def answer_pre_checkout(pre_checkout_query_id, ok=True):
    url = f'https://api.telegram.org/bot/answerPreCheckoutQuery'
    requests.post(url, json={'pre_checkout_query_id': pre_checkout_query_id, 'ok': ok})

@app.route('/webhook', methods=['POST'])
def webhook():
    update = request.get_json()
    if 'pre_checkout_query' in update:
        # 可以在此验证订单信息,通过则 ok=True
        answer_pre_checkout(update['pre_checkout_query']['id'])
    elif 'message' in update:
        msg = update['message']
        if 'successful_payment' in msg:
            # 支付成功,处理业务逻辑
            order_id = msg['successful_payment']['invoice_payload']
            send_message(msg['chat']['id'], f'支付成功!订单号:')
    return 'OK'

if __name__ == '__main__':
    app.run(port=5000)

五、测试支付流程

在正式上线前,务必使用测试支付模式:

  1. 在 BotFather 中获取 Test Provider Token,并在代码中替换。
  2. 使用 Telegram 内置的测试支付卡片(号码 4242 4242 4242 4242,任意未来日期和 CVC)完成支付。
  3. 确认回调是否正常、订单状态是否正确更新。

测试通过后,切换为正式 Provider Token,并设置 Webhook 即可投入使用。

六、常见问题与注意事项

  • 货币支持:Telegram 支付支持多种货币,但人民币(CNY)受部分地区限制,请确认你的商户账户是否支持。
  • 退款:退款需通过付款提供商后台操作,Telegram 不提供退款 API。
  • 税费:价格单位为最小货币单位,如分为单位,不包含税费时请在商品描述中注明。
  • 安全:不要将 Provider Token 暴露在前端,所有请求走服务器端。

总结

通过本文,你已掌握 Telegram 机器人支付功能的完整接入流程。从 BotFather 配置到代码实现,再到测试上线,只需简单几步,就能让机器人具备收款能力。支付功能为机器人商业化打开了无限可能,你可以结合自己的业务场景,打造付费订阅、虚拟商品等高级玩法。

FAQ

新手指南:快速开始使用 Telegram

常见问题

Telegram机器人支付功能要求哪些前提条件?

需要有合法的营业执照或商户账户(用于付款提供商如Stripe),并创建Telegram机器人和获取Provider Token。另外,机器人必须能处理Webhook更新。

如何处理支付成功后的用户权限分配?

在收到successful_payment更新后,根据invoice_payload字段匹配订单,然后调用相应接口(如增加用户会员时长、发送下载链接等)完成发货。

测试支付时使用什么卡号?

使用Stripe测试卡号4242 4242 4242 4242,任意未来日期和任意三位CVC即可成功支付。注意必须使用测试模式下的Provider Token。