3

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

当前的行为是:

  1. 用户点击支付按钮,填写卡信息并支付服务费用
  2. 处理付款并发送有关成功交易的消息
  3. 此时,我想将 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 中用于处理付款的两种方法是sendInvoiceanswerPreCheckoutQuery但它们都不包含任何可能以我想要的方式改变输出的参数。我错过了什么吗?

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

4

1 回答 1

1

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

于 2021-09-01T07:06:11.690 回答