Files
eatvio_app/lib/features/payment/services/sbp_service.dart

44 lines
2.3 KiB
Dart
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import 'package:sbp/data/c2bmembers_data.dart';
import 'package:sbp/models/c2bmembers_model.dart';
import 'package:sbp/sbp.dart' as sbp;
/// Контракт обёртки над нативным плагином СБП (Система Быстрых Платежей).
///
/// Статичные методы класса [Sbp] из пакета `sbp` работают через MethodChannel,
/// поэтому не поддаются прямому мокированию в тестах. Этот интерфейс вводится
/// для тестируемости и возможности подмены реализации (см. [SbpServiceImpl]).
abstract class SbpService {
/// Возвращает список банков, установленных на устройстве пользователя
/// и поддерживающих оплату по СБП.
Future<List<C2bmemberModel>> getInstalledBanks();
/// Открывает банковское приложение [bank] для оплаты по ссылке [url]
/// (checkout_url вида `https://qr.nspk.ru/...`).
///
/// Возвращает `true`, если приложение банка успешно запущено.
Future<bool> openBank({required String url, required C2bmemberModel bank});
}
/// Реализация [SbpService], делегирующая вызовы в статичные методы пакета `sbp`.
class SbpServiceImpl implements SbpService {
const SbpServiceImpl();
@override
Future<List<C2bmemberModel>> getInstalledBanks() {
// Используем встроенный справочник банков c2bmembersData (получаемый с
// https://qr.nspk.ru/proxyapp/c2bmembers.json) и фильтруем только те, что
// установлены на устройстве. Локальные иконки/названия включены, чтобы UI
// не зависел от сетевой загрузки логотипов.
return sbp.Sbp.getInstalledBanks(
C2bmembersModel.fromJson(c2bmembersData),
useAndroidLocalIcons: true,
useAndroidLocalNames: true,
);
}
@override
Future<bool> openBank({required String url, required C2bmemberModel bank}) {
return sbp.Sbp.openBank(url, bank);
}
}