SDK Платежи in-app для Kotlin/Java (версия 6.1.0 (Beta))
RuStore позволяет интегрировать платежи в мобильное приложение.
-
Если не знаете с чего начать, прочтите инструкцию в сценариях использования.
-
Если вы переходите на Pay SDK с billingClient SDK, ознакомьтесь с инструкцией по переходу. Подробности о Pay SDK можно узнать тут.
Подготовка к работе
Добавление репозитория
Добавление репозитория
Подключите репозиторий, как показано в примере ниже.
repositories {
maven {
url = uri("https://artifactory-external.vkpartner.ru/artifactory/maven")
}
}
Подключение зависимости
Подключение зависимости
Добавьте следующий код в свой конфигурационный файл для подключения зависимости.
dependencies {
implementation(platform("ru.rustore.sdk:bom:6.1.0"))
implementation("ru.rustore.sdk:pay")
}
Инициализация SDK
Перед вызовом методов библиотеки необходимо выполнить её инициализацию.
Сама инициализация происходит автоматически, но для работы SDK в вашем файле manifest.xml необходимо прописать console_app_id_key.
Сделать это можно следующим образом:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="your.app.package.name">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/Theme.App"
tools:targetApi="n">
...
<meta-data
android:name="console_app_id_key"
android:value="@string/CONSOLE_APPLICATION_ID" />
</application>
</manifest>
-
Пример:CONSOLE_APPLICATION_ID— идентификатор приложения из RuStore консоли.https://console.rustore.ru/apps/111111.
Где в RuStore Консоль отображаются идентификаторы приложений?
- Перейдите на вкладку Приложения и выберите нужное приложение.
- Скопируйте идентификатор из URL-адреса страницы приложения — это набор цифр между
apps/и/versions. Например, для URL-адресаhttps://console.rustore.ru/apps/123456/versionsID приложения —123456.

ApplicationId, указанный вbuild.gradle, должен совпадать сapplicationIdAPK-файла, который вы публиковали в RuStore Консоль.-
Подпись
keystoreдолжна совпадать с подписью, которой было подписано приложение, опубликованное в RuStore Консо ль. Убедитесь, что используемыйbuildType(пр.debug) использует такую же подпись, что и опубликованное приложение (пр.release).
Методы SDK
Доступные публичные интеракторы:
PurchaseInteractor— интерактор, который позволяет работать с платежами и имеет несколько публичных методов:getPurchase(purchaseId: PurchaseId): Task<Purchase>— позволяет получить информацию о покупке по её идентификатору.getPurchases(): Task<List<Purchase>>— позволяет получить покупки пользователя. В списке возвращаются покупки в статусеCONFIRMEDдля непотребляемых товаров иPAIDдля потребляемых товаров.PAID— статус, означающий успешное холдирование средств. Такая покупка ожидает подтверждения со стороны разработчика.getPurchaseAvailability(): Task<PurchaseAvailabilityResult>— возвращает результат доступности работы с платежами.consumePurchase(purchaseId: PurchaseId, developerPayload: DeveloperPayload? = null)— позволяет совершить подтверждение (потребление) покупки. Подходит тол ько для потребляемых товаров.
ProductInteractor— интерактор, который позволяет работать с продуктами и имеет несколько публичных методов:getProducts(productsId: List<ProductId>): Task<List<Product>>— позволяет получить информацию о продуктах по их ID. В списке продуктов можно указать до 1000 элементов.purchase(params: ProductPurchaseParams): Task<ProductPurchaseResult>— позволяет совершить покупку продукта.
- Блок
RuStoreUtils— набор публичных методов, таких как:isRuStoreInstalled— проверка наличия мобильного приложения RuStore на устройстве пользователя.openRuStoreDownloadInstruction— открывает страницу скачивания мобильного приложения RuStore.openRuStore— запускает мобильное приложение RuStore.openRuStoreAuthorization— запускает мобильное приложение RuStore для авторизации. После успешной авторизации пользователя RuStore автоматически закроется.
Получение списка продуктов
- Kotlin
- Java
Для получения продуктов, добавленных в ваше приложение через RuStore консоль, необходимо использовать метод getProducts.
RuStorePayClient.instance.getProductInteractor().getProducts(productsId = listOf(ProductId("id1"), ProductId("id2")))
.addOnSuccessListener { products: List<Product> ->
// Логика работы со списком продуктов
}
.addOnFailureListener { throwable: Throwable ->
// Обработка ошибки
}
productsId: List<ProductId> — список идентификаторов продуктов (задаются при создании продукта в консоли разработчика). Список продуктов имеет ограничение в размере 1000 элементов.
Где в RuStore Консоль отображаются идентификаторы продуктов?
- Перейдите на вкладку Приложения и выберите нужное приложение.
- Выберите Монетизация в меню слева.
- Выберите тип товара: Подписки или Разовые покупки.
- Скопируйте идентификаторы нужных товаров.

