我有一个处理付款的 Telegram 机器人。付款按原样进行,但是,成功付款后我无法出示收据。
当前的行为是:
- 用户点击支付按钮,填写卡信息并支付服务费用
- 处理付款并发送有关成功交易的消息
- 此时,我想将 PAY 按钮更改为 RECEIPT 按钮
屏幕截图上的当前行为:
期望的行为:
所需的行为是从与@ShopBot的聊天中截取的,在 Telegram 文档中将其作为测试工具提及。
我可以在 Telegram 文档中找到关于如何处理“收据”的唯一提及是https://core.telegram.org/bots/payments上的这两句话:
如果发票消息是在与@merchantbot 的聊天中发送的,它会成为用户界面中的收据——他们可以随时打开此收据并查看交易的所有详细信息。
如果消息被发送到任何其他聊天室,支付按钮仍然存在并且可以再次使用。是否实际接受多笔付款取决于商家机器人。
但是,我不明白如何在代码中实现这一点。据我所知,发票消息已发送到与我的机器人聊天(如第一句所示),因此它应该成为收据。
该机器人是用 Node.js 编写的,并使用 webhook 来处理消息。对这个问题很重要的 webhook 的代码部分:
router.route('/')
.post(async (req, res) => {
try {
// if pre_checkout_query is defined, there was an attempt for payment
if (req.body.pre_checkout_query) {
// use answerPreCheckoutQuery Telegram method
...
}
const message = req.body.message || req.body.edited_message;
// this means user's payment was successful
if (message.successful_payment) {
// success, deliver goods or services
// send message about successful payment
...
}
} catch (err) {
...
}
})
发票是用sendInvoice
这样的方法发送的:
const url = `https://api.telegram.org/bot${process.env.TELEGRAM_BOT_TOKEN}/sendInvoice`;
const response = await axios.get(url, {
params: {
chat_id: chatID,
title: 'SOME TITLE',
description: 'some decription',
payload: 'SOME-PAYLOAD',
provider_token: process.env.STRIPE_API_TOKEN,
currency: 'EUR',
prices: JSON.stringify([
{
label: 'some label',
amount: 200,
},
]),
},
});
API 中用于处理付款的两种方法是sendInvoice
,answerPreCheckoutQuery
但它们都不包含任何可能以我想要的方式改变输出的参数。我错过了什么吗?
最后请注意:尽管如此,付款仍然有效。这只是我想要实现的外观改变。