Платежи
Создание и обработка платежа происходит в несколько этапов:
- Создание заказа
- Вызов платежной формы
- Получение статуса от платежной формы
- Проверка состояния платежа
- Обновление данных
Создание заказа
Для создания платежа необходимо вызвать метод /invoice/create передав в него идентификатор соответствующего товара и его количество.
В ответ метод вернет invoice_id, который понадобится при проверке платежа и link, который необходимо использовать для вызова платежной формы.
Доступные для продажи товары предварительно настраиваются в панели управления в разделе Платежи / Витрина. При продаже внутри-игровой валюты, параметр количества (count) в методе является обязательным при создании заказа.
Вызов платежной формы
Полученное значение link необходимо передать в метод Telegram.WebApp.openInvoice.
Получение статуса от платежной формы
Для получения статуса платежа от Telegram необходимо в методе Telegram.WebApp.openInvoice указать обработчик платежа на стороне клиента. Если обработчик не был вызван или результат полученный в нем имеет значение не "paid" - платеж не завершен.
Проверка состояния платежа
В случае, если результат, полученный в обработчике метода Telegram.WebApp.openInvoice, имеет значение "paid", необходимо проверить успешность проведенного платежа. Для этого необходимо вызвать метод /invoice/status, куда передать полученный ранее invoice_id.
Обновление данных
При успешно проведенном платеже клиент должен обновить данные пользователя на своей стороне самостоятельно, вызвав соответствующие методы.
Пример кода
function doPayment(product_id, count) {
return new Promise((resolve, reject) => {
Api.method.invoice.create(product_id, count).then((response) => {
if (!response['invoice_id'] || !response['link']) { return reject(response); }
let invoice_id = response['invoice_id'];
let invoice_link = response['invoice_link'];
return Telegram.WebApp.openInvoice(invoice_link, (result) => {
if (result !== 'paid') { return reject(); }
Api.method.invoice.status(invoice_id).then((result) => {
if (result['status']) { return resolve(response); }
reject();
}).catch(reject);
});
}).catch(reject);
});
}