10.0.0
通过 RuStore,您可以在移动应用中集成支付功能。
Пример реализации
Ознакомьтесь с проектом-примером, чтобы узнать, как правильно интегрировать SDK платежей.
Подключение в проект
Клонирование репозитория
Репозиторий содержит исходный к од плагина и демонстрационный проект, содержащий представление работы всех методов SDK.
Не используйте кнопку "Код → Скачать" на сайте GitFlic – этот метод не загружает файлы из Git LFS.
Перед клонированием репозитория скачайте и установите инструменты:
После установки выполните в командной строке:
git lfs install
Для клонирования репозитория воспользуйтесь набором команд:
git clone https://gitflic.ru/project/rustore/construct-rustore-pay.git
cd construct-rustore-pay
git lfs pull
Установка плагинов
Для сборки Android-приложения и работы с нативными функциями ОС Construct использует фреймворк Cordova.
- Убедитесь, что у вас установлен фреймворк Cordova версии не ниже 12.0.0.
cordova -v
- Перейдите в корневую папку вашего Cordova-проекта и выполните команду:
cordova plugin add /путь_к_папке_плагина/ru.rustore.pay
- После установки проверьте наличие плагина с помощью команды:
cordova plugin list
В списке должен появиться плагин ru.rustore.pay.
- Плагин требует, чтобы вы разместили свои данные для инициал изации в файле
rustore_pay_strings.xmlрасположенном в папкеru.rustore.pay / src / android / res / values.
Создайте или отредактируйте этот файл, поместив туда необходимые параметры инициализации плагина.
-
После установки плагин автоматически добавит теги
<meta-data>и дополнительную активитиRuStoreIntentFilterActivityвAndroidManifest.xmlв папкеваш_cordova_проект / platforms / android / app / src / main. -
В файле
AndroidManifest.xmlнайдите активитиMainActivityи удалите у неё тег<intent-filter>содержащийMAINиLAUNCHER, чтобы она больше не запускалась как стартовая. Новая активитиRuStoreIntentFilterActivity, добавленная плагином, обязательно должна быть основной.
Пример готового манифеста:
<?xml version='1.0' encoding='utf-8'?>
<manifest android:hardwareAccelerated="true" android:versionCode="10000" android:versionName="1.0.0" xmlns:android="http://schemas.android.com/apk/res/android">
<supports-screens android:anyDensity="true" android:largeScreens="true" android:normalScreens="true" android:resizeable="true" android:smallScreens="true" android:xlargeScreens="true" />
<uses-permission android:name="android.permission.INTERNET" />
<application android:hardwareAccelerated="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:supportsRtl="true">
<!-- Game activity -->
<activity android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale|smallestScreenSize|screenLayout|uiMode|navigation" android:exported="true" android:label="@string/activity_name" android:launchMode="singleTop" android:name="MainActivity" android:theme="@style/Theme.App.SplashScreen" android:windowSoftInputMode="adjustResize">
<!-- Starting intent-filter
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
-->
</activity>
<provider android:authorities="${applicationId}.cdv.core.file.provider" android:exported="false" android:grantUriPermissions="true" android:name="androidx.core.content.FileProvider">
<meta-data android:name="android.support.FILE_PROVIDER_PATHS" android:resource="@xml/cdv_core_file_provider_paths" />
</provider>
<!-- Deeplink Scheme -->
<meta-data android:name="sdk_pay_scheme_value" android:value="@string/rustore_PayClientSettings_deeplinkScheme" />
<!-- Initializing SDK -->
<meta-data android:name="console_app_id_value" android:value="@string/rustore_PayClientSettings_consoleApplicationId" />
<meta-data android:name="internal_config_key" android:value="@string/rustore_PayClientSettings_internalConfigKey" />
<!-- Deeplink Activity -->
<activity android:exported="true" android:name="ru.rustore.paybridge.RuStoreIntentFilterActivity" android:theme="@android:style/Theme.NoDisplay">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="@string/rustore_PayClientSettings_deeplinkScheme" />
</intent-filter>
</activity>
</application>
<queries>
<intent>
<action android:name="android.media.action.IMAGE_CAPTURE" />
</intent>
</queries>
</manifest>
Инициализация
Перед вызовом методов библиотеки необходимо выполнить её инициализацию. Сама инициализация происходит автоматически, но для работы SDK в вашем файле AndroidManifest.xml будут автоматически добавлены console_app_id_value, internal_config_key и sdk_pay_scheme_value. Все теги плагин добавит автоматически.
<!-- Initializing sdk -->
<meta-data android:name="console_app_id_value" android:value="@string/rustore_PayClientSettings_consoleApplicationId" />
<meta-data android:name="internal_config_key" android:value="@string/rustore_PayClientSettings_internalConfigKey" />
<!-- Deeplink Scheme -->
<meta-data android:name="sdk_pay_scheme_value" android:value="@string/rustore_PayClientSettings_deeplinkScheme" />
Значения тегов задаюся в файле rustore_pay_strings.xml расположенном в папке ru.rustore.pay / src / android / res / values.
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="rustore_PayClientSettings_consoleApplicationId" translatable="false">1234567890</string>
<string name="rustore_PayClientSettings_internalConfigKey" translatable="false">construct</string>
<string name="rustore_PayClientSettings_deeplinkScheme" translatable="false">yourappscheme</string>
</resources>
consoleApplicationId 是来自 RuStore 控制台 的应用程序标识符。
internalConfigKey — всегда должно иметь значение construct.
deeplinkScheme — уникальная схема deeplink.
在 RuStore 控制台哪里可以查看应用 ID?
- 进入 Applications 选项卡并选择需要的应用。
- 从该应用页面的 URL 中复制 ID——它是位于
apps/与/versions之间的一串数字。 例如:在https://console.rustore.ru/apps/123456/versions这个地址中,应用 ID 为123456。

