Как подтвердить платёж в Telegram.Bots?
Пытаюсь настроить в телеграм-боте оплаты. После отправки SendInvoiceAsync появляется форма для заполнения данных карты. Но после ее ввода ничего не происходит, то есть телеграм не оправляет мне апдейт с PrecheckooutQuery и по итогу оплата отваливается по таймауту. ИИспользую стандартную библиотеку C# Telegram.Bots .
Вот так создаю инвойс:
await _telegramBotClient.SendInvoiceAsync(chatId: user.ChatId,
title: "Product",
description: description,
payload: "somePayload",
providerToken: _configuration["ProviderToken"],
currency: "RUB",
prices: price,
needEmail: true,
startParameter: "exapmle",
isFlexible:false
);
Вот так пытаюсь отловить подтверждение оплаты:
if (update.Type==UpdateType.PreCheckoutQuery)
{
Console.WriteLine("Precheckout");
await ExecuteCommand(CommandNames.CheckPay, update);
return;
}
Подскажите, что делаю не так?
Ответы (1 шт):
PreCheckoutQuery отвечает за обработку и утверждение платежа перед тем, как пользователь его совершит. Далее после утверждения, отправляем ответ серверу телеграма. Ответ серверу телеграма вы должны дать в течении 10 секунд, иначе платеж не пройдет. После того, как сервер телеграм получат ваш ответ, сервер тг в update вернет SuccessfulPayment. SuccessfulPayment отвечает за обработку успешно проведенного платежа.
Итого:
PreCheckoutQuery preCheckout = update.PreCheckoutQuery;
if (preCheckout != null)
{
await telegramBotClient.AnswerPreCheckoutQueryAsync(update.PreCheckoutQuery.Id, CancellationToken);
SuccessfulPayment successfulPayment = update.Message.SuccessfulPayment;
if (successfulPayment != null)
{
//Ваша логика
}
}
В примере использован положительный ответ, но вы можете использовать ответ отрицательный используя следующую конструкцию:
await telegramBotClient.AnswerPreCheckoutQueryAsync(update.PreCheckoutQuery.Id, "ErrorMessage", CancellationToken);
Надеюсь помог, удачи в последующей разработке.
P.S На тесте без SuccessfulPayment.