Метод возвращает список продуктов. Ниже представлена модель продукта.
public class Product internal constructor(
public val productId: ProductId,
public val type: ProductType,
public val amountLabel: AmountLabel,
public val price: Price?,
public val currency: Currency,
public val imageUrl: Url,
public val title: Title,
public val description: Description?,
)
productId— идентификатор продукта, который был присвоен продукту в RuStore Консоли (обязательный параметр).type— тип продукта.CONSUMABLE/NON-CONSUMABLE(потребляемый/непотребляемый).amountLabel— отформатированная цена покупки, включая валютный знак.price— цена в минимальных единицах (в копейках).currency— код валюты ISO 4217.title— название продукта на языкеlanguage.description— описание на языкеlanguage.imageUrl— ссылка на картинку.
Примеры ответа
Product(
productId = ProductId("conProduct1"),
type = ProductType.CONSUMABLE_PRODUCT,
amountLabel = AmountLabel("100.00 руб."),
price = Price(10000),
currency = Currency("RUB"),
imageUrl = Url("https://your_image_consumable_product.png"),
title = Title("Название Потребляемого продукта"),
description = Description("Описание потребляемого продукта"),
)
Product(
productId = ProductId("nonConProduct1"),
type = ProductType.NON_CONSUMABLE_PRODUCT,
amountLabel = AmountLabel("200.00 руб."),
price = Price(20000),
currency = Currency("RUB"),
imageUrl = Url("https://your_image_non_consumable_product.png"),
title = Title("Название Непотребляемого продукта"),
description = Description("Описание Непотребляемого продукта"),
)
Для получения продуктов, добавленных в ваше приложение через RuStore консоль, необходимо использовать метод getProducts.
List<ProductId> productsId = Arrays.asList(new ProductId("id1"), new ProductId("id2"));
ProductInteractor productInteractor = RuStorePayClient.Companion.getInstance().getProductInteractor();
productInteractor.getProducts(productsId)
.addOnSuccessListener(products -> {
// Логика работы со списком продуктов
})
.addOnFailureListener(throwable -> {
// Обработка ошибки
});
productsId: List<ProductId> — список идентификаторов продуктов (задаются при создании продукта в консоли разработчика). Список продуктов имеет ограничение в размере 1000 элементов.
Где в RuStore Консоль отображаются идентификаторы продуктов?
- Перейдите на вкладку Приложения и выберите нужное приложение.
- Выберите Монетизация в меню слева.
- Выберите тип товара: Подписки или Разовые покупки.
- Скопируйте идентификаторы нужных товаров.

