Быстрый старт

Модуль «CP QR» для Flutter управляет авторизацией пользователя в виджете быстрой оплаты через Яндекс Пэй, созданием платежной сессии и обработкой статуса оплаты. SDK возвращает sessionId, на основе которого приложение генерирует и отображает QR-код для оплаты на кассе.

SDK доступен в репозитории yandex_pay_quickpay на pub.dev.

Требования

Параметр Минимальная версия
Flutter 3.0
Dart 3.0
Android 7.0 (API 24)
iOS 15.0

Подготовка

Для Android:

Для iOS:

Быстрый старт

Минимальный рабочий пример — от нуля до отображения QR-кода. Подробнее — в разделе Подключение.

Шаг 1. Добавьте зависимость

Номер версии

При установке указывайте актуальную версию Yandex Pay Kit для Flutter. Ее номер можно посмотреть в истории изменений.

# pubspec.yaml
dependencies:
  yandex_pay_quickpay: ^2.3.0
flutter pub get

Шаг 2. Инициализируйте SDK в main()

import 'package:yandex_pay_quickpay/yandex_pay_quickpay.dart';

void main() async {
  WidgetsFlutterBinding.ensureInitialized();

  final listener = YQuickPaymentStateListener(
    onPaymentEnabledStateChanged: (isEnabled) {},
    onSessionExpired: () {},
    onPaymentResult: (result) {},
  );

  await YPay.initialize(
    environment: YPayEnvironment.sandbox,
    modules: [
      quickPayModule(
        merchantId: 'YOUR_MERCHANT_ID',
        stateListener: listener,
      ),
    ],
  );

  runApp(const MyApp());
}

Шаг 3. Вызовите initUi() перед оплатой

await YQuickPay.instance.initUi();

Шаг 4. Добавьте виджеты

// Список способов оплаты
YandexPaymentMethodsWidget()

// Бейдж активного способа оплаты
YandexActivePaymentMethodBadge()

Шаг 5. Обработайте deep links

Deep links обрабатываются через общий YPay.instance.deeplinkHandler, который относится к ядру yandex_pay_core, а не к модулю CP QR.

Android

На Android ручной вызов deeplinkHandler не требуется — deep links перехватываются системой через Activity intent handling.

iOS

В AppDelegate передайте URL в Flutter-плагин — он вызовет YPay.instance.deeplinkHandler.handleOpenURL.

Future<bool> handleUrlScheme(String url) {
  return YPay.instance.deeplinkHandler.handleOpenURL(url);
}
Future<bool> handleUniversalLink(String url) {
  return YPay.instance.deeplinkHandler.handleUserActivity(url);
}

Жизненный цикл платежной сессии

Платежная сессия ограничена по времени (expires_at, задается сервером). Когда сессия истекает, SDK вызывает onSessionExpired(). В этом случае нужно:

  • запросить новые данные для QR-кода через getPaymentSessionId() или getCPQR(merchantPayload);
  • обновить QR-код на экране.

SDK предоставляет два способа получения данных для QR-кода:

  • getPaymentSessionId() — возвращает sessionId, на основе которого приложение формирует QR-код;
  • getCPQR(merchantPayload) — возвращает готовую строку CP QR в формате YAQR<payload>, если нужно передать собственные данные (например, токен программы лояльности).

Когда обновлять QR: при первом отображении экрана, onSessionExpired(), onPaymentResult(), onPaymentEnabledStateChanged(true).

См. также

Предыдущая
Следующая