Перейти к основному содержимому
DEPRECATED

BillingClient SDK помечён как устаревший. BillingClient SDK продолжает свою работу, но устранение неисправностей, влияющих на работу платежей, может занимать больше времени. Новая функциональность добавляться не будет.

Рекомендуем использовать Pay SDK в проектах. Для перехода на Pay SDK воспользуйтесь инструкцией по миграции

Обновление RuStore SDK до версии 3.2.0: Изменения в платежах и миграция для Kotlin и Java

примечание

Примеры кода представлены для Kotlin.

В версии 3.2.0 платежей были значительно изменены модели результата покупки продуктов PaymentResult.

Чтобы быстро перейти на новую версию SDK, используйте настоящую инструкцию по миграции.

Обновление зависимости

Для обновления зависимости, поднимите версию у billingclient в блоке dependencies вашего build.gradle.

dependencies {
implementation( "ru.rustore.sdk:billingclient:3.2.0" )
}

Модель продукта и модель ошибок не изменились.

Получение списка продуктов

Изменилась модель результата получения списка продуктов. Теперь метод getProducts() сразу возвращается список продуктов.

val productsUseCase: ProductsUseCase = billingClient.products
productsUseCase.getProducts(productIds = listOf("id1", "id2"))
.addOnSuccessListener { products: List<Product> ->
// Process success
}
.addOnFailureListener { throwable: Throwable ->
// Process error
}

Модель продукта и модель ошибок не изменились.

Получение списка покупок

Изменилась модель результата получения информации о покупке. Теперь метод getPurchasecaution() сразу возвращается модель покупки.

Получение списка покупок

val purchasesUseCase: PurchasesUseCase = billingClient.purchases
purchasesUseCase.getPurchasecaution("purchaseId")
.addOnSuccessListener { purchase: Purchase ->
// Process success
}
.addOnFailureListener { throwable: Throwable ->
// Process error
}

Модели ошибок не изменились.

Покупка продукта

Изменилась модель результата покупки продукта. Обновленная модель представлена ниже.

public sealed interface PaymentResult {      
public data class Success(
val orderId: String?,
val purchaseId: String,
val productId: String,
val invoiceId: String,
val subscriptionToken: String? = null ,
) : PaymentResult
public data class Cancelled(
val purchaseId: String,
) : PaymentResult
public data class Failure(
val purchaseId: String?,
val invoiceId: String?,
val orderId: String?,
val quantity: Int?,
val productId: String?,
val errorCode: Int?,
) : PaymentResult
public object InvalidPaymentState : PaymentResult()
}
  • Success — результат успешного завершения покупки цифрового товара.
  • Failure — при отправке запроса на оплату или получения статуса оплаты возникла проблема, невозможно установить статус покупки.
  • Cancelled — запрос на покупку отправлен, при этом пользователь закрыл «платёжную шторку» на своём устройстве, и результат оплаты неизвестен.
  • InvalidPaymentState — ошибка работы SDK платежей. Может возникнуть, в случае некорректного обратного deeplink.
к сведению

Please, note the purchase confirmation and cancellation scenarios.

Подтверждение (потребление) покупки

Изменилась модель результата подтверждения (потребления) покупки. Теперь подтверждение (потребление) может завершиться либо успехом, либо ошибкой.

val purchasesUseCase: PurchasesUseCase = billingClient.purchases
purchasesUseCase.confirmPurchase(purchaseId = "purchaseId" , developerPayload = null )
.addOnSuccessListener {
// Process success
}.addOnFailureListener { throwable: Throwable ->
// Process error
}

Отмена покупки

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

val purchasesUseCase: PurchasesUseCase = billingClient.purchases
purchasesUseCase.deletePurchase(purchaseId = "purchaseId" )
.addOnSuccessListener {
// Process success
}.addOnFailureListener { throwable: Throwable ->
// Process error
}

Сценарий подтверждения и отмены покупки

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

Метод отмены покупки deletePurchase необходимо использовать при следующих условиях.

  • Метод получения списка покупок getPurchases вернул покупку со статусами PurchaseState.CREATED или PurchaseState.INVOICE_CREATED.
к сведению

В некоторых случаях, после оплаты через приложение банка (СБП, SberPay, T-Pay и т. д.), при последующем возврате обратно в приложение AnyApp, статус покупки может быть всё ещё PurchaseState.INVOICE_CREATED. Это связано с временем обработки покупки на стороне банка. Поэтому разработчику необходимо правильно связать логику получения списка покупок с жизненным циклом экрана. Альтернативным вариантом решения данной проблемы является отмена покупки в статусе PurchaseState.INVOICE_CREATED только через взаимодействие пользователя с приложением. Например, вынести эту логику в отдельную кнопку.

  • Метод покупки purchaseProduct вернул PaymentResult.Cancelled.
  • Метод покупки purchaseProduct вернул PaymentResult.Failure.

Метод подтверждения (потребления) покупки confirmPurchase необходимо использовать, если метод получения списка покупок getPurchases вернул покупку продукта типа CONSUMABLE и со статусом PurchaseState.PAID.