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

问题描述 投票:0回答:2

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

当前的行为是:

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

屏幕截图中的当前行为:

期望的行为:

所需的行为是从与 @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
,但它们都不包含任何可能按照我想要的方式更改输出的参数。我是不是错过了什么?

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

javascript node.js telegram telegram-bot telegram-api
2个回答
2
投票

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


0
投票

我没有 50 个代表来评论 ihor8k 的正确答案...但需要澄清一下:

sendInvoice
方法有一个
start_parameter
指定发票是多聊天发票还是单聊天发票。单聊发票(由
start_parameter
指定)将在完成后变成收据。

https://core.telegram.org/bots/api#sendinvoice

© www.soinside.com 2019 - 2024. All rights reserved.