finipay 0.1.1
finipay: ^0.1.1 copied to clipboard
SDK кошелька Finipay для Flutter: переводы, вывод и пополнение через MBank и MegaPay, оплата по QR, баланс и история.
example/example.md
Пример: вход, баланс и перевод #
Полное руководство — README пакета. Ключи шифрования приходят из
--dart-define-from-file, код входа — с вашего бэкенда.
import 'package:finipay/finipay.dart';
import 'package:flutter/material.dart';
Future<void> main() async {
await Finipay.init(
environment: FinipayEnvironment.stand,
tenant: 'REDPAY',
transferKey: const String.fromEnvironment('FINIPAY_TRANSFER_KEY'),
transferIv: const String.fromEnvironment('FINIPAY_TRANSFER_IV'),
// Одноразовый код входа от вашего бэкенда; ключ партнёра — только там.
partnerCode: () => myBackend.finipayCode(),
partnerUser: () => myAuth.currentUserId,
);
Finipay.instance.authEvents.listen((event) {
if (event is SignedOut) {
// Сессия закрыта или сменился пользователь: сбросьте экраны кошелька.
}
});
runApp(const MyApp());
}
Future<String> balanceText() async {
final balance = await Finipay.instance.users.balance();
return MoneyFormatter(locale: 'ru').format(balance);
}
/// Перевод по номеру: проверить, показать, подтвердить.
Future<String> transfer({required String phone, required Money amount}) async {
try {
final payment = await Finipay.instance.payments.prepareTransfer(
phone: phone,
amount: amount,
);
// Имя — от сервера; человек сверяет его до нажатия «Перевести».
if (!await confirmScreen(payment.recipientName ?? payment.phone)) {
return 'Отменено';
}
var outcome = await payment.confirm();
if (outcome is PaymentPending) {
outcome = await payment.settle(); // итог по статусу
}
return switch (outcome) {
PaymentAuthorized() => 'Перевод выполнен',
PaymentDeclined(:final message) => message,
PaymentPending() => 'Отправляем…',
// Исход неизвестен: не «не прошло». Повтор confirm() безопасен.
PaymentIndeterminate() => 'Проверяем результат…',
PaymentCancelled() => 'Отменено',
};
} on FinipayError catch (error) {
// Сервер платёж не принял: нет кошелька, неверный номер или сумма.
return error.message;
}
}