Flutter支付集成插件monnify_flutter_sdk_plus的使用

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

Flutter支付集成插件monnify_flutter_sdk_plus的使用

初始化

要使用此插件,在你的 pubspec.yaml 文件中添加 monnify_flutter_sdk_plus 作为依赖项。

dependencies:
  monnify_flutter_sdk_plus: ^版本号

如何使用

该插件提供了两个API:

1. 初始化

初始化插件。这一步应该在小部件的 initState 中完成。

import 'package:monnify_flutter_sdk_plus/monnify_flutter_sdk_plus.dart';

class _MyAppState extends State<MyApp> {
  [@override](/user/override)
  void initState() {
    super.initState();
    MonnifyFlutterSdkPlus.initialize(
      'YOUR_API_KEY', 
      'CONTRACTCODE', 
      ApplicationMode.TEST
    );
  }
}

2. 初始化支付

创建一个 Transaction 对象并传递给 initializePayment 函数。

Future<void> initPayment() async {
  TransactionResponse transactionResponse =
      await MonnifyFlutterSdkPlus.initializePayment(Transaction(
    2000,
    "NGN",
    "Customer Name",
    "mail.cus@tome.er",
    "PAYMENT_REF",
    "Description of payment",
    metaData: {
      "ip": "196.168.45.22",
      "device": "mobile_flutter"
      // 任何其他信息
    },
    paymentMethods: [PaymentMethod.CARD, PaymentMethod.ACCOUNT_TRANSFER],
    incomeSplitConfig: [
      SubAccountDetails("MFY_SUB_319452883968", 10.5, 500, true),
      SubAccountDetails("MFY_SUB_259811283666", 10.5, 1000, false)
    ]
  ));
}

可选参数

  • 支付方法:指定交易级别的支付方法。
  • 子账户:在 incomeSplitConfig 中的子账户是在特定交易结算时接收资金的账户。
  • 元数据:是一个包含单层键值对的映射,用于传递与交易相关的额外信息。

收到的 TransactionResponse 类字段

String paymentDate;
double amountPayable;
double amountPaid;
String paymentMethod;
String transactionStatus;
String transactionReference;
String paymentReference;

需要更多信息?

如需进一步了解Monnify的移动SDK,包括交易状态类型,请参阅:

完整示例

以下是一个完整的示例代码,展示了如何在Flutter应用中集成Monnify支付插件。

import 'dart:math';

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

import 'package:flutter/services.dart';
import 'package:monnify_flutter_sdk_plus/monnify_flutter_sdk_plus.dart';

void main() => runApp(const MyApp());

class MyApp extends StatefulWidget {
  const MyApp({Key? key}) : super(key: key);

  [@override](/user/override)
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  late BuildContext mContext;

  [@override](/user/override)
  void initState() {
    super.initState();
    initializeSdk();
  }

  Future<void> initializeSdk() async {
    try {
      if (await MonnifyFlutterSdkPlus.initialize(
          'MK_TEST_G9YG93QQJA', '4551641593', ApplicationMode.TEST)) {
        _showToast("SDK initialized!");
      }
    } on PlatformException catch (e, s) {
      print("Error initializing sdk");
      print(e);
      print(s);

      _showToast("Failed to init sdk!");
    }
  }

  Future<void> initPayment() async {
    TransactionResponse transactionResponse;

    try {
      transactionResponse =
          await MonnifyFlutterSdkPlus.initializePayment(Transaction(
        2000.0,
        "NGN",
        "Customer Name",
        "mail.cus@tome.er",
        getRandomString(15),
        "Description of payment",
        metaData: {"ip": "196.168.45.22", "device": "mobile"},
        paymentMethods: [PaymentMethod.CARD, PaymentMethod.ACCOUNT_TRANSFER],
        /*incomeSplitConfig: [SubAccountDetails("MFY_SUB_319452883968", 10.5, 500, true),
                SubAccountDetails("MFY_SUB_259811283666", 10.5, 1000, false)]*/
      ));

      _showToast(
          "${transactionResponse.transactionStatus}\n${transactionResponse.paymentReference}\n${transactionResponse.transactionReference}\n${transactionResponse.amountPaid}\n${transactionResponse.amountPayable}\n${transactionResponse.paymentDate}\n${transactionResponse.paymentMethod}");
    } on PlatformException catch (e, s) {
      print("Error initializing payment");
      print(e);
      print(s);

      _showToast("Failed to init payment!");
    }
  }

