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

dru*_*cik 5 javascript node.js telegram telegram-bot telegram-api

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

\n

当前的行为是:

\n
    \n
  1. 用户点击PAY按钮,填写卡信息并支付服务费用
  2. \n
  3. 处理付款并发送有关交易成功的消息
  4. \n
  5. 此时,我希望将“付款”按钮更改为“收据”按钮
  6. \n
\n

屏幕截图中的当前行为:

\n

目前的行为

\n

期望的行为:

\n

期望的行为

\n

所需的行为是从与@ShopBot 的聊天中截取的,它在 Telegram 文档中被称为测试工具。

\n

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

\n
\n

如果发票消息是在与 @merchantbot 的聊天中发送的,它将成为用户 \xe2\x80\x94 用户界面中的收据,他们可以随时打开此收据并查看交易的所有详细信息。

\n
\n
\n

如果消息已发送到任何其他聊天,则“付款”按钮将保留并可以再次使用。商家机器人是否真正接受多次付款取决于商家机器人。

\n
\n

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

\n

该机器人是用 Node.js 编写的,并使用 webhook 来处理消息。webhook 的代码部分对于这个问题很重要:

\n
router.route(\'/\')\n    .post(async (req, res) => {\n        try {\n\n            // if pre_checkout_query is defined, there was an attempt for payment\n            if (req.body.pre_checkout_query) {\n                // use answerPreCheckoutQuery Telegram method\n                ...\n            }\n\n            const message = req.body.message || req.body.edited_message;\n\n            // this means user\'s payment was successful\n            if (message.successful_payment) {\n                // success, deliver goods or services\n                // send message about successful payment\n                ...\n            }\n\n\n        } catch (err) {\n            ...\n        }\n    })\n
Run Code Online (Sandbox Code Playgroud)\n

发票的发送sendInvoice方法如下:

\n
\nconst url = `https://api.telegram.org/bot${process.env.TELEGRAM_BOT_TOKEN}/sendInvoice`;\nconst response = await axios.get(url, {\n   params: {\n      chat_id: chatID,\n      title: \'SOME TITLE\',\n      description: \'some decription\',\n      payload: \'SOME-PAYLOAD\',\n      provider_token: process.env.STRIPE_API_TOKEN,\n      currency: \'EUR\',\n      prices: JSON.stringify([\n         {\n            label: \'some label\',\n            amount: 200,\n         },\n      ]),\n   },\n});\n
Run Code Online (Sandbox Code Playgroud)\n

API 中用于处理付款的两种方法是sendInvoice和 ,answerPreCheckoutQuery但它们都不包含任何可能按照我想要的方式更改输出的参数。我错过了什么吗?

\n

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

\n

小智 2

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