README.md

RU EN

Пример подключения библиотеки RuStore Pay SDK для React Native

Этот проект демонстрирует подключение и использование библиотеки ru.rustore.sdk-wrapper.react-native:pay:11.1.0 для работы с платежной системой SDK Pay в React Native приложении.

Подключение библиотеки

Android

Библиотека подключена в файле android/app/build.gradle:

dependencies {
    implementation("com.facebook.react:react-android")
    implementation("ru.rustore.sdk-wrapper.react-native:pay:11.1.0")
    
    // ... остальные зависимости
}

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

 maven {
            url = uri("https://nexus-external.vkteam.ru/repository/maven-rustore-exposed/")
        }

Настройка проекта

  • Application ID: ru.rustore.react.pay.example
  • Минимальная версия SDK: Android API 24
  • Целевая версия SDK: Android API 36

Регистрация нативного модуля

Для работы библиотеки необходимо зарегистрировать нативный модуль в MainApplication.java:

import ru.rustore.react.pay.RuStoreReactPayPackage;

// ...

@Override
protected List<ReactPackage> getPackages() {
  @SuppressWarnings("UnnecessaryLocalVariable")
  List<ReactPackage> packages = new PackageList(this).getPackages();
  packages.add(new RuStoreReactPayPackage());
  return packages;
}

JavaScript интерфейс

В проекте реализован JavaScript интерфейс для работы с нативным модулем Android. Все методы расположены в директории src/libs/RuStoreReactPay/ эти файлы необходимо перенести к себе в проект.

Основные файлы

  • index.tsx - основной модуль с методами для работы с платежами
  • types.ts - TypeScript типы для работы с платежами

Доступные методы

Получение информации о покупках

// Получить информацию о конкретной покупке
RuStoreReactPay.getPurchase(purchaseId: string): Promise<{
  productPurchase?: ProductPurchase;
  subscriptionPurchase?: SubscriptionPurchase;
}>

// Получить список покупок с фильтрацией
RuStoreReactPay.getPurchases(params?: {
  productType?: ProductType;
  purchaseStatus?: ProductPurchaseStatus | SubscriptionPurchaseStatus;
  acknowledgementState?: AcknowledgementState;
}): Promise<Array<{
  productPurchase?: ProductPurchase;
  subscriptionPurchase?: SubscriptionPurchase;
}>>

Структура моделей покупок

