Жизненный цикл единоразовой покупки

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

Состояния жизненного цикла и переходные события для разовых покупок.
Рисунок 1. Состояния жизненного цикла и события перехода для разовых покупок.

Новые разовые покупки товаров

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

  • Настройте 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

определить состояние платежа по новой покупке.

Уведомления для разработчиков в режиме реального времени

When a user purchases or cancels the purchase of a one-time product, Google Play sends a OneTimeProductNotification message. To update your backend purchase state, use the purchase token provided in the OneTimeProductNotification object to call the purchases.productsv2.getproductpurchasev2 method. This method provides the latest purchase and consumption status given a purchase token.

Когда предварительный заказ выполнен и его статус изменился на «ПОКУПЛЕНО», вашему клиенту отправляется RTDN. После получения RTDN обработайте предварительный заказ, как описано в разделе «Обработка разовых покупок товаров в вашей системе» .

Обработка RTDN-сообщений, связанных с транзакциями, должна осуществляться в защищенной серверной части.

Обработка завершенных транзакций

Когда пользователь совершает разовую покупку товара, Google Play отправляет сообщение OneTimeProductNotification типа ONE_TIME_PRODUCT_PURCHASED . Получив это сообщение, обработайте покупку, как описано в разделе «Обработка разовых покупок товаров в вашей административной панели» .

Обработка отмененных транзакций

When a one-time product purchase is canceled, Google Play sends a OneTimeProductNotification message with the type ONE_TIME_PRODUCT_CANCELED if you have configured to receive real-time developer notifications. For example, this can occur if the user doesn't complete payment within the required timeframe, or if the purchase is revoked by the developer or by customer request. When your backend server receives this notification, call the purchases.productsv2.getproductpurchasev2 method to get the latest purchase state, then update your backend accordingly, including user entitlements.

Если разовая покупка товара, находящаяся в состоянии Purchased , будет возвращена, вы также получите уведомление об этом через API аннулированных покупок .

Обрабатывайте разовые покупки товаров в своей административной панели.

Независимо от того, обнаружили ли вы новую покупку с помощью ONE_TIME_PRODUCT_PURCHASED RTDN, получили ли уведомление об этом внутри приложения через PurchasesUpdatedListener или вручную получили информацию о покупках в методе onResume() вашего приложения, вы должны обработать новую покупку. Мы рекомендуем обрабатывать покупки на бэкэнде для повышения безопасности.

Для оформления новой разовой покупки выполните следующие действия:

  1. Для получения актуального статуса разовой покупки товара выполните запрос к конечной точке purchases.productsv2.getproductpurchasev2 . Для вызова этого метода при совершении покупки вам потребуется соответствующий purchaseToken либо из вашего приложения, либо из RTDN ONE_TIME_PRODUCT_PURCHASED .
  2. Вызовите метод getPurchaseState() и убедитесь, что состояние покупки — PURCHASED .
  3. Подтвердите покупку .
  4. Предоставьте пользователю доступ к контенту. Учетную запись пользователя, связанную с покупкой, можно идентифицировать по полю obfuscatedExternalAccountId из purchases.productsv2.getproductpurchasev2 , если она была установлена ​​с помощью setObfuscatedAccountId() при совершении покупки.
    1. Для покупок товаров, не являющихся расходными материалами, подтвердите доставку контента, вызвав метод purchases.products.acknowledge . Убедитесь, что покупка ранее не была подтверждена, проверив поле acknowledgementState .
    2. Если товар является расходным, отметьте его как использованный, вызвав метод purchases.products.consume , чтобы пользователь мог снова купить товар после его использования. Этот метод также подтверждает покупку.

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