Продажа виртуальных ценностей в Одноклассниках

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

Как реализовать продажу виртуальных товаров

Шаг 1. Подготовьте серверную часть приложения

  1. 1.

    На сервере приложения определите URL, на которые будут приходить запросы, связанные с покупками. Нужно определить адрес для POST-запроса данных о товаре и адрес для GET-запроса о подтверждении покупки.

    Важно! URL-адреса для платёжных уведомлений ВКонтакте и Одноклассников должны быть разными.

  2. 2.

    В код сервера добавьте обработчики запросов, которые будут приходить на этот URL. Для работы с платежами за товары надо реализовать обработку следующих уведомлений:

Шаг 2. Укажите адрес обратного вызова в настройках приложения

Найдите ваше мини-приложение или игру в списке приложений и нажмите Настройки. Выберите раздел Платежи в меню слева.

Настройки подключения платежейНастройки подключения платежей

  1. 1.

    В поле URL для платёжных уведомлений ВКонтакте укажите URL, на который площадка будет отсылать уведомления, чтобы получить информацию о товаре.

  2. 2.

    В поле URL для платёжных уведомлений Одноклассников укажите URL, на который площадка будет отсылать уведомления о подтверждении покупки.

    Вы определили эти URL на шаге 1.

  3. 3.

    Новые версии платформы могут привносить изменения в структуру данных уведомлений. В поле Версия API укажите версию уведомлений, которую поддерживает ваш сервер. Актуально только для запроса get_item.

Подробнее о тестировании платежей — в разделе Тестовый режим.

Шаг 3. Вызовите событие VK Bridge для показа окна покупки

Для продажи игрового товара вызовите событие VKWebAppShowOrderBox в клиентской части игры. Например, так:

JavaScript
bridge.send('VKWebAppShowOrderBox', { type: 'item', // Всегда должно быть 'item' item: 'sale_item_id_1', // Идентификатор товара }) .then( (data) => {console.log('Покупка состоялась.', data) }) .catch( (e) => {console.log('Ошибка!', e) });

Обратите внимание, что если вы не используете какой-либо сборщик, например webpack, a включаете .js-файл библиотеки VK Bridge в HTML-код своих страниц, то в JavaScript-коде надо использовать имя объекта vkBridge, а не bridge.

Проверить результаты можно не только c помощью then и catch, но и через события платформы. Подробнее — в разделе Обработка результатов.

Порядок обработки ответов на уведомление зависит от платформы:

  • В десктопной версии сайта ваше приложение получает событие VKWebAppShowOrderBoxResult только после того, как площадка обработала ответ на уведомление. Если сервер приложения сообщает об ошибке в ответе на платёжное уведомление, площадка отправляет событие VKWebAppShowOrderBoxFailed.

  • На Android и в мобильной версии сайта ваше приложение всегда получает событие VKWebAppShowOrderBoxResult после того, как пользователь подтвердит оплату голосами. Площадка ожидает ответ на уведомление, но не отправляет событие VKWebAppShowOrderBoxFailed, даже если приложение вернёт код ошибки.

Обмен данными

Обмен уведомлениями между сервером приложения и площадкой отличается для ВКонтакте и Одноклассников:

Обмен данными происходит в два этапа:

  1. 1.

    Чтобы показать окно покупки товара, вызовите событие VKWebAppShowOrderBox библиотеки VK Bridge.

    • Библиотека отправляет запрос площадке о необходимости показа диалогового окна.

    • Площадка, в свою очередь, отправляет серверу приложения на URL платёжных уведомлений ВКонтакте уведомление вида get_item для получения информации о продаваемом объекте.

      Значение параметра site указывает, на какой площадке производится покупка товара.

    • Сервер приложения отвечает на этот запрос и сообщает площадке название товара, его стоимость и другие данные.

      Цена товара должна быть предоставлена в ОКах.

    • Площадка проверяет, достаточно ли у пользователя ОКов на счёте.

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

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

  2. 2.

    После того как пользователь нажмёт Оплатить в окне покупки:

    • Площадка отправляет серверу приложения на URL платёжных уведомлений в Одноклассниках уведомление в виде GET-запроса, который сообщает, что пользователь оплатил товар.

    • Сервер приложения предоставляет пользователю покупаемый товар и возвращает площадке ответ об успешной обработке заказа.

    • Площадка переводит ОКи со счёта пользователя на счёт приложения, а также сообщает клиентской части приложения об успешной покупке.

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

Возврат товаров

Возврат товаров в Одноклассниках можно осуществить с помощью метода payment.refundUserPayment.

Тестовый режим

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

Подробнее о получении доступа к тестовому режиму платежей и рекламы — в документации API Одноклассники.

Работа с платежами

Для работы с платежами в Одноклассниках, например получения статистики по платежам или возврата товара, вы можете использовать API-операции группы payment.

Материалы по теме