Валидация стоимости товара при внутриигровых платежах

Процесс проведения игрового платежа в игре обязательно включает в себя этап валидации платежа на сервере игры.

Процесс обратной связи подробно описан на данной странице callbacks.payment.

Одно из обязательных требований при модерации игры перед запуском вашей игры на платформе игр Одноклассников: валиация платежей производилась корректно, в том числе учитывался параметр стоимости товара.

Это нужно не только для защиты пользователей при произведении платежей, но также и защищает разработчика от злоумышленных действий пользователей, а именно покупка товара за цену, отличную от той, которая указана в вашем внутриигровом магазине.

Проверка стоимости товара

Одним из обязательных требований при валидации внутриигровых платежей является проверка стоимости товара в момент прихода запроса на ваш callback-сервис.

Если производится попытка совершения покупки товара с указанной в запросе стоимостью, отличной от указанной вами в магазине, то ваш сервис должен отвечать ошибкой.

Как это проверить

Допустим, в вашем магазине есть следующий товар:

  • id товара: someProduct;
  • стоимость товара: 149 ОК.

В таком случае для проведения валидного платежа вам нужно вызвать примерно такой код (используя SDK-метод FAPI.UI.showPayment):

function showPayment() {
  FAPI.UI.showPayment("тестовый товар", "тестовое описание", "someProduct", 149, null, null, "ok", "true");
 }

Это случай валидного использования метода проведения платежа, при подтверждении которого ваш сервис должен ответить положительно на запрос для валидации платежа.

Для симуляции же злоумышленного запроса вам требуется вызвать следующий код:

function showPayment() {
FAPI.UI.showPayment("тестовый товар", "тестовое описание", "someProduct", 1, null, null, "ok", "true");
}

Как видно из запроса, была указана стоимость 1 ОК вместо 149 ОК. В данном случае при поступлении на ваш сервис запроса на валидацию платежа он должен ответить ошибкой. Снятие средств со счета пользователя, а также награждение пользователя в игре в таком случае запрещено.