我有一个处理付款的 Telegram 机器人。付款正常进行,但是,付款成功后我无法出示收据。
当前的行为是:
屏幕截图中的当前行为:
期望的行为:
所需的行为是从与 @ShopBot 的聊天中截取的,Telegram 文档中提到它是一个测试工具。
我在 Telegram 文档中能找到的关于如何处理“收据”的唯一提及是这两句话:https://core.telegram.org/bots/ payments:
如果发票消息是在与 @merchantbot 的聊天中发送的,它将成为用户 UI 中的收据 - 他们可以随时打开此收据并查看交易的所有详细信息。
如果消息已发送到任何其他聊天,则“付款”按钮将保留并可以再次使用。是否真正接受多次付款取决于商家机器人。
但是,我不明白如何在代码中实现这一点。据我所知,发票消息已发送到与我的机器人的聊天(如第一句中所示),因此它应该成为收据。
该机器人是用 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
,但它们都不包含任何可能按照我想要的方式更改输出的参数。我是不是错过了什么?
最后请注意:尽管如此,付款仍然有效。这只是我想要实现的外观改变。
我也遇到这个问题,指定一个参数:start_parameter='unique-string'
我没有 50 个代表来评论 ihor8k 的正确答案...但需要澄清一下:
sendInvoice
方法有一个 start_parameter
指定发票是多聊天发票还是单聊天发票。单聊发票(由 start_parameter
指定)将在完成后变成收据。