1. ProductPurchase (покупка товара)

  • purchaseId - идентификатор покупки. Используется для получения информации о покупке в SDK.
  • invoiceId - идентификатор счета. Используется для серверной валидации платежа, поиска платежей в консоли разработчика, а также отображается покупателю в истории платежей.
  • orderId - уникальный идентификатор оплаты, указанный разработчиком или сформированный автоматически (uuid).
  • purchaseType - тип покупки (одностадийная/двухстадийная).
  • description - описание покупки.
  • purchaseTime - время покупки.
  • price - цена в минимальных единицах валюты.
  • amountLabel - отформатированная цена покупки, включая валютный знак.
  • currency - код валюты ISO 4217.
  • status - состояние покупки товара.
  • developerPayload - указанная разработчиком строка, содержащая дополнительную информацию о заказе.
  • sandbox - флаг, указывающий признак тестового платежа. Если true - покупка совершена в режиме тестирования.
  • productId - идентификатор приобретенного продукта, указанный при создании в консоли разработчика.
  • productType - тип продукта.
  • quantity - количество продукта.
  • acknowledgementState — состояние выдачи товара:
    • PENDING — товар оплачен, выдача ещё не подтверждена разработчиком;
    • ACKNOWLEDGED — выдача товара подтверждена;
    • UNKNOWN — логика подтверждения к платежу не применима 2. SubscriptionPurchase (покупка подписки)
  • purchaseId - идентификатор покупки. Используется для получения информации о покупке в SDK.
  • invoiceId - идентификатор счета. Используется для серверной валидации платежа, поиска платежей в консоли разработчика, а также отображается покупателю в истории платежей.
  • orderId - уникальный идентификатор оплаты, указанный разработчиком или сформированный автоматически (uuid).
  • purchaseType - тип покупки (oneStep, twoStep - одностадийная/двухстадийная).
  • description - описание покупки.
  • purchaseTime - время покупки.
  • price - цена в минимальных единицах валюты.
  • amountLabel - отформатированная цена покупки, включая валютный знак.
  • currency - код валюты ISO 4217.
  • developerPayload - указанная разработчиком строка, содержащая дополнительную информацию о заказе.
  • sandbox - флаг, указывающий признак тестового платежа. Если true - покупка совершена в режиме тестирования.
  • status - состояние покупки подписки.
  • productId - идентификатор приобретенной подписки, указанный при создании в консоли разработчика.
  • expirationDate - дата окончания срока действия подписки.
  • gracePeriodEnabled - флаг, указывающий, активен ли льготный период для подписки.
  • acknowledgementState — состояние выдачи товара:

    • PENDING — товар оплачен, выдача ещё не подтверждена разработчиком;
    • ACKNOWLEDGED — выдача товара подтверждена;
    • UNKNOWN — логика подтверждения к платежу не применима

      Статусы покупок

      Статусы покупки продукта ProductPurchaseStatus:

  • INVOICE_CREATED - создан счет на оплату, покупка ожидает оплаты.
  • CANCELLED - отменён пользователем до запуска оплаты.
  • PROCESSING - запущена оплата.
  • REJECTED - отказ при платеже (недостаточно средств, невалидный CVC или другие причины).
  • CONFIRMED - финальный статус успешного платежа, денежные средства списаны с покупателя.
  • REFUNDED - запрос на возврат средств выполнен успешно. Деньги будут возвращены пользователю в течение 10 рабочих дней.
  • REFUNDING - инициирован возврат, запрос отправлен в эквайер.
  • EXECUTING - покупка находится в процессе выполнения.
  • EXPIRED - срок действия счета истек.
  • PAID - только для двухстадийной оплаты. Холдирование средств на карте пользователя прошло успешно, покупка ожидает подтверждения.
  • REVERSED - только для двухстадийной оплаты. Не поступило запроса на подтверждение холда, холд отменён, деньги возвращены покупателю. Статусы покупки подписки SubscriptionPurchaseStatus:
  • INVOICE_CREATED - создан счет на оплату, подписка ожидает оплаты.
  • CANCELLED - подписка отменена пользователем.
  • EXPIRED - срок действия подписки истек.
  • PROCESSING - платеж в обработке.
  • REJECTED - платеж отклонен.
  • ACTIVE - подписка активна.
  • PAUSED - подписка приостановлена из-за проблем с оплатой.
  • TERMINATED - закончились попытки списания по подписке (все были неуспешными). Подписка закрыта автоматически из-за проблем с оплатой.
  • CLOSED - подписка была отменена пользователем или разработчиком. Истек срок оплаченного периода, подписка закрыта. Состояние выдачи товара:
    • PENDING: Товар оплачен, но выдача ещё не подтверждена.
    • ACKNOWLEDGED: Выдача товара подтверждена. Передача значения UNKNOWN равнозначна отсутствию фильтра — отобрать покупки именно в состоянии UNKNOWN нельзя.

Работа с подтверждением выдачи товара

Для обновления состояния подтверждения покупки используйте метод updateAcknowledgementState.

// Работа с подтверждением выдачи товара
RuStoreReactPay.updateAcknowledgementState(
  purchaseId: string,
  acknowledgementState: AcknowledgementState,
  developerPayload?: string,
): Promise<AcknowledgementState>

Логика не является обязательной и не влияет на проведение платежей. Она позволяет хранить на стороне RuStore состояние обработки покупки, чтобы затем при получении списка покупок с отдельной фильтрацией выбирать только необработанные покупки и выполнять по ним выдачу товара. После успешного проведения платежа статус выдачи товара по умолчанию имеет значение PENDING. Для платежей, совершённых в более ранних версиях SDK, где эта логика ещё не поддерживалась, используется статус UNKNOWN. При необходимости такой статус можно изменить на любой другой. Статус обработки можно изменять в обе стороны: например, переводить покупку из PENDING в ACKNOWLEDGED, а также возвращать её в предыдущий статус, если требуется отозвать ранее выданный товар, например после возврата платежа. При вызове этого метода значение developerPayload можно обновить. Если параметр передан, текущее значение будет перезаписано. Если параметр не передан, сохранится текущее значение developerPayload.

Метод возвращает фактическое состояние выдачи товара после выполнения операции.

  • purchaseId — идентификатор покупки.
  • acknowledgementState — новое состояние подтверждения покупки. Доступные значения: PENDING, ACKNOWLEDGED, UNKNOWN
  • developerPayload — строка с дополнительной информацией о заказе, которую вы можете установить при подтверждении покупки. Эта строка переопределяет значение, заданное при инициализации. Максимальная длина 250 символов (опционально).

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