  String getRandomString(int length) {
    const _chars =
        'AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz1234567890';
    Random _rnd = Random();

    return String.fromCharCodes(Iterable.generate(
        length, (_) => _chars.codeUnitAt(_rnd.nextInt(_chars.length))));
  }

  void _showToast(String message) {
    final scaffold = ScaffoldMessenger.of(mContext);
    scaffold.showSnackBar(
      SnackBar(
        content: Text(message),
        action: SnackBarAction(
            label: 'CLOSE', onPressed: scaffold.hideCurrentSnackBar),
      ),
    );
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('Monnify 插件示例'),
        ),
        body: Builder(
          builder: (context) {
            mContext = context;
            return Center(
              child: TextButton(
                child: const Text("支付"),
                onPressed: () => initPayment(),
              ),
            );
          },
        ),
      ),
    );
  }
}

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

1 回复

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


当然,以下是如何在Flutter项目中集成并使用monnify_flutter_sdk_plus插件的详细步骤和代码示例。假设你已经在Flutter开发环境中设置好了你的项目。

1. 添加依赖

首先,你需要在pubspec.yaml文件中添加monnify_flutter_sdk_plus依赖:

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

然后运行flutter pub get来安装依赖。

2. 导入插件

在你的Dart文件中导入monnify_flutter_sdk_plus

import 'package:monnify_flutter_sdk_plus/monnify_flutter_sdk_plus.dart';

3. 配置Monnify SDK

在使用之前,你需要初始化Monnify SDK并配置必要的参数。这通常在应用的入口文件(如main.dart)中完成。

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  
  // 初始化Monnify SDK
  await MonnifyFlutterSdkPlus.init(
    publicKey: '你的公钥', // 替换为你的Monnify公钥
    environment: 'sandbox', // 使用'sandbox'进行测试,使用'production'进行生产环境
    onSuccess: (data) {
      // 支付成功回调
      print('Payment successful: $data');
    },
    onError: (error) {
      // 支付失败回调
      print('Payment error: $error');
    },
    onClose: () {
      // 支付界面关闭回调
      print('Payment screen closed');
    },
  );

  runApp(MyApp());
}

4. 发起支付请求

在你的应用逻辑中,当需要发起支付时,可以调用Monnify SDK提供的支付方法。以下是一个简单的例子:

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Monnify Payment Example'),
        ),
        body: Center(
          child: ElevatedButton(
            onPressed: () async {
              // 构建支付请求数据
              final paymentData = {
                'amount': '1000', // 支付金额,单位:奈拉(Nigerian Naira)
                'currency': 'NGN',
                'email': 'user@example.com',
                'phone': '08012345678',
                'reference': 'unique_payment_reference_${DateTime.now().millisecondsSinceEpoch}',
                'metadata': {
                  'custom_field_1': 'value_1',
                  'custom_field_2': 'value_2',
                },
                // 其他必要的支付参数
              };

              // 发起支付请求
              try {
                await MonnifyFlutterSdkPlus.startPayment(paymentData);
              } catch (e) {
                print('Error initiating payment: $e');
              }
            },
            child: Text('Make Payment'),
          ),
        ),
      ),
    );
  }
}

5. 处理支付结果

在初始化SDK时已经设置了支付成功、失败和关闭的回调,这些回调会在相应的支付事件发生时被触发。

注意事项

  • 确保你已经在Monnify后台配置了正确的公钥和私钥,以及相关的支付信息。
  • 测试时使用sandbox环境,生产环境时使用production环境。
  • 处理支付结果时,确保对支付成功和失败的情况进行适当的业务逻辑处理。

通过以上步骤,你应该能够在Flutter应用中成功集成并使用monnify_flutter_sdk_plus插件进行支付。如果有任何特定的需求或问题,请查阅Monnify官方文档或联系Monnify支持团队获取更多帮助。

回到顶部