Telegram Bot支付API无法处理pre_checkout_query问题求助
解决Telebot中pre_checkout_query无法处理导致付款失败的问题
你的付款报错核心原因是没有正确注册预校验查询处理器和成功付款处理器,Telebot无法识别对应的处理逻辑,导致付款流程中断。以下是具体问题点和修复方案:
问题点与修复
预校验处理器未注册:
preCheckoutHandler函数没有绑定pre_checkout_query_handler装饰器,Telebot不知道这个函数用来处理预校验请求。
修复:给函数添加@tb.pre_checkout_query_handler()装饰器。成功付款处理器写法错误:
successPayment函数把装饰器写在了函数内部,属于用法错误,而且没有实际处理逻辑。
修复:用@tb.message_handler(content_types=['successful_payment'])装饰器修饰函数,并补充处理代码(比如给用户发送付款成功通知)。未定义金额变量:代码中的
PRICE变量未赋值,需要替换为实际金额(注意:金额单位是对应货币的最小单位,比如RUB的话,100代表1卢布)。
修复后的完整代码
import telebot from telebot import types # 初始化Bot实例(替换为你的Bot Token) tb = telebot.TeleBot("YOUR_BOT_TOKEN") # 定义付款金额(示例:100 RUB = 1卢布) PRICE = 100 @tb.message_handler(commands=['pay']) def pay(message): tb.send_invoice( message.chat.id, title='Test title', description='Test description', invoice_payload='test', provider_token='xxx:TEST:xxx', currency='RUB', prices=[types.LabeledPrice('RUB', PRICE)] ) # 注册预校验查询处理器 @tb.pre_checkout_query_handler() def preCheckoutHandler(preCheckoutQuery: types.PreCheckoutQuery): tb.answer_pre_checkout_query(preCheckoutQuery.id, ok=True) # 注册成功付款处理器 @tb.message_handler(content_types=['successful_payment']) def successPayment(message): # 添加付款成功后的处理逻辑,比如发送通知 tb.send_message(message.chat.id, "付款成功!感谢支持~") # 启动Bot轮询 tb.polling(none_stop=True)
补充说明
- 确保
provider_token是支付平台提供的有效测试/正式token,测试环境需使用测试token。 - 必须调用
tb.polling()启动Bot的消息监听,否则无法接收和处理Telegram的请求。
内容的提问来源于stack exchange,提问作者K. Sergey
相关产品推荐
相关产品推荐

