У товаров с разовой покупкой жизненный цикл проще, чем у подписок, но и в этом случае есть несколько состояний и событий перехода, которые должна корректно обрабатывать ваша серверная часть.
Новые однократные покупки контента
После того как пользователь завершит оплату, ваше приложение может получить информацию о новой покупке одним из следующих способов:
- Настройте
Real-time developer notificationsи включитеGet all notifications for subscriptions and one-time products, чтобы получать обновления о статусе покупок. - Реализуйте интерфейс
PurchasesUpdatedListenerизBillingClient, чтобы автоматически получать обновления о покупках. - Вызовите метод
BillingClient.queryPurchasesAsync().
После получения новой покупки используйте метод getPurchaseState или purchases.productsv2.getproductpurchasev2 in Play Developer API.
чтобы определить статус платежа для новой покупки.
Уведомления для разработчиков в режиме реального времени
Когда пользователь покупает или отменяет покупку контента для однократных покупок, Google Play отправляет сообщение OneTimeProductNotification.
Чтобы обновить статус покупки на сервере, используйте токен покупки, указанный в объекте OneTimeProductNotification, и вызовите метод purchases.productsv2.getproductpurchasev2. Этот метод позволяет получить актуальный статус покупки и потребления по токену покупки.
Когда предзаказ будет выполнен и его статус изменится на PURCHASED, вашему клиенту будет отправлено уведомление в режиме реального времени. После получения уведомления RTDN обработайте покупку по предзаказу, как описано в разделе Обработка разовых покупок товаров на сервере.
Обрабатывать RTDN, связанные с транзакциями, следует в защищенной серверной части.
Обработка завершенных транзакций
Когда пользователь совершает однократную покупку, Google Play отправляет сообщение OneTimeProductNotification с типом ONE_TIME_PRODUCT_PURCHASED.
Получив такое RTDN, обработайте покупку, как описано в разделе Обработка контента для однократных покупок в бэкенде.
Как обрабатывать отмененные транзакции
Если вы настроили получение уведомлений для разработчиков в режиме реального времени, то при отмене покупки контента для однократных покупок Google Play отправит сообщение OneTimeProductNotification с типом ONE_TIME_PRODUCT_CANCELED. Например, это может произойти, если пользователь не завершил оплату в течение требуемого периода времени или если покупка была отменена разработчиком или по запросу клиента. Когда бэкенд-сервер получит это уведомление, вызовите метод purchases.productsv2.getproductpurchasev2, чтобы узнать текущий статус покупки, и обновите бэкенд, в том числе права пользователя.
Если за покупку контента, оплачиваемого однократно, в состоянии Purchased возвращаются средства, вы также узнаете об этом с помощью Voided Purchases API.
Как обрабатывать разовые покупки товаров на сервере
ONE_TIME_PRODUCT_PURCHASED
RTDN
или вы узнали о ней в приложении через
PurchasesUpdatedListener или вручную получили
покупки в методе onResume() приложения, вы должны обработать
новую покупку. Для повышения безопасности рекомендуем обрабатывать покупки на сервере.
Чтобы обработать новую разовую покупку, выполните следующие действия:
- Отправьте запрос к конечной точке
purchases.productsv2.getproductpurchasev2, чтобы получить актуальный статус контента для однократных покупок. Чтобы вызвать этот метод для покупки, вам понадобится соответствующий параметрpurchaseTokenиз приложения или уведомленияONE_TIME_PRODUCT_PURCHASED. - Позвоните по номеру
getPurchaseState()и убедитесь, что статус покупки –PURCHASED. - Подтвердите покупку.
- Предоставьте пользователю доступ к контенту. Аккаунт пользователя, связанный с покупкой, можно определить по полю
obfuscatedExternalAccountIdизpurchases.productsv2.getproductpurchasev2, если оно было задано с помощьюsetObfuscatedAccountId()при совершении покупки.- Для покупок нерасходуемых товаров подтвердите доставку контента, вызвав метод
purchases.products.acknowledge. Убедитесь, что покупка не была подтверждена ранее, проверив полеacknowledgementState. - Если товар является расходуемым, пометьте его как израсходованный, вызвав метод
purchases.products.consume. Это позволит пользователю снова купить товар после того, как он его израсходует. Этот метод также подтверждает покупку.
- Для покупок нерасходуемых товаров подтвердите доставку контента, вызвав метод
В библиотеке Play Платежей также есть методы подтверждения и использования покупок, которые позволяют обрабатывать покупки из приложения. Однако если у вас есть серверная часть, мы рекомендуем обрабатывать покупки в ней, чтобы обеспечить более высокий уровень безопасности.