Telegram 机器人付款 - 付款成功后显示收据

Telegram bot payments - show receipt after successful payment

我有一个处理付款的 Telegram 机器人。付款正常进行,但是,我无法在付款成功后出示收据。

当前行为是:

  1. 用户点击支付按钮,填写卡信息并支付服务费用
  2. 付款已处理并发送有关交易成功的消息
  3. 此时,我希望 PAY 按钮更改为 RECEIPT 按钮

屏幕截图上的当前行为:

期望的行为:

所需的行为是从与 @ShopBot 的聊天中截取的,Telegram 文档中将其作为测试工具提及。

我在 Telegram 文档中唯一提到的关于如何处理“收据”的是 https://core.telegram.org/bots/payments 中的这两句话:

If the invoice message was sent in the chat with @merchantbot, it becomes a Receipt in the UI for the user — they can open this receipt at any time and see all the details of the transaction.

If the message was sent to any other chat, the Pay button remains and can be used again. It is up to the merchant bot whether to actually accept multiple payments.

但是,我不明白如何在代码中实现这一点。据我所知,发票消息已发送到与我的机器人聊天(如第一句话中所示),因此它应该成为收据。

该机器人使用 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 中用于处理付款的两种方法是 sendInvoiceanswerPreCheckoutQuery,但它们都不包含任何可能改变输出方式的参数想。我错过了什么吗?

最后注意:尽管如此,付款还是有效的。这只是我想要实现的外观更改。

我也有这个问题,指定一个参数:start_parameter='unique-string'