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

Для вызова покупки продукта используйте метод purchaseProduct:

val purchasesUseCase: PurchasesUseCase = billingClient.purchases
purchasesUseCase.purchaseProduct(
    productId = productId,
    orderId = UUID.randomUUID().toString(),
    quantity = 1,
    developerPayload = null,
).addOnSuccessListener { paymentResult: PaymentResult ->
    when (paymentResult) {
        // Process PaymentResult
    }
}.addOnFailureListener { throwable: Throwable ->
    // Process error
}
  • productId: String — идентификатор продукта;
  • orderId: String — идентификатор заказа, создаётся на стороне AnyApp (опционально. Если не указан, то генерируется автоматически)
  • quantity: Int — количество продуктов (опционально);
  • developerPayload — дополнительная информация от разработчика AnyApp (опционально)

Структура результата покупки:

sealed class PaymentResult {
 
    data class InvoiceResult(
        val invoiceId: String,
        val finishCode: PaymentFinishCode,
    ) :  PaymentResult()
 
    data class InvalidInvoice(
        val invoiceId: String?,
    ) :  PaymentResult()
 
    data class PurchaseResult(
        val finishCode: PaymentFinishCode,
        val orderId: String,
        val purchaseId: String,
        val productId: String,
        val invoiceId: String,
        val subscriptionToken: String? = null,
    ) :  PaymentResult()
 
    data class InvalidPurchase(
        val purchaseId: String?,
        val invoiceId: String?,
        val orderId: String?,
        val quantity: Int?,
        val productId: String?,
        val errorCode: Int?,
    ) : PaymentResult()
 
    object InvalidPaymentState : PaymentResult()
}
  • InvoiceResult — платежи завершились с результатом;
  • InvalidInvoice — платежи завершились без указания инвойса. Вероятно, они были запущены с некорректным инвойсом (пустая строка, например);
  • PurchaseResult — результат успешного завершения покупки цифрового товара;
  • InvalidPurchase — при оплате цифрового товара платежи завершились c ошибкой;
  • InvalidPaymentState — при завершении платежей отсутствует PaymentState.

Возможные статусы, которые может содержать PaymentFinishCode:

  • SUCCESSFUL_PAYMENT — успешная оплата; 
  • CLOSED_BY_USER — отменено пользователем;
  • UNHANDLED_FORM_ERROR — неизвестная ошибка;
  • PAYMENT_TIMEOUT — ошибка оплаты по таймауту;
  • DECLINED_BY_SERVER — отклонено сервером;
  • RESULT_UNKNOWN — неизвестный статус оплаты. 
Чтобы провести валидацию покупки на сервере, используйте subscriptionToken. Подробнее о валидации покупки на сервере.
Обновлено 21 апреля 2023 г.
Was this information helpful?