Telegram机器人不仅仅是聊天工具,更是强大的业务平台。通过接入官方支付功能,你可以让机器人实现付费服务、会员订阅、数字商品销售等高级玩法。本文将带你从零开始,完整实现Telegram机器人支付功能接入,每一步都配有详细说明和代码示例。
一、Telegram机器人支付功能概述
Telegram Bot API 提供了一套完整的支付解决方案,允许机器人向用户发送发票(Invoice),用户可直接通过 Telegram 内置支付系统完成付款。支付过程由 Telegram 处理,机器人只需与 Bot API 交互,无需直接触碰敏感支付信息。目前支持的付款提供商包括 Stripe、PayPal 等,其中 Stripe 是大多数开发者的首选。
二、准备工作:创建机器人并获取密钥
在接入支付前,你需要完成以下基础设置:
- 在 Telegram 中搜索 @BotFather,输入
/newbot创建一个新机器人,获取 API Token。 - 向 BotFather 发送
/mybots,选择你的机器人,进入 Bot Settings → Payments。 - 根据提示选择付款提供商(如 Stripe),并绑定你的商户账户。完成后,BotFather 会提供 Provider Token(测试和正式环境各一个)。
- 将 API Token 和 Provider Token 妥善保存,后续代码中需要用到。
三、创建支付 Invoice
要发起支付,机器人需通过 sendInvoice 方法向用户发送一张“发票”。发票包含商品信息、价格和货币单位。核心参数如下:
chat_id:接收发票的用户或群组 ID。title和description:商品名称和描述。payload:自定义的字符串,用于标识订单,在支付成功回调中原样返回。provider_token:你从 BotFather 获取的 Provider Token。currency:ISO 4217 货币代码,如 USD、CNY 等。prices:数组,每个元素包含label和amount(以最小货币单位计,如分为单位)。
示例代码(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)
五、测试支付流程
在正式上线前,务必使用测试支付模式:
- 在 BotFather 中获取 Test Provider Token,并在代码中替换。
- 使用 Telegram 内置的测试支付卡片(号码
4242 4242 4242 4242,任意未来日期和 CVC)完成支付。 - 确认回调是否正常、订单状态是否正确更新。
测试通过后,切换为正式 Provider Token,并设置 Webhook 即可投入使用。
六、常见问题与注意事项
- 货币支持:Telegram 支付支持多种货币,但人民币(CNY)受部分地区限制,请确认你的商户账户是否支持。
- 退款:退款需通过付款提供商后台操作,Telegram 不提供退款 API。
- 税费:价格单位为最小货币单位,如分为单位,不包含税费时请在商品描述中注明。
- 安全:不要将 Provider Token 暴露在前端,所有请求走服务器端。
总结
通过本文,你已掌握 Telegram 机器人支付功能的完整接入流程。从 BotFather 配置到代码实现,再到测试上线,只需简单几步,就能让机器人具备收款能力。支付功能为机器人商业化打开了无限可能,你可以结合自己的业务场景,打造付费订阅、虚拟商品等高级玩法。