QR‑код от Яндекс Пэй для Flutter
Yandex Quick Pay SDK для Flutter позволяет добавить в мобильное приложение виджет быстрой оплаты через Яндекс Пэй. Пользователь один раз авторизуется, после чего может оплачивать покупки в офлайн-точках: приложение генерирует QR-код, который кассир сканирует на терминале.
Пакет: yandex_quick_pay на pub.dev
Требования
| Параметр | Минимальная версия |
|---|---|
| Flutter | 3.0+ |
| Dart | 3.0+ |
| Android | API 24+ (Android 7.0) |
| iOS | 15.0+ |
Перед началом интеграции получите:
- Merchant ID — идентификатор вашего магазина. Выдаётся менеджером Яндекс Пэй при подключении.
- Для Android: OAuth Client ID, настройка build.gradle.
- Для iOS: OAuth Client ID, Info.plist и Entitlements.
Быстрый старт
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
Android: YandexQuickPay.instance.handleUserActivity(uri) или handleOpenURL(uri).
iOS: в AppDelegate передать URL в YandexQuickPay.instance.handleOpenURL(url).
Жизненный цикл платёжной сессии
Сессия действительна до момента, определяемого сервером. При истечении вызывается onSessionExpired() — запросите новую сессию через getPaymentSessionId() и обновите QR.
Когда обновлять QR: при первом отображении экрана, onSessionExpired(), onPaymentResult(), onPaymentEnabledStateChanged(true).