Flutter银行API集成插件monobank_api_corp的使用

发布于 1周前 作者 htzhanglong 来自 Flutter

Flutter银行API集成插件monobank_api_corp的使用

这个包是未经官方认证的。

实现了用于与Monobank Corp API(API for Providers)工作的加密和特殊方法。

API文档:Monobank Open API for Providers

查看主包 monobank_api,它包含了与Monobank API交互的主要逻辑。这个包仅包含了一些额外的方法和类,用于处理Corp API和相关的加密。它设计用于服务器端使用。

使用方法

快速示例:

import 'dart:io';

import 'package:monobank_api/monobank_api.dart';
import 'package:monobank_api_corp/monobank_api_corp.dart';

void main() async {
  // 读取私钥文件并将其转换为字符串
  final keyPlainText = File('./keys/priv.key').readAsStringSync();
  // 从PEM文件中获取私钥
  final privateKey = MonoCorpRequestKey.getKeyFromPemFile(keyPlainText);

  // 初始化MonoCorpAPI实例
  final mono = MonoCorpAPI(privateKey);
  
  // 打印公司的名称
  print((await mono.getCompany()).name);

  // 获取用户信息
  final user = mono.user(requestId: 'X-Request-Id');
  // 获取客户信息
  final client = await user.clientInfo();

  // 筛选出余额货币为美元的账户
  final statement = client.accounts
      .where((account) => account.balance.currency == Currency.code('USD'))
      .first
      // 获取过去180天的交易记录
      .statement(
        DateTime.now().subtract(Duration(days: 180)),
        DateTime.now(),
      );

  // 遍历交易记录并打印
  await for (final item in statement.list(isReverseChronological: true)) {
    print('$item');
  }
}

示例代码

以下是一个完整的示例代码,你可以直接运行它来测试Monobank API的集成:

import 'dart:io';

import 'package:monobank_api/monobank_api.dart';
import 'package:monobank_api_corp/monobank_api_corp.dart';

void main() async {
  // 读取私钥文件并将其转换为字符串
  final keyPlainText = File('./keys/priv.key').readAsStringSync();
  // 从PEM文件中获取私钥
  final privateKey = MonoCorpRequestKey.getKeyFromPemFile(keyPlainText);

  // 初始化MonoCorpAPI实例
  final mono = MonoCorpAPI(privateKey);
  
  // 打印公司的名称
  print((await mono.getCompany()).name);

  // 获取用户信息
  final user = mono.user(requestId: 'X-Request-Id');
  // 获取客户信息
  final client = await user.clientInfo();

  // 筛选出余额货币为美元的账户
  final statement = client.accounts
      .where((account) => account.balance.currency == Currency.code('USD'))
      .first
      // 获取过去180天的交易记录
      .statement(
        DateTime.now().subtract(Duration(days: 180)),
        DateTime.now(),
      );

  // 遍历交易记录并打印
  await for (final item in statement.list(isReverseChronological: true)) {
    print('$item');
  }
}

更多关于Flutter银行API集成插件monobank_api_corp的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter银行API集成插件monobank_api_corp的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是一个关于如何在Flutter项目中集成并使用monobank_api_corp插件的示例代码。这个插件通常用于与Monobank的API进行交互,获取账户信息、汇率等。

1. 添加依赖

首先,在你的pubspec.yaml文件中添加monobank_api_corp依赖:

dependencies:
  flutter:
    sdk: flutter
  monobank_api_corp: ^最新版本号  # 请替换为实际的最新版本号

然后运行flutter pub get来获取依赖。

2. 导入包

在你的Dart文件中导入monobank_api_corp包:

import 'package:monobank_api_corp/monobank_api_corp.dart';

3. 配置API密钥(如果需要)

Monobank的API通常不需要API密钥,但如果你需要访问某些受保护的资源,请确保你已经获得了必要的凭证并正确配置。

4. 使用API获取数据

以下是一个简单的示例,展示如何使用monobank_api_corp插件获取当前汇率:

import 'package:flutter/material.dart';
import 'package:monobank_api_corp/monobank_api_corp.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  List<CurrencyRate> _currencyRates = [];

  @override
  void initState() {
    super.initState();
    _fetchCurrencyRates();
  }

  Future<void> _fetchCurrencyRates() async {
    try {
      final MonobankApiCorp api = MonobankApiCorp();
      final CurrencyRatesResponse response = await api.getCurrencyRates();
      setState(() {
        _currencyRates = response.currencyRates;
      });
    } catch (e) {
      print('Error fetching currency rates: $e');
    }
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Monobank API Integration'),
        ),
        body: _currencyRates.isEmpty
            ? Center(child: CircularProgressIndicator())
            : ListView.builder(
                itemCount: _currencyRates.length,
                itemBuilder: (context, index) {
                  final CurrencyRate rate = _currencyRates[index];
                  return ListTile(
                    title: Text('${rate.currencyCode} - ${rate.rate.toStringAsFixed(2)} UAH'),
                  );
                },
              ),
      ),
    );
  }
}

class CurrencyRate {
  final String currencyCode;
  final double rate;

  CurrencyRate({required this.currencyCode, required this.rate});
}

class CurrencyRatesResponse {
  List<CurrencyRate> currencyRates;

  CurrencyRatesResponse({required this.currencyRates});

  factory CurrencyRatesResponse.fromJson(Map<String, dynamic> json) {
    List<CurrencyRate> rates = json['rates']
        .map<CurrencyRate>((rateJson) => CurrencyRate(
              currencyCode: rateJson['currency'],
              rate: rateJson['rate'].toDouble(),
            ))
        .toList();

    return CurrencyRatesResponse(currencyRates: rates);
  }
}

注意事项

  1. API响应格式:上述示例假设API响应的格式与你定义的CurrencyRatesResponseCurrencyRate类匹配。实际使用时,请根据Monobank API的实际响应格式进行调整。

  2. 错误处理:在实际应用中,你可能需要更详细的错误处理逻辑,比如重试机制、用户提示等。

  3. API速率限制:请注意Monobank API的速率限制,避免过于频繁的请求导致IP被封禁。

  4. 数据更新:如果你需要定期更新数据,可以考虑使用Timer或Flutter的Future.delayed等方法。

通过上述步骤,你应该能够在Flutter应用中成功集成并使用monobank_api_corp插件来获取Monobank的API数据。

回到顶部