在Telegram生态中,机器人(Bot)早已不再局限于自动回复和群组管理,越来越多的开发者希望通过机器人实现商业变现。而接入支付接口,是让机器人完成“用户下单-在线付款-订单处理”闭环的关键一步。本文将带你从零开始,为Telegram机器人接入官方Bot Payments API,实现稳定高效的支付订单处理。
为什么选择Telegram Bot Payments API?
Telegram原生支付功能支持Stripe、PayPal等主流支付提供商,用户无需跳出聊天窗口即可完成付款,体验极其流畅。对开发者而言,官方API封装了复杂的支付流程,你只需聚焦于订单逻辑和发货处理。
前置准备:Token与支付Provider
在开始编码前,需要完成以下准备工作:
- 通过BotFather创建机器人并获取
API Token。 - 选择一个受支持的支付服务商(如Stripe)并完成商户账号注册。
- 在BotFather中为机器人设置支付提供商。发送
/setpayments并选择对应服务商,绑定你的商户账号。
实现支付发票(Invoice)的创建
支付的核心是创建一张发票。每次用户请求购买,你都需要调用 sendInvoice 方法。以下是一个Python代码示例:
bot.send_invoice(
chat_id,
title="高级会员",
description="一个月高级会员权益",
payload="order_12345",
provider_token=PROVIDER_TOKEN,
currency="USD",
prices=[LabeledPrice(label="高级会员", amount=990)] # 金额单位为分
)
其中 payload 是自定义订单标识,回调时会原样返回,用于后续关联订单。
处理支付回调:确认订单状态
用户完成付款后,Telegram会发送预检查询和最终确认。你需要监听 PreCheckoutQuery 和 SuccessfulPayment:
- PreCheckoutQuery:在用户确认支付前触发。正常情况下直接调用
answerPreCheckoutQuery(ok=True)即可;若你需要校验库存,可在此处拒绝。 - SuccessfulPayment:支付成功后推送。此时更新数据库中的订单状态,并给用户发送发货通知。
用户订单管理:数据库设计与状态流转
为了支撑订单查询和售后,建议在数据库中设计订单表。关键字段包括:
order_id, user_id, payload, amount, currency, status,
payment_date, product_id, shipping_address
订单状态建议包含:待支付、已支付、待发货、已完成、已退款。收到SuccessfulPayment回调后,将状态更新为“已支付”,并触发后续流程。
安全与异常处理
在生产环境中,必须注意以下几点:
- 使用HTTPS Webhook,并验证请求确实来自Telegram(通过
secret_token等机制)。 - 对
payload进行签名或随机化,防止伪造订单。 - 在发货前再次校验订单金额与实际商品价格是否一致。
- 妥善处理支付超时、重复回调等情况,保证订单幂等性。
总结
接入Telegram支付接口并非难事,但涉及商户资质、API集成和订单逻辑多方面的协同。本文为你梳理了从配置到订单处理的全链路,希望帮你少走弯路。你可以在此基础上扩展退款、优惠券、分销等高级功能,把机器人变成真正的“收银台”。