Telegram 中文编辑部 · 每日更新
最新专题问答

Telegram机器人支付功能接入全攻略:从配置支付提供商到实现订单闭环

想为 Telegram 机器人接入支付功能,实现自动收款?本文从 BotFather 配置、支付令牌获取到 sendInvoice 方法调用,再到支付回调处理,一步步教你完成支付闭环,还包含测试与上线注意事项。

阅读提示涉及账号和安全设置时,请边阅读边核对当前设备界面。

在 Telegram 生态中,机器人(Bot)早已不只是聊天工具,更是商业变现的重要入口。通过 Telegram 官方的支付 API,开发者可以为机器人接入 Stripe 等支付服务商,让用户直接在聊天窗口内完成付款,适用于付费内容、会员订阅、虚拟商品销售等场景。本文将详细介绍 Telegram 机器人支付功能的接入步骤,从零开始搭建一个完整的收款流程,帮助你快速实现订单闭环。

一、支付功能接入前的准备

在开始接入支付之前,你需要确认以下条件已经满足:

  1. 一个已经创建好的 Telegram 机器人(通过 @BotFather 获取 Token)。
  2. 一个支持 Telegram 支付服务的支付服务商账号,目前官方支持的全球服务商包括 Stripe、Payment Form、YooMoney 等,中国区开发者通常使用 Stripe。
  3. 具备基本的 Bot API 调用能力,例如能使用 sendInvoice 方法发送 HTTP 请求。

如果你的机器人还没有创建,先通过 BotFather 完成创建并记录 Token,后续步骤将依赖这个身份凭证。

二、BotFather 开启支付功能

支付功能不是默认开放的,需要让 BotFather 将你的机器人设置为支持支付。具体操作如下:

  1. 在 Telegram 中找到 @BotFather,发送命令 /mybots,选择需要开启支付的机器人。
  2. 点击 Bot Settings,选择 Payments
  3. 根据提示选择支付服务商(例如 Stripe),并输入你在服务商后台获得的付款令牌(Provider Token)。
  4. 完成后,BotFather 会返回成功信息,表示机器人已启用支付能力。

注意:不同支付服务商对商户资质有不同要求,例如 Stripe 需要绑定银行账户并验证企业或个人身份,请提前准备好相关资料。

三、获取支付提供商令牌

在 BotFather 中开通支付时,你需要一个“提供商令牌”(Provider Token)。这个令牌由支付服务商颁发,用于关联订单和资金流转。以 Stripe 为例:

  1. 登录 Stripe 管理后台,创建或选择一个现有商户账号。
  2. 进入“开发人员”菜单,在“API 密钥”页面找到密钥。
  3. Telegram 要求使用以 pk_livepk_test 开头的可发布密钥,但 BotFather 需要的是服务端密钥(即 sk_livesk_test),请注意区分。
  4. 将对应的密钥粘贴到 BotFather 的支付设置中,完成绑定。

强烈建议开发阶段使用测试密钥(sk_test),避免产生真实资金交易,测试完成后再切换为正式密钥。

四、使用 sendInvoice 发送收款请求

支付功能开启后,机器人就可以向用户发送“发票”(Invoice)了。在 Bot API 中,通过 sendInvoice 方法即可完成。一个典型的请求参数如下:

POST /bot<token>/sendInvoice
Content-Type: application/json

{
  "chat_id": 123456789,
  "title": "VIP会员月卡",
  "description": "解锁全部高级功能,有效期30天",
  "payload": "order_10001",
  "provider_token": "YOUR_PROVIDER_TOKEN",
  "currency": "CNY",
  "prices": [
    { "label": "VIP会员", "amount": 9900 }
  ]
}

其中几个关键字段的含义:

  • titledescription:显示给用户的商品名称和详情。
  • payload:你自己的订单号或业务标识,支付成功后原样返回,用于关联订单。
  • provider_token:在 BotFather 中绑定的支付服务商令牌。
  • currency:使用 ISO 4217 货币代码,例如 CNY、USD。
  • amount:以最小货币单位计费,例如人民币分为单位,9900 即 99 元。

请求成功后会返回一个 Invoice 消息,用户点击“支付”按钮即可拉起付款界面。

五、处理支付回调:pre_checkout_query 与 successful_payment

用户完成支付前,Telegram 会向机器人发送一个 pre_checkout_query 更新(类似确认订单),机器人必须在 10 秒内调用 answerPreCheckoutQuery 方法确认或拒绝。如果确认无误,用户支付成功后,机器人会收到一个包含 successful_payment 字段的消息。处理流程如下:

  1. 在你的 Webhook 或轮询逻辑中,检测到 pre_checkout_query 更新。
  2. 查询本地数据库,验证该订单(payload)是否有效、价格是否匹配。
  3. 调用 answerPreCheckoutQuery,并传入参数 pre_checkout_query_idok=true;如果订单异常,设 ok=false 并附上错误说明。
  4. 当收到包含 successful_payment 的消息时,即可为用户开通相应服务、发货或更新会员状态。

示例代码(Python 伪代码):

def handle_update(update):
    if 'pre_checkout_query' in update:
        query = update['pre_checkout_query']
        # 校验订单
        ok = validate_order(query['payload'], query['total_amount'])
        bot.answer_pre_checkout_query(query['id'], ok=ok, error_message="订单信息有误" if not ok else None)
    elif 'message' in update and 'successful_payment' in update['message']:
        payment = update['message']['successful_payment']
        activate_service(payment['payload'])

六、测试与上线注意事项

在正式发布前,务必进行完整的测试。这里整理了一些关键注意点:

  • 使用 sk_test 测试密钥时,只能使用 Stripe 提供的测试卡号,例如 4242 4242 4242 4242,任何金额都可支付成功。
  • 正式上线前,务必在 BotFather 中将支付令牌切换为 sk_live,否则真实用户无法付款。
  • 设置好 Webhook,并确保 callback 地址为 HTTPS,且证书有效。
  • 及时处理重复支付或掉单问题:利用 payload 中的唯一订单号做幂等操作。
  • 关注 Telegram Bot API 文档中的 Payment 章节,因为接口字段可能会随版本更新而变化。

总结

Telegram 机器人支付功能的接入并不复杂,核心就是三件事:通过 BotFather 开通、调用 sendInvoice 发送发票、处理支付回调。按照本文的步骤,你就能在自己的机器人中加入支付能力,实现自动收款。结合 Telegram 庞大的用户群,这无疑是变现的一条捷径。如果你在接入过程中遇到问题,欢迎查阅官方文档,或在评论区留言交流。

FAQ

Telegram 核心功能

常见问题