Package Name и подпись Cordova-приложения, должены совпадать с Package Name и подписью приложения, которое вы публиковали в системе RuStore Консоль.
Не задавайте значения console_app_id_value и internal_config_key напрямую в манифесте. Строки должны располагаться в файле ресурсов.
Работа с SDK
Доступные публичные методы:
getPurchase— позволяет получить информацию о покупке по её ID.getPurchases— позволяет получить покупки пользователя. Данный метод поддерживает опциональную фильтрацию по типу товаров (потребляемые или непотребляемые товары), а также по статусу покупки (поддерживаются статусыPAIDиCONFIRMED). По умолчанию фильтры отключены, и вернутся все покупки пользователя (независимо от типа товара) в статусахPAIDиCONFIRMED.getPurchaseAvailability— возвращает результат доступности работы с платежами.purchase— позволяет совершить покупку продукта с указанием желаемого типа оплаты - одностадийной (ONE_STEP) или двухстадийной (TWO_STEP). Для данного метода оплаты на платёжной шторке д оступны все способы оплаты. Если параметр не задан, по умолчанию запускается с оплатой в одну стадию.
Если указан тип оплаты TWO_STEP, будет произведена попытка запустить двухстадийную оплату, но итоговый результат напрямую будет зависеть от того, какой способ оплаты (карта, СБП и др.) будет выбран пользователем. Двухстадийная оплата доступна только для определенного набора способов оплаты (на текущий момент — только для карт). Технологии СБП не поддерживают двухстадийную оплату. Если выбран способ оплаты, который не поддерживает холдирование, то покупка будет запущена по сценарию с одной стадией.
purchaseTwoStep— запускает сценарий гарантированной двухстадийной покупки товара. При использовании данного метода пользователю на платёжной шторке доступен ограниченный набор способов оплаты — только те, которые поддерживают двухстадийную оплату. В процессе платежа сначала осуществляется холдирование денежных средств покупателя, которые списываются только после подтверждения покупки методомconfirmTwoStepPurchase.confirmTwoStepPurchase— подтверждение покупки, совершенной по двухстадийной оплате.cancelTwoStepPurchase— отмена покупки, совершённой по двухстадийной оплате.getProducts— позволяет получить информацию по активным продуктам, опубликованным в RuStore консоль.
Данный метод возвращает не более 1000 продуктов и работает без авторизации и наличия установленного RuStore на устройстве пользователя.
getUserAuthorizationStatus— проверяет статус авторизации пользователя.isRuStoreInstalled— проверки наличия приложения RuStore на устройстве пользователя.openRuStoreDownloadInstruction— открывает веб-страницу для скачивания приложения RuStore.openRuStore— запускает приложение RuStore.openRuStoreAuthorization— запускает приложение RuStore для авторизации. После успешной авторизации пользователя приложение RuStore автоматически закроется.
Проверка доступности работы с платежами
要检查支付可用性,请调用 GetPurchaseAvailability 方法。调用时将检查以下条件。
- У компании подключена монетизация через консоль разработчика RuStore.
- Приложение не должно быть заблокировано в RuStore.
- Пользователь не должен быть заблокирован в RuStore.
PurchaseAvailabilityResult.isAvailable == true。
В противном случае возвращается PurchaseAvailabilityResult.isAvailable == false и PurchaseAvailabilityResult.cause, где cause — это ошибка о невыполненном условии (возможные ошибки описаны в разделе Список ошибок).
cordova.plugins.RuStorePay.getPurchaseAvailability(
function(result) {
var data = JSON.parse(result);
if (data.isAvailable === true) {
// Process success
} else {
// Process data.cause
}
},
function(error) {
var data = JSON.parse(error);
// Process error
}
);
Проверка статуса авторизации пользователя
Для проверки статуса авторизации пользователя, вызовите метод getUserAuthorizationStatus. Результатом выполнения метода является значение перечисления UserAuthorizationStatus. Возможно только 2 значения:
AUTHORIZED— пользователь авторизован в RuStore.UNAUTHORIZED— пользователь неавторизован в RuStore. Данное значение также вернется если у пользователя нет установленного МП RuStore на девайсе.
cordova.plugins.RuStorePay.getUserAuthorizationStatus(
function(result) {
var data = JSON.parse(result);
if (data.userAuthorizationStatus == cordova.plugins.RuStorePay.UserAuthorizationStatus.AUTHORIZED) {
// Process AUTHORIZED
} else {
// Process UNAUTHORIZED
}
},
function(error) {
var data = JSON.parse(error);
// Process error
}
);
Получение списка продуктов
要获取通过 RuStore 控制台 添加到您的应用程序中的产品,需要使用方法 getProducts。
var productIds = ["product_id1", "product_id2"];
cordova.plugins.RuStorePay.getProducts(
productIds,
function(result) {
var data = JSON.parse(result);
// Process success
},
function(error) {
var data = JSON.parse(error);
// Process error
}
);
productIds — 产品标识符列表(在开发者控制台中创建产品时指定)。产品列表的大小限制为 1000 个元素。
在 RuStore 控制台中哪里可以看到产品 ID?
- 转到 应用程序 选项卡并选择所需的应用程序。
- 从左侧菜单中选择 货币化。
- 选择产品类型:订阅 或 一次性购买。
- 复制所需产品的 ID。

Метод возвращает список продуктов. Ниже представлена модель продукта.
{
productId, // string
type, // string cordova.plugins.RuStorePay.ProductType
amountLabel, // string
price, // number (optional)
currency, // string
title, // string
description, // string (optional)
imageUrl // string
}
productId— 在 RuStore 控制台中分配给产品的产品标识符(必填参数).type— 产品类型.CONSUMABLE/NON-CONSUMABLE/SUBSCRIPTION( 消耗型/非消耗型/订阅).amountLabel— 格式化的购买价格,包括货币符号.price— 以最小单位表示的价格(例如,戈比).currency— ISO 4217 货币代码.title— 用language语言表示的产品名称.description— 用language语言描述.imageUrl— 图片链接.
Получение списка покупок
要获取用户的购买列表,请使用getPurchases 方法。
var productType = null; // cordova.plugins.RuStorePay.ProductType
var purchaseStatus = null; // cordova.plugins.RuStorePay.ProductPurchaseStatus
// or cordova.plugins.RuStorePay.SubscriptionPurchaseStatus
cordova.plugins.RuStorePay.getPurchases(
productType,
purchaseStatus,
function(result) {
var data = JSON.parse(result);
// Process success
},
function(error) {
var data = JSON.parse(error);
// Process error
}
);