Быстрый старт
Модуль «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:
- Получите необходимые идентификаторы.
- Настройте проект.
- Настройте Associated Domains.
- Отладьте Universal Links.
Быстрый старт
Минимальный рабочий пример — от нуля до отображения 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).