Не переживайте, с вашими деньгами все в порядке

В результате атак БПЛА пострадали инфраструктуры дата-центров Яндекса. Мы делаем все возможное для восстановления работы наших сервисов. Сейчас обращений больше, чем обычно, поэтому ожидание ответа может занять значимо больше времени. Поддержка ответит вам, как только сможет.

Спасибо за понимание и терпение.

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

Модуль «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-кода через getCPQR(merchantPayload) или getPaymentSessionId() ;
  • обновить QR-код на экране.

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

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

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

См. также

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