Метод возвращает список продуктов. Ниже представ лена модель продукта:
public class Product {
private final ProductId productId;
private final ProductType type;
private final AmountLabel amountLabel;
private final Price price;
private final Currency currency;
private final Url imageUrl;
private final Title title;
private final Description description;
public Product(ProductId productId, ProductType type, AmountLabel amountLabel, @Nullable Price price, Currency currency, Url imageUrl, Title title, @Nullable Description description) {
this.productId = productId;
this.type = type;
this.amountLabel = amountLabel;
this.price = price;
this.currency = currency;
this.imageUrl = imageUrl;
this.title = title;
this.description = description;
}
public ProductId getProductId() {
return productId;
}
public ProductType getType() {
return type;
}
public AmountLabel getAmountLabel() {
return amountLabel;
}
public @Nullable Price getPrice() {
return price;
}
public Currency getCurrency() {
return currency;
}
public Url getImageUrl() {
return imageUrl;
}
public Title getTitle() {
return title;
}
public @Nullable Description getDescription() {
return description;
}
}
productId— идентификатор продукта, который был присвоен продукту в RuStore Консоли (обязательный параметр).type— тип продукта.CONSUMABLE/NON-CONSUMABLE(потребляемый/непотребляемый).amountLabel— отформатированная цена покупки, включая валютный знак.price— цена в минимальных единицах (в копейках).currency— код валюты ISO 4217.title— название продукта на языкеlanguage.description— описание на языкеlanguage.imageUrl— ссылка на картинку.
Примеры ответа
Product(
productId = ProductId("conProduct1"),
type = ProductType.CONSUMABLE_PRODUCT,
amountLabel = AmountLabel("100.00 руб."),
price = Price(10000),
currency = Currency("RUB"),
imageUrl = Url("https://your_image_consumable_product.png"),
title = Title("Название Потребляемого продукта"),
description = Description("Описание потребляемого продукта"),
)
Product(
productId = ProductId("nonConProduct1"),
type = ProductType.NON_CONSUMABLE_PRODUCT,
amountLabel = AmountLabel("200.00 руб."),
price = Price(20000),
currency = Currency("RUB"),
imageUrl = Url("https://your_image_non_consumable_product.png"),
title = Title("Название Непотребляемого продукта"),
description = Description("Описание Непотребляемого продукта"),
)
Получение сведений о покупке
- Kotlin
- Java
getPurchase.
RuStorePayClient.getPurchaseInteractor().getPurchase(PurchaseId("purchaseId"))
.addOnSuccessListener { purchase: Purchase ->
// Process success
}
.addOnFailureListener { throwable: Throwable ->
// Process error
}
Метод возвращает информацию о конкретной покупке в любом статусе. Ниже представлена модель покупки:
public class Purchase internal constructor(
public val purchaseId: PurchaseId,
public val productId: ProductId,
public val invoiceId: InvoiceId,
public val orderId: OrderId?,
public val type: PurchaseType,
public val description: Description,
public val purchaseTime: Date?,
public val price: Price,
public val amountLabel: AmountLabel,
public val currency: Currency,
public val quantity: Quantity,
public val status: PurchaseStatus,
public val subscriptionToken: SubscriptionToken?,
public val developerPayload: DeveloperPayload?,
)
-
purchaseId— идентификатор покупки. -
productId— идентификатор продукта, который был присвоен продукту в RuStore Консоли (обязательный параметр). -
invoiceId— идентификатор счёта. -
orderId— уникальный идентификатор оплаты, сформированный приложением (опциональный параметр). Если вы укажете этот параметр в вашей системе, вы получите его в ответе при работе с API. Если не укажете, он будет сгенерирован автоматически (uuid). Максимальная длина 150 символов. -
type— тип продукта (потребляемый / непотребляемый):CONSUMABLE/NON-CONSUMABE. -
description— описание покупки. -
purchaseTime— время покупки. -
price— цена в минимальных единицах валюты. -
amountLable— отформатированная цена покупки, включая валютный знак. -
currency— код валюты ISO 4217. -
quantity— количество продукта. Необязательный параметр со стандартным значением1. Применим только к покупке потребляемых товаров. -
purchaseState— состояние покупки.Промежуточные статусы:
INVOICE_CREATED— создан счёт на оплату, покупка ожидает оплаты.PROCESSING— запущена оплата.PAID— только для покупки потребляемого товара — промежуточный статус, средства на счёте покупателя зарезервированы. Покупка ожидает подтверждения от разработчика.
Финальные статусы:
CONSUMED— платеж за потребляемый товар успешно совершен.CONFIRMED— платеж за непотребляемый товар успешно совершен.CANCELLED— покупка отменена, оплата не была произведена.EXPIRED— истекло время на оплату покупки.REJECTED— покупка отклонена (например, ввиду недостатка средств).REVERSED— покупка была отменена, т. к. не было произведено подтверждение в течение 6 часов (только для потребляемых товаров).REFUNDED— запрос на возврат средств за покупку совершён успешно. Деньги будут возвращены пользователю в течение 10 рабочих дней..
-
developerPayload— строка с дополнительной информацией о заказе, которую вы можете установить при подтверждении покупки. Эта строка переопределяет значение, заданное при инициализации. -
subscriptionToken— токен для валидации покупки на сервере.
getPurchase.
PurchaseInteractor purchaseInteractor = RuStorePayClient.Companion.getInstance().getPurchaseInteractor();
purchaseInteractor.getPurchase(new PurchaseId("purchaseId"))
.addOnSuccessListener(purchase -> {
// Process success
})
.addOnFailureListener(throwable -> {
// Process error
});
Метод возвращает информацию о конкретной покупке в любом статусе. Ниже представлена модель покупки:
public class Purchase {
private final PurchaseId purchaseId;
private final ProductId productId;
private final InvoiceId invoiceId;
private final OrderId orderId;
private final PurchaseType type;
private final Description description;
private final Date purchaseTime;
private final Price price;
private final AmountLabel amountLabel;
private final Currency currency;
private final Quantity quantity;
private final PurchaseStatus status;
private final SubscriptionToken subscriptionToken;
private final DeveloperPayload developerPayload;
public Purchase(PurchaseId purchaseId, ProductId productId, InvoiceId invoiceId, OrderId orderId, PurchaseType type, Description description, Date purchaseTime, Price price, AmountLabel amountLabel, Currency currency, Quantity quantity, PurchaseStatus status, SubscriptionToken subscriptionToken, @Nullable DeveloperPayload developerPayload) {
this.purchaseId = purchaseId;
this.productId = productId;
this.invoiceId = invoiceId;
this.orderId = orderId;
this.type = type;
this.description = description;
this.purchaseTime = purchaseTime;
this.price = price;
this.amountLabel = amountLabel;
this.currency = currency;
this.quantity = quantity;
this.status = status;
this.subscriptionToken = subscriptionToken;
this.developerPayload = developerPayload;
}
public PurchaseId getPurchaseId() {
return purchaseId;
}
public ProductId getProductId() {
return productId;
}
public InvoiceId getinvoiceId() {
return invoiceId;
}
public @Nullable OrderId getOrderId() {
return orderId;
}
public PurchaseType getType() {
return type;
}
public Description getDescription() {
return description;
}
public Date getPurchaseTime() {
return purchaseTime;
}
public Price getPrice() {
return price;
}
public AmountLabel getAmountLabel() {
return amountLabel;
}
public Currency getCurrency() {
return currency;
}
public Quantity getQuantity() {
return quantity;
}
public PurchaseStatus getStatus() {
return status;
}
public @Nullable SubscriptionToken getSubscriptionToken() {
return subscriptionToken;
}
public @Nullable DeveloperPayload getDeveloperPayload() {
return developerPayload;
}
}
-
purchaseId— идентификатор покупки. -
productId— идентификатор продукта, который был присвоен продукту в RuStore Консоли (обязательный параметр). -
invoiceId— идентификатор счёта. -
orderId— уникальный идентификатор оплаты, сформированный приложением (опциональный параметр). Если вы укажете этот параметр в вашей системе, вы получите его в ответе при работе с API. Если не укажете, он будет сгенерирован автоматически (uuid). Максимальная длина 150 символов. -
type— тип продукта (потребляемый / непотребляемый):CONSUMABLE/NON-CONSUMABE. -
description— описание покупки. -
purchaseTime— время покупки. -
price— цена в минимальных единицах валюты. -
amountLable— отформатированная цена покупки, включая валютный знак. -
currency— код валюты ISO 4217. -
quantity— количество продукта. Необязательный параметр со стандартным значением1. Применим только к покупке потребляемых товаров. -
purchaseState— состояние покупки.Промежуточные статусы:
INVOICE_CREATED— создан счёт на оплату, покупка ожидает оплаты.PROCESSING— запущена оплата.PAID— только для покупки потребляемого товара — промежуточный статус, средства на счёте покупателя зарезервированы. Покупка ожидает подтверждения от разработчика.
Финальные статусы:
CONSUMED— платеж за потребляемый товар успешно совершен.CONFIRMED— платеж за непотребляемый товар успешно совершен.CANCELLED— покупка отменена, опл ата не была произведена.EXPIRED— истекло время на оплату покупки.REJECTED— покупка отклонена (например, ввиду недостатка средств).REVERSED— покупка была отменена, т. к. не было произведено подтверждение в течение 6 часов (только для потребляемых товаров).REFUNDED— запрос на возврат средств за покупку совершён успешно. Деньги будут возвращены пользователю в течение 10 рабочих дней..
-
developerPayload— строка с дополнительной информацией о заказе, которую вы можете установить при подтверждении покупки. Эта строка переопределяет значение, заданное при инициализации. -
subscriptionToken— токен для валидации покупки на сервере.
Получение списка покупок
- Kotlin
- Java
Для получения списка покупок пользователя используйте метод getPurchases.
RuStorePayClient.getPurchaseInteractor().getPurchases()
.addOnSuccessListener { purchases: List<Purchase> ->
// Process success
}
.addOnFailureListener { throwable: Throwable ->
// Process error
}
Метод возвращает список покупок в статусах CONFIRMED для непотребляемых товаров и PAID для потребляемых товаров.
Ниже представлена модель покупки:
public class Purchase internal constructor(
public val purchaseId: PurchaseId,
public val productId: ProductId,
public val invoiceId: InvoiceId,
public val orderId: OrderId?,
public val type: PurchaseType,
public val description: Description,
public val purchaseTime: Date?,
public val price: Price,
public val amountLabel: AmountLabel,
public val currency: Currency,
public val quantity: Quantity,
public val status: PurchaseStatus,
public val subscriptionToken: SubscriptionToken?,
public val developerPayload: DeveloperPayload?,
)
purchaseId— идентификатор покупки.productId— идентификатор продукта, который был присвоен продукту в RuStore Консоли (обязательный параметр).invoiceId— идентификатор счёта.orderId— уникальный идентификатор оплаты, сф ормированный приложением (опциональный параметр). Если вы укажете этот параметр в вашей системе, вы получите его в ответе при работе с API. Если не укажете, он будет сгенерирован автоматически (uuid). Максимальная длина 150 символов.type— тип продукта (потребляемый / непотребляемый):CONSUMABLE/NON-CONSUMABE.description— описание покупки.purchaseTime— время покупки.price— цена в минимальных единицах валюты.amountLable— отформатированная цена покупки, включая валютный знак.currency— код валюты ISO 4217.quantity— количество продукта. Необязательный параметр со стандартным значением1. Применим только к покупке потребляемых товаров.purchaseState— состояние покупки.developerPayload— строка с дополнительной информацией о заказе, которую вы можете установить при подтверждении покупки. Эта строка переопределяет значение, заданное при инициализации.
Для получения списка покупок пользователя используйте метод getPurchases.
PurchaseInteractor purchaseInteractor = RuStorePayClient.Companion.getInstance().getPurchaseInteractor();
purchaseInteractor.getPurchases()
.addOnSuccessListener(purchases -> {
// Process PaymentResult
})
.addOnFailureListener(error -> {
// Process error
});
Метод возвращает список покупок в статусах CONFIRMED для непотребляемых товаров и PAID для потребляемых товаров.
Ниже представлена модель покупки:
public class Purchase {
private final PurchaseId purchaseId;
private final ProductId productId;
private final InvoiceId invoiceId;
private final OrderId orderId;
private final PurchaseType type;
private final Description description;
private final Date purchaseTime;
private final Price price;
private final AmountLabel amountLabel;
private final Currency currency;
private final Quantity quantity;
private final PurchaseStatus status;
private final SubscriptionToken subscriptionToken;
private final DeveloperPayload developerPayload;
public Purchase(PurchaseId purchaseId, ProductId productId, InvoiceId invoiceId, OrderId orderId, PurchaseType type, Description description, Date purchaseTime, Price price, AmountLabel amountLabel, Currency currency, Quantity quantity, PurchaseStatus status, SubscriptionToken subscriptionToken, @Nullable DeveloperPayload developerPayload) {
this.purchaseId = purchaseId;
this.productId = productId;
this.invoiceId = invoiceId;
this.orderId = orderId;
this.type = type;
this.description = description;
this.purchaseTime = purchaseTime;
this.price = price;
this.amountLabel = amountLabel;
this.currency = currency;
this.quantity = quantity;
this.status = status;
this.subscriptionToken = subscriptionToken;
this.developerPayload = developerPayload;
}
public PurchaseId getPurchaseId() {
return purchaseId;
}
public ProductId getProductId() {
return productId;
}
public InvoiceId getinvoiceId() {
return invoiceId;
}
public @Nullable OrderId getOrderId() {
return orderId;
}
public PurchaseType getType() {
return type;
}
public Description getDescription() {
return description;
}
public Date getPurchaseTime() {
return purchaseTime;
}
public Price getPrice() {
return price;
}
public AmountLabel getAmountLabel() {
return amountLabel;
}
public Currency getCurrency() {
return currency;
}
public Quantity getQuantity() {
return quantity;
}
public PurchaseStatus getStatus() {
return status;
}
public @Nullable SubscriptionToken getSubscriptionToken() {
return subscriptionToken;
}
public @Nullable DeveloperPayload getDeveloperPayload() {
return developerPayload;
}
}
purchaseId— идентификатор покупки.productId— идентификатор продукта, который был присвоен продукту в RuStore Консоли (обязательный параметр).invoiceId— идентификатор счёта.orderId— уникальный идентификатор оплаты, сформированный приложением (опциональный параметр). Если вы укажете этот параметр в вашей системе, вы получите его в ответе при работе с API. Если не укажете, он будет сгенерирован автоматически (uuid). Максимальная длина 150 символов.type— тип продукта (потребляемый / непотребляемый):CONSUMABLE/NON-CONSUMABE.description— описание покупки.purchaseTime— время покупки.price— цена в минимальных единицах валюты.amountLable— отформатированная цена покупки, включая валютный знак.currency— код валюты ISO 4217.quantity— количество продукта. Необязательный параметр со стандартным значением1. Применим только к покупке потребляемых товаров.purchaseState— состояние покупки.developerPayload— строка с дополнительной информацией о заказе, которую вы можете установить при подтверждении покупки. Эта строка переопределяет значение, заданное при инициализации.subscriptionToken— токен для валидации покупки на сервере.
Проверка доступности работы с платежами
- Kotlin
- Java
Для проверки доступности платежей, вызовите метод getPurchaseAvailability у PurchaseInteractor. При его вызове проверяются следующие условия:
- На устройстве пользователя установлена актуальная версия RuStore.
- Пользователь авторизован в RuStore.
Пользователь и приложение не должны быть заблокированы в RuStore
.- У компании подключена монетизация через консоль разработчика RuStore.
Если все условия выполняются, возвращается PurchaseAvailabilityResult.Available.
Иначе возвращается PurchaseAvailabilityResult.Unavailable(val cause: Throwable), где cause — ошибка о невыполненном условии.
Чтобы понять причину ошибки, проверьте её тип на RuStoreException.
См. Обработка ошибок.
Например, если вы получили RuStoreUserUnauthorizedException, это означает, что пользователь не авторизован в RuStore.
В этом случае вы можете вызвать метод openRuStoreAuthorization, который запускает мобильное приложение RuStore для авторизации.
Другие доступные методы см. в разделе Работа с SDK.
RuStorePayClient.getPurchaseInteractor().getPurchaseAvailability()
.addOnSuccessListener { result ->
when (result) {
is PurchaseAvailabilityResult.Available -> {
// Process purchases available
}
is PurchaseAvailabilityResult.Unavailable -> {
// Process purchases unavailable
}
}
}.addOnFailureListener { throwable ->
// Process unknown error
}
Для проверки доступности платежей, вызовите метод getPurchaseAvailability у PurchaseInteractor. При его вызове проверяются следующие условия:
- На устройстве пользователя установлена актуальная версия RuStore.
- Пользователь авторизован в RuStore.
Пользователь и приложение не должны быть заблокированы в RuStore
.- У компании подключена монетизация через консоль разработчика RuStore.
Если все условия выполняются, возвращается PurchaseAvailabilityResult.Available.
Иначе возвращается PurchaseAvailabilityResult.Unavailable(val cause: Throwable), где cause — ошибка о невыполненном условии.
Чтобы понять причину ошибки, проверьте её тип на RuStoreException.
См. Обработка ошибок.
Например, если вы получили RuStoreUserUnauthorizedException, это означает, что пользователь не авторизован в RuStore.
В этом случае вы можете вызвать метод openRuStoreAuthorization, который запускает мобильное приложение RuStore для авторизации.
Другие доступные методы см. в разделе Работа с SDK.
PurchaseInteractor purchaseInteractor = RuStorePayClient.Companion.getInstance().getPurchaseInteractor();
purchaseInteractor.getPurchaseAvailability()
.addOnSuccessListener(result -> {
if (result instanceof PurchaseAvailabilityResult.Available) {
// Process purchases available
} else if (result instanceof PurchaseAvailabilityResult.Unavailable) {
// Process purchases unavailable
}
})
.addOnFailureListener(throwable -> {
// Process unknown error
});
Статусная модель покупки
Статусная модель покупки потребляемых продуктов (CONSUMABLES)
Статусная модель покупки непотребляемых продуктов (NON-CONSUMABLES)
Валидация покупки на сервере
- Kotlin
- Java
Если вам необходимо произвести валидацию покупки на сервере RuStore, вы можете использовать subscriptionToken из модели ProductPurchaseResult.SuccessProductPurchaseResult, возвращаемой при успешной покупке продукта.
Есть также методы для валидации платежей по их InvoiceId.
RuStorePayClient.getProductInteractor().purchase(ProductId("productId"))
.addOnSuccessListener { result ->
if (result is ProductPurchaseResult.SuccessProductPurchaseResult) {
val subscriptionToken = result.subscriptionToken
yourApi.validate(subscriptionToken)
}
}
Также можно получить subscriptionToken в сущности Purchase. Сущность Purchase можно получить используя метод getPurchases.
RuStorePayClient.getPurchaseInteractor().getPurchases()
.addOnSuccessListener { purchases ->
purchases.forEach { purchase ->
yourApi.validate(purchase.subscriptionToken)
}
}
Если вам необходимо произвести валидацию покупки на сервере RuStore, вы можете использовать subscriptionToken из модели ProductPurchaseResult.SuccessProductPurchaseResult, возвращаемой при успешной покупке продукта.
Есть также методы для валидации платежей по их InvoiceId.
ProductInteractor productInteractor = RuStorePayClient.Companion.getInstance().getProductInteractor();
ProductPurchaseParams params = new ProductPurchaseParams(new ProductId("productId"), null, null, null);
productInteractor.purchase(params)
.addOnSuccessListener(result -> {
if (result instanceof ProductPurchaseResult.SuccessProductPurchaseResult) {
ProductPurchaseResult.SuccessProductPurchaseResult successResult = (ProductPurchaseResult.SuccessProductPurchaseResult) result;
String subscriptionToken = successResult.getSubscriptionToken().getValue();
yourApi.validate(subscriptionToken);
}
});
Также можно получить subscriptionToken в сущности Purchase. Сущность Purchase можно получить используя метод getPurchases.
PurchaseInteractor purchaseInteractor = RuStorePayClient.Companion.getInstance().getPurchaseInteractor();
purchaseInteractor.getPurchases()
.addOnSuccessListener(purchases -> {
for (Purchase purchase : purchases) {
yourApi.validate(purchase.getSubscriptionToken().getValue());
}
})
.addOnFailureListener(error -> {
// Process error
});
Подтверждение покупки
RuStore содержит продукты следующих типов:
CONSUMABLE(потребляемый) — можно купить много раз, например кристаллы в приложении.NON_CONSUMABLE(непотребляемый) — можно купить один раз, например отключение рекламы в приложении.
Подтверждения требуют только продукты типа CONSUMABLE, если они находятся в состоянии PurchaseState.PAID.
- Kotlin
- Java
Для потдверждения покупки используйте метод consumePurchase:
RuStorePayClient.getPurchaseInteractor().consumePurchase(
purchaseId = PurchaseId("purchaseId"),
developerPayload = null,
)
.addOnSuccessListener {
// Process success
}.addOnFailureListener { throwable: Throwable ->
// Process error
}
purchaseId— иден тификатор покупки.developerPayload— строка с дополнительной информацией о заказе, которую вы можете установить при подтверждении покупки. Эта строка переопределяет значение, заданное при инициализации. Максимум 250 символов. Символы не экранируются. Если передан, заменяет значение, записанное при старте покупки методомpurchase.
Для подтверждения покупки используйте метод consumePurchase:
PurchaseInteractor purchaseInteractor = RuStorePayClient.Companion.getInstance().getPurchaseInteractor();
purchaseInteractor.consumePurchase(
new PurchaseId("purchaseId"),
null
).addOnSuccessListener(aVoid -> {
// Process success
}).addOnFailureListener(throwable -> {
// Process error
});
purchaseId— идентификатор покупки.developerPayload— строка с дополнительной информацией о заказе, которую вы можете установить при подтверждении покупки. Эта строка переопределяет значение, заданное при инициализации. Максимум 250 символов. Символы не экранируются. Если передан, заменяет значение, записанное при старте покупки методомpurchase.
Обработка незавершённых платежей
Обработка незавершённых платежей производится разработчиком.
Чтобы подтвердить покупку типа CONSUMABLE и в статусе PAID вызовите метод подтверждения (потребления) покупки (см. Получение сведений о покупке).
Обработка ошибок
RuStorePaymentNetworkException— ошибка сетевого взаимодействия SDK;RuStorePaymentCommonException— общая ошибка SDK;RuStorePayClientAlreadyExist— ошибка повторной инициализации SDK;RuStorePayClientNotCreated— попытка обратиться к публичным интерфейсам SDK до момента её инициализации;RuStorePayInvalidActivePurchase— запущен процесс оплаты неизвестного типа продукта;RuStorePayInvalidConsoleAppId— не задан обязательный параметрсonsole_application_idдля инициализации SDK;RuStorePaySignatureException— неверная сигнатура ответа (возникает при попытке совершить мошеннические действия);EmptyPaymentTokenException— ошибка получения платежного токена;RuStoreNotInstalledException— на устройстве пользователя не установлен RuStore;RuStoreOutdatedException— версия RuStore, установленная на устройстве пользователя, не поддерживает данный SDK;RuStoreUserUnauthorizedException— пользователь не авторизован в RuStore;RuStoreApplicationBannedException— приложение заблокировано в RuStore;RuStoreUserBannedException— пользователь заблокирован в RuStore;RuStoreException— базовая ошибка RuStore, от которой наследуются остальные ошибки.