finipay 0.0.1
finipay: ^0.0.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);
}
/// Перевод по номеру. [reference] создают один раз на экран перевода.
Future<String> transfer({
required String reference,
required String phone,
required Money amount,
}) async {
final transfers = Finipay.instance.transfers;
final recipient = await transfers.checkRecipient(phone);
final order = recipient.orderFor(PaymentProvider.finipay);
if (order == null) return 'У номера нет кошелька Finipay';
final intent = await transfers.begin(
reference,
orderNumber: order.orderNumber,
);
final outcome = await transfers.createTransfer(
intent: intent,
request: TransferPayRequest.forIntent(
intent: intent,
recipient: recipient.phone,
amount: amount,
),
);
return switch (outcome) {
PaymentAuthorized() => 'Перевод выполнен',
PaymentDeclined(:final message) => message,
PaymentPending() => 'Отправляем…',
// Исход неизвестен: не «не прошло» — проверьте статус.
PaymentIndeterminate() => 'Проверяем результат…',
PaymentCancelled() => 'Отменено',
};
}