Быстрый старт
Модуль «CP QR» для Flutter управляет авторизацией пользователя в виджете быстрой оплаты через Яндекс Пэй, созданием платежной сессии и обработкой статуса оплаты. SDK возвращает sessionId, на основе которого приложение генерирует и отображает QR-код для оплаты на кассе.
SDK доступен в репозитории yandex_quick_pay на pub.dev.
Требования
| Параметр | Минимальная версия |
|---|---|
| Flutter | 3.0+ |
| Dart | 3.0+ |
| Android | API 24+ (Android 7.0) |
| iOS | 15.0+ |
Перед началом интеграции получите:
- Merchant ID — идентификатор магазина в личном кабинете Яндекс Пэй. Узнать Merchant ID.
- Для Android: OAuth Client ID, настройка build.gradle.
- Для iOS: OAuth Client ID, Info.plist и Entitlements.
Быстрый старт
Минимальный рабочий пример — от нуля до отображения QR-кода. Подробнее — в разделе Подключение.
Шаг 1. Добавьте зависимость
# pubspec.yaml
dependencies:
yandex_quick_pay: ^1.1.0
flutter pub get
Шаг 2. Инициализируйте SDK в main()
import 'package:yandex_quick_pay/yandex_quick_pay.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
await YandexQuickPay.initialize(
config: const QuickPayConfig(
merchantId: 'YOUR_MERCHANT_ID',
environment: QuickPayEnvironment.sandbox,
),
listener: QuickPaymentStateListener(
onPaymentEnabledStateChanged: (isEnabled) {},
onSessionExpired: () {},
onPaymentResult: (result) {
if (result is QuickPaySuccess) {}
else if (result is QuickPayFailure) {}
},
),
);
runApp(const MyApp());
}
Шаг 3. Вызовите initUi() перед оплатой
await YandexQuickPay.instance.initUi();
Шаг 4. Добавьте виджеты
// Список способов оплаты
YandexPaymentMethodsWidget()
// Бейдж активного способа оплаты
YandexActivePaymentMethodBadge()
Шаг 5. Обработайте deep links
Передайте полученный URL в YandexQuickPay.
YandexQuickPay.instance.handleUserActivity(uri);
// или
YandexQuickPay.instance.handleOpenURL(uri);
В AppDelegate:
YandexQuickPay.instance.handleOpenURL(url)
Жизненный цикл платежной сессии
Платежная сессия ограничена по времени (expires_at, задается сервером). Когда сессия истекает, SDK вызывает onSessionExpired(). В этом случае нужно:
- запросить новый
sessionIdчерезgetPaymentSessionId(); - обновить QR-код на экране.
Когда обновлять QR: при первом отображении экрана, onSessionExpired(), onPaymentResult(), onPaymentEnabledStateChanged(true).