Telegram bot支付成功后如何将Pay按钮替换为Receipt收据按钮
你遗漏了两个核心配置逻辑:
- 调用
sendInvoice接口时如果传入了自定义reply_markup参数,Telegram官方的自动按钮转换逻辑不会生效。只要你不手动配置该参数,平台会自动生成标准Pay按钮,私聊场景下用户完成支付后,客户端会自动将该按钮替换为收据按钮,不需要你做额外操作。 - 确认你处理
pre_checkout_query回调时,在10秒超时限制内正确调用了answerPreCheckoutQuery方法且ok参数设为true,否则支付流程的后续UI更新会被中断。
如果你有特殊需求必须自定义发票的按钮布局,可以在收到successful_payment回调时,主动调用editMessageReplyMarkup方法替换原发票消息的按钮,示例代码如下:
// 注意需要在调用sendInvoice时就将返回的发票消息ID和对应支付payload绑定存储 const invoiceMsgId = 你存储的对应发票消息ID; const editUrl = `https://api.telegram.org/bot${process.env.TELEGRAM_BOT_TOKEN}/editMessageReplyMarkup`; await axios.get(editUrl, { params: { chat_id: chatID, message_id: invoiceMsgId, reply_markup: JSON.stringify({ inline_keyboard: [ [{ text: 'RECEIPT', callback_data: `receipt_${invoiceMsgId}` }] ] }) } }); // 后续继续处理发送支付成功提示、交付服务等逻辑
内容的提问来源于stack exchange,提问作者druskacik
相关产品推荐
相关产品推荐

