Покупка продукта
Для вызова покупки продукта используйте метод purchaseProduct:
RuStoreBillingClient.purchases.purchaseProduct( productId = "productId" ).addOnCompleteListener(object : OnCompleteListener<PaymentResult> { override fun onFailure(throwable: Throwable) { // Process error } override fun onSuccess(result: PaymentResult) { when (result) { // Process PaymentResult } } }) |
- 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 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 в PurchaseResult, возвращаемой purchaseProduct при успешной покупке продукта.
SubscriptionToken состоит из invoiceId покупки и userId RuStore, записанных через точку: «$invoiceId.$userId»
RuStoreBillingClient.purchases.purchaseProduct(productId).addOnSuccessListener { paymentResult -> if (paymentResult is PaymentResult.PurchaseResult) { val subscriptionToken = paymentResult.subscriptionToken yourApi.validate(subscriptionToken) } } |
Was this information helpful?