// Проверить доступность покупок
RuStoreReactPay.getPurchaseAvailability(): Promise<PurchaseAvailability>

Работа с продуктами

// Получить информацию о продуктах
RuStoreReactPay.getProducts(ids: string[]): Promise<Product[]>
  • productId - идентификатор продукта, указанный при создании продукта в консоли разработчика.
  • type - тип продукта (потребляемый / непотребляемый / подписка).
  • amountLabel - отформатированная цена товара, включая валютный знак.
  • price - цена в минимальных единицах (копейках).
  • currency - код валюты ISO 4217.
  • title - название продукта.
  • description - описание продукта.
  • imageUrl - ссылка на иконку продукта.
  • subscriptionInfo - информация о подписке (только для продуктов типа SUBSCRIPTION).
    • periods - массив периодов подписки:
      • type - тип периода (“MAIN”, “TRIAL”, “PROMO”, “GRACE”, “HOLD”)
      • duration - длительность периода
      • currency - код валюты
      • price - цена в минимальных единицах

Покупки

// Одношаговая покупка
RuStoreReactPay.purchase(params: {
  productId: string;
  orderId?: string;
  quantity?: number;
  developerPayload?: string;
  appUserId?: string;
  appUserEmail?: string;
  preferredPurchaseType?: PreferredPurchaseType;
  sdkTheme?: SdkTheme;
  purchaseEventListener?: PurchaseEventListener,
}): Promise<ProductPurchaseResult>

// Двухшаговая покупка
RuStoreReactPay.purchaseTwoStep(params: {
  productId: string;
  orderId?: string;
  quantity?: number;
  developerPayload?: string;
  appUserId?: string;
  appUserEmail?: string;
  sdkTheme?: SdkTheme;
  purchaseEventListener?: PurchaseEventListener;
}): Promise<ProductPurchaseResult>

Структура ProductPurchaseResult (результат успешного запуска покупки):

  • purchaseId - идентификатор покупки. Используется для получения информации о покупке в SDK методом получения информации о покупке
  • productId - идентификатор приобретенного продукта, указанный при создании в консоли разработчика RuStore.
  • invoiceId - идентификатор счета. Используется для серверной валидации платежа, поиска платежей в консоли разработчика, а также отображается покупателю в истории платежей в мобильном приложении RuStore
  • orderId - уникальный идентификатор оплаты, указанный разработчиком или сформированный автоматически (uuid).
  • purchaseType - тип покупки (ONE_STEP/TWO_STEP - одностадийная\двухстадийная)
  • productType - тип продукта (consumable, nonConsumable, subscription).
  • sandbox - флаг, указывающий признак тестового платежа в песочнице. Если TRUE - покупка совершена в режиме тестирования
  • quantity - кол-во купленного продукта.
// Подтверждение двухшаговой покупки
RuStoreReactPay.confirmTwoStepPurchase(params: {
  //идентификатор покупки
  purchaseId: string;
  //дополнительная информация от разработчика AnyApp (опционально).Максимально 250 символов. 
  //Если передан, заменяет значение, записанное при старте покупки методом purchase/purchaseTwoStep.
  developerPayload?: string;
}): Promise<void>

// Отмена двухшаговой покупки
RuStoreReactPay.cancelTwoStepPurchase(purchaseId: string): Promise<void>

Получение списка подписок, оформленных в SDK Billing Client

// Получение списка подписок, оформленных в SDK Billing Client
RuStoreReactPay.getBillingSubscriptions(): Promise<BillingSubscription[]>

