在Telegram生态中,机器人早已从简单的自动回复演变为强大的商业工具。而支付功能的接入,是让机器人真正实现商业闭环的关键一步。很多开发者以为支付接口高不可攀,实际上Telegram官方提供了相对完善的Payment API,只是国内开发者需要绕一些弯。本文将基于最新API文档,从零开始讲解Telegram机器人如何实现支付接口接入,涵盖官方通道、国内替代方案以及真实可运行的代码片段。
一、Telegram支付接口的基本原理
Telegram的支付体系由三端组成:用户端(Telegram客户端内置支付界面)、机器人端(你的Bot通过API发起收款)、支付服务商端(如Stripe、YooMoney等)。它的工作流程如下:
- 用户向机器人发送购买指令(如
/buy)。 - 机器人调用
sendInvoice方法,附上商品信息、价格、货币、支付服务商等参数。 - Telegram客户端原生展示一张“发票”卡片,用户点击“支付”后,会跳转到支付服务商的安全支付页面(或直接在Telegram内完成支付,取决于服务商)。
- 支付成功后,服务商回调Telegram,Telegram再向机器人服务器发送
pre_checkout_query和successful_payment更新。 - 机器人确认事项后,交付虚拟商品或服务。
这种设计让支付过程保持在Telegram体验内,同时把复杂的合规和风控交给了支付服务商,大大降低了开发门槛。
二、先决条件:如何成为“收款人”
要使用官方支付功能,你的Bot需要先通过@BotFather绑定至少一个支付服务商。这是很多国内开发者卡住的第一关。方法如下:
- 向
@BotFather发送/mybots,选择你的机器人。 - 点击Payments,然后根据提示选择支持你所在国家的支付服务商(如Stripe、YooMoney、Wise等)。
- 按照服务商的要求填写商户信息,并获取对应的provider_token(服务商给商户的API密钥)。
- 将
provider_token保存好,后续调用API时要用到。
注意:不同服务商支持的货币和适用地区不同。如果你没有国外公司或银行账户,直接用官方渠道会非常困难。
三、直接使用官方Bot API集成支付(代码示例)
假设你已成功获取provider_token,下面以Python的python-telegram-bot库为例,展示一个最简支付流程。
3.1 发送发票(sendInvoice)
from telegram.ext import Updater, CommandHandler
import json
TOKEN = '你的机器人TOKEN'
PROVIDER_TOKEN = '你的服务商TOKEN'
def buy(update, context):
chat_id = update.message.chat_id
title = "高级会员(1个月)"
description = "解锁所有高级功能"
payload = "custom-payload-001" # 你的业务标识,可用于对账
currency = "USD"
prices = [{"label": "年费会员", "amount": 999}] # 金额单位是“分”
context.bot.send_invoice(
chat_id,
title,
description,
payload,
PROVIDER_TOKEN,
currency,
prices,
start_parameter="start_invoice"
)
3.2 处理PreCheckoutQuery
在支付流程中,Telegram会先发送pre_checkout_query,机器人必须尽快回复确认,否则支付会被放弃。一般可直接通过。
def pre_checkout(update, context):
query = update.pre_checkout_query
query.answer(ok=True) # 若检查有问题,可填入错误信息拒绝收款
3.3 处理成功支付消息
def successful_payment(update, context):
payment = update.message.successful_payment
payload = payment.invoice_payload
# 根据payload查找订单,发放虚拟物品,比如将用户拉入VIP群
update.message.reply_text("支付成功!感谢购买。")
3.4 注册处理器
updater = Updater(TOKEN)
dp = updater.dispatcher
dp.add_handler(CommandHandler('buy', buy))
dp.add_handler(PreCheckoutQueryHandler(pre_checkout))
dp.add_handler(MessageHandler(Filters.successful_payment, successful_payment))
updater.start_polling()
updater.idle()
这段代码已经可以跑通官方支付流程了。但真正的难点在于获取合法的provider_token,国内开发者往往卡在这一步。
四、国内使用Telegram支付的替代方案:第三方支付机器人
由于Stripe等主流支付商不接受中国个人注册,许多开发者转向了“第三方支付网关”方案。其核心思路是:让机器人不直接调用官方Payment API,而是通过自定义界面(如内联键盘)独立生成支付链接,引导用户去普通网页完成支付,然后再通过回调或主动查询确认结果。
常见的实现方式有:
- 使用国内为主的支持Telegram的支付中间服务商,如“TelePay”、“币支付”等,它们提供类似Stripe的API,但支持支付宝、微信等本地支付方式。
- 自建支付页面,让你的机器人发送一个链接到你的网站,网站展示二维码,用户扫码支付后,网站回调你的后端,后端再通过Telegram API给用户发消息。
这种模式不依赖官方“收款人”资格,适合绝大多数国内开发者。不过要注意,因为支付过程发生在Telegram之外,用户体验和信任度不如官方原生支付,需要自行保证资金安全和通知及时。
五、使用第三方支付机器人快速接入(示例)
假设你选择了一个提供Telegram支付API的中间服务商,通常流程是:
- 在服务商官网注册并创建应用,获取
app_id和secret。 - 在机器人代码中,调用服务商API创建一笔订单,得到
pay_url。 - 机器人将这个
pay_url以“打开网页”或“内联键盘按钮”的形式发给用户。 - 用户点击后在浏览器中完成支付。
- 服务商通过Webhook通知你的服务器支付结果。
- 服务器验证签名后,调用Telegram Bot API给用户发送成功消息并发放服务。
下面给出一个伪代码思路(以Python requests为例):
import requests
def create_order(user_id, amount):
# 调用支付服务商的创建订单API
resp = requests.post('https://api.pay-provider.com/v1/orders', json={
'app_id': your_app_id,
'user_id': user_id,
'amount': amount,
'callback_url': 'https://你的服务器/callback'
})
return resp.json()['pay_url']
然后在回调路由中验签并通知用户。完整方案会根据你选择的服务商不同而有差异,但思想是一致的。
六、支付机器人开发中的关键注意事项
- 安全第一:回调接口必须验证签名,防止伪造支付成功通知。使用HTTPS,并妥善保管你的Bot Token和商户密钥。
- 幂等性:处理支付回调时要考虑重复通知,确保同一个订单只被处理一次(比如用订单号做去重)。
- 汇率与定价:如果面向全球用户,建议使用USD或EUR结算,或实时获取汇率展示。官方支付只支持特定货币和可选服务商。
- 商品交收:虚拟商品(如账号激活、群组邀请)应自动化实现,实物商品则需对接物流系统。
- 合规避坑:Telegram支付不允许用于非法商品,如博彩、毒品等;同时要注意你所在国家和服务商所在地的法律法规。
- 余额与提现:通过第三方支付,你需要注意服务商的结算周期和手续费,最好提前计算成本。
七、常见问题解答
Q1:官方支付接口必须要国外银行卡吗?
Stripe等主流服务商确实不支持中国大陆持卡人注册为企业用户。但如果你有香港或海外公司账户,或者使用虚拟卡服务(如Depay)尝试,可能会有一定成功率,但存在风控风险。更稳妥的方法是使用第三方支付中间平台。
Q2:机器人无法发送发票提示"PROVIDER_TOKEN_INVALID"?
很大概率是provider_token填错或尚未绑定成功。请重新通过@BotFather绑定支付服务商,并检查是否属于对方支持的货币。
Q3:用户支付成功但机器人没有收到回调?
先检查Webhook是否配置正确(对官方支付来说,Telegram会直接推送successful_payment更新;对第三方平台,看自己的后台日志)。另外确认你的服务器能正常访问Telegram API网络。
Q4:有没有不用翻墙也能用的支付方案?
这里说的“用”是机器人服务器访问Telegram API。推荐使用海外云服务器部署Bot,这样调用API顺畅,同时国内用户也能正常访问Bot。
八、总结
Telegram机器人支付接口接入,本质上是“API调用”的艺术。无论选择官方Payment API还是第三方支付方案,核心逻辑都是:生成订单、引导付款、接收回调、交付服务。官方渠道虽然整洁但门槛较高;第三方渠道灵活但需要更细致的工程处理。建议从一个小额虚拟商品开始测试,跑通后再扩展。希望本教程能帮你避开常见的坑,祝你早日搭建出能赚钱的Telegram机器人!