yandex_pay_pay_with_redirect 2.4.0
yandex_pay_pay_with_redirect: ^2.4.0 copied to clipboard
Yandex Pay "pay with redirect" module for Flutter. Adds the redirect payment flow (Yandex Pay button + async payment-URL bridge) on top of yandex_pay_core.
Yandex Pay — Pay with Redirect for Flutter #
Flutter-плагин для интеграции сценария «оплата через редирект» Яндекс Пэй в мобильные приложения (Android и iOS). Модуль добавляется поверх yandex_pay_core и предоставляет кнопку Яндекс Пэй, а также асинхронный мост для получения платёжной ссылки по нажатию на кнопку.
Установка #
Добавьте зависимость в pubspec.yaml:
dependencies:
yandex_pay_pay_with_redirect: ^2.3.0
Затем:
flutter pub get
Быстрый старт #
- Инициализация в
main()доrunApp()через модульную архитектуруyandex_pay_core:
import 'package:yandex_pay_pay_with_redirect/yandex_pay_pay_with_redirect.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
await YPay.initialize(
modules: [
payWithRedirectModule(
merchantId: 'YOUR_MERCHANT_ID',
environment: YPayEnvironment.sandbox,
),
],
);
YPayWithRedirect.instance.onPaymentResult = (result) {
switch (result) {
case PayWithRedirectSuccess(:final orderId):
print('Оплата успешна: $orderId');
case PayWithRedirectCancelled():
print('Оплата отменена');
case PayWithRedirectFailure(:final message):
print('Ошибка оплаты: $message');
}
};
runApp(const MyApp());
}
- Кнопка Яндекс Пэй. Платёжная ссылка запрашивается у приложения по нажатию
(в течение ≤10 c) через
paymentUrlProvider:
YandexPayButton(
paymentUrlProvider: () async {
// Запросите платёжную ссылку у вашего бэкенда.
return backend.createPaymentUrl(cart);
},
)
Асинхронный мост платёжной ссылки #
- По нажатию на нативную кнопку нативный слой генерирует
requestIdи отправляет событиеrequestPaymentUrl. - Фасад находит
PaymentUrlProvider, который кнопка зарегистрировала при монтировании (по внутреннему correlation-ключу), дожидается результата и вызываетprovidePaymentUrlс{requestId, url}при успехе или{requestId, error}при ошибке. - Нативный слой запускает оплату с полученной ссылкой.
Требования #
- Flutter 3.0+
- Dart 3.0+
- Android: API 24+ (Android 7.0)
- iOS: 15.0+
Android: хост-Activity #
MainActivity приложения должна наследовать FlutterFragmentActivity, а не
стандартную FlutterActivity. Кнопка регистрирует лончер через
registerForActivityResult, который работает только на ComponentActivity
(наследником которой является FlutterFragmentActivity); иначе нажатие на кнопку
ни к чему не приведёт.
import io.flutter.embedding.android.FlutterFragmentActivity
class MainActivity : FlutterFragmentActivity()
Не задавайте MainActivity пустой android:taskAffinity="". Возврат оплаты
приходит по applink в системную RedirectPollingHostActivity (launchMode="singleTask"
с task-affinity по имени пакета). Пустой affinity у MainActivity разводит их по
разным таскам — applink не попадает в живой инстанс host-Activity, оплата
завершается как Cancelled вместо Success. Оставьте affinity по умолчанию.
iOS: возврат оплаты (associated domains) #
Для возврата в приложение после оплаты в браузере добавьте entitlement
com.apple.developer.associated-domains с applink-хостами мерчанта:
applinks:<MERCHANT_ID>.merchant.applink.pay.yandex.ru
applinks:<MERCHANT_ID>.merchant.applink.sandbox.pay.yandex.ru
Universal link ловит FlutterAppDelegate и форвардит в core-плагин
(YandexPayCorePlugin реализует FlutterApplicationLifeCycleDelegate →
YPay.deeplinkHandler), поэтому код в AppDelegate/SceneDelegate писать не нужно —
достаточно entitlement. Возврат проверяется на реальном устройстве (на симуляторе
universal links не работают).
Полная документация и описание API: Яндекс Пэй для Flutter.
Лицензия #
Proprietary License — см. LICENSE.