Структура BillingSubscription:

  • purchaseId — идентификатор покупки. Идентификатор покупки. Используется для получения информации о покупке в SDK.
  • invoiceId — идентификатор счета. Идентификатор счета. Используется для серверной валидации платежа, поиска платежей в консоли разработчика, а также отображается покупателю в истории платежей.
  • orderId — уникальный идентификатор оплаты, указанный разработчиком или сформированный автоматически (uuid).
  • purchaseType — тип покупки. Тип покупки: ONE_STEP/TWO_STEP — одностадийная/двухстадийная.
  • status — статус покупки типа SubscriptionPurchaseStatus.
  • description — описание на языке language. Описание покупки.
  • purchaseTime — время покупки. Время покупки.
  • price — цена в минимальных единицах (в копейках). Цена в минимальных единицах валюты.
  • amountLabel — отформатированная цена покупки, включая валютный знак. Отформатированная цена покупки, включая валютный знак.
  • currency — код валюты ISO 4217. Код валюты ISO 4217.
  • developerPayload — строка с дополнительной информацией о заказе, которую вы можете установить при подтверждении покупки. Эта строка переопределяет значение, заданное при инициализации. Максимальная длина 250 символов. Символы не экранируются (при использовании кавычек требуется экранирование). Указанная разработчиком строка, содержащая дополнительную информацию о заказе.
  • sandbox — флаг тестового платежа. Значение true — тестовый платеж, false— реальный платеж.
  • productId — идентификатор продукта, который был присвоен продукту в RuStore Консоли (обязательный параметр). Идентификатор продукта подписки.
  • expirationDate — дата окончания срока действия подписки.
  • gracePeriodEnabled — флаг, указывающий, активен ли льготный период для подписки.
  • subscriptionToken — токен для валидации покупки на сервере. Токен для валидации покупки на сервере.

Работа с RuStore

// Проверить статус авторизации пользователя
RuStoreReactPay.getUserAuthorizationStatus(): Promise<boolean>

// Проверить установлен ли RuStore
RuStoreReactPay.isRuStoreInstalled(): Promise<boolean>

// Открыть RuStore
RuStoreReactPay.openRuStore(): Promise<void>

// Открыть авторизацию в RuStore
RuStoreReactPay.openRuStoreAuthorization(): Promise<void>

// Открыть инструкцию по установке RuStore
RuStoreReactPay.openRuStoreDownloadInstruction(): Promise<void>

Обработка ошибок

// Проверить является ли ошибка ошибкой RuStore Pay
RuStoreReactPay.isRuStorePayError(error: unknown): error is RuStorePayError

Список ошибок и их описание https://www.rustore.ru/help/sdk/pay/kotlin-java/10-0-0#handlingerrors

Типы данных

Основные типы

  • ProductType - тип продукта (CONSUMABLE_PRODUCT, NON_CONSUMABLE_PRODUCT, SUBSCRIPTION, UNDEFINED)
  • ProductPurchaseStatus - статус покупки продукта
  • SubscriptionPurchaseStatus - статус подписки
  • PurchaseType - тип покупки (ONE_STEP, TWO_STEP, UNDEFINED)
  • PreferredPurchaseType - предпочтительный тип покупки (ONE_STEP, TWO_STEP)
  • PurchaseEventListener - набор callback функций, позволяющий получать данные об invoiceId и purchaseId на разных этапах покупки - опционально.
  • SdkTheme - тема интерфейса оплаты (LIGHT, DARK)

Пример использования

import { RuStoreReactPay } from './src/libs/RuStoreReactPay';

// Получить список продуктов
const products = await RuStoreReactPay.getProducts(['product1', 'product2']);

// Проверить доступность покупок
const availability = await RuStoreReactPay.getPurchaseAvailability();

// Выполнить покупку
const result = await RuStoreReactPay.purchase({
  productId: 'product1',
  quantity: 1,
  appUserId: 'user123'
});

Запуск проекта

# Установка зависимостей
npm install

# Запуск на Android
npm run android

Требования

  • Node.js >= 20
  • React Native 0.81.4
  • Android SDK 24+
  • Установленный RuStore на устройстве для тестирования платежей

Примечания

  • Все методы асинхронные и возвращают Promise
  • Библиотека поддерживает как одностадийные, так и двухстадийные покупки
  • Реализована полная TypeScript типизация для удобства разработки
  • На данный момент покупка подписки может быть совершена только с использованием одностадийного платежа и потребуют предустановленный RuStore
  • Для неавторизованных пользователей при покупке подписки будет автоматически открыто окно авторизации
  • Поддерживаются две темы интерфейса оплаты: LIGHT (светлая) и DARK (темная)
  • Тема применяется к интерфейсу оплаты и влияет на внешний вид формы платежа

Пояснения по работе с одностадийные и двухстадийными оплатами

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

  • В случае использования двухстадийного платежа сначала производится холдирование средств на счете покупателя. Комиссия в этом случае не удерживается. После холдирования покупка требует подтверждения или отмены. Комиссия с разработчика удерживается при подтверждении покупки. Отмена покупки означает снятие холда - денежные средства мгновенно снова доступны покупателю. ВАЖНО! Не все способы оплаты поддерживают двухстадийную оплату.

Описание
Релизы
2026-08-19
последний
Конвейеры
0 успешных
0 с ошибкой
Разработчики