Общий принцип проведения платежа
Проведение платежей во встроенных приложениях требует подтверждения от сервера приложения. Оно происходит в 4 этапа:
- Внутри приложения вызывается метод FAPI.UI.showPayment.
- Платеж происходит либо сразу, либо после появления окна подтверждения.
- В случае, если появилось окно подтверждения и пользователь нажал кнопку “Закрыть”, платеж не происходит.
- Во всех остальных случаях на URL, указанный в поле “Ссылка callback”, отправляется GET-запрос с параметрами платежа. Возможные значения параметров и также формат ответа описаны в документации по методу callbacks.payment.
- Сервер приложения обрабатывает запрос и отправляет ответ по заданному формату. Если сервер приложения не отвечает на запросы, то платеж прерывается и средства пользователя не списываются.
- В случае успеха вызывается callback функция на клиенте, которой передается параметр amount - сумма покупки.
Серверная валидация
Рассмотрим подробнее обработку платежа на сервере. Алгоритм работы следующий:
- Приложение разбирает GET-запрос.
- Приложение проверяет соответствие товара и цены.
- Приложение проверяет подпись запроса.
- (необязательно, однако может пригодиться в случае возникновения вопросов у пользователя) В случае успешной транзакции приложение сохраняет информацию о транзакции.
- В случае, если проверки из пунктов 2 и 3 завершились успешно, приложение возвращает положительный ответ серверу, в ином случае отрицательный. Формат ответа описан в документации по методу callbacks.payment.
Идентификатор транзакции является уникальным, и сервер приложений/игр должен игнорировать транзакции с дублирующимся идентификатором. Он должен возвращать положительный результат, если транзакция ранее была успешно обработана.
Далее представлены примеры по пунктам 2 и 3. В качестве средства разработки выбран язык php как наиболее популярный, однако для разработки может использоваться любой другой язык.
Полную версию примера можно посмотреть на гитхабе (для того, чтобы пример заработал, в приложение необходимо добавить открытый/секретный ключи приложения, а так же свой прайс-лист).
Примеры
Ниже представлены примеры реализации 2 и 3 этапов проведения платежа на языке php