README.md

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

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

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

Android

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

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

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

 maven {
            url = uri("https://artifactory-external.vkpartner.ru/artifactory/maven")
        }

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

  • 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;
}): 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 - количество продукта.

2. SubscriptionPurchase (покупка подписки)

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

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

    Статусы покупки продукта 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 - подписка была отменена пользователем или разработчиком. Истек срок оплаченного периода, подписка закрыта.

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

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

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

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

Покупки

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

// Двухшаговая покупка
RuStoreReactPay.purchaseTwoStep(params: {
  productId: string;
  orderId?: string;
  quantity?: number;
  developerPayload?: string;
  appUserId?: string;
  appUserEmail?: string;
}): 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>

Работа с 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 - предпочтительный тип покупки

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

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

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

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

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

Релизы
10.0.1 2025-10-09
Конвейеры
0 успешных
0 с ошибкой