Flutter支付集成插件monnify_flutter_sdk的使用

Flutter支付集成插件monnify_flutter_sdk的使用

Flutter 插件 monnify_flutter_sdk 可以帮助你在 Flutter 应用程序中集成 Monnify 支付功能。此插件可以让你轻松地初始化支付,并处理与 Monnify 支付系统的交互。

开始使用

首先,在你的 pubspec.yaml 文件中添加 monnify_flutter_sdk 作为依赖项:

dependencies:
  monnify_flutter_sdk: ^版本号

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

如何使用

1. 初始化

在你的应用程序中初始化插件。这一步通常在 initState 方法中完成。

import 'package:monnify_flutter_sdk/monnify_flutter_sdk.dart';

class _MyAppState extends State<MyApp> {

  [@override](/user/override)
  void initState() {
    super.initState();
    MonnifyFlutterSdk.initialize(
      'YOUR_API_KEY', 
      'CONTRACTCODE', 
      ApplicationMode.TEST
    );
  }
}

2. 初始化支付

创建一个 Transaction 对象并调用 initializePayment 方法来启动支付流程。

Future<void> initPayment() async {
  TransactionResponse transactionResponse = await MonnifyFlutterSdk.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)
    ]
  ));
}

参数说明

  • Payment Methods: 指定交易级别的支付方式。
  • Sub-Accounts: 在 incomeSplitConfig 中指定的账户将接收该交易的结算。
  • MetaData: 是一个单层的映射,用于传递额外的信息。

返回值

TransactionResponse 类包含以下字段:

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

完整示例代码

以下是完整的示例代码,展示了如何在 Flutter 应用程序中使用 monnify_flutter_sdk 插件。

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

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

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

class MyApp extends StatefulWidget {
  [@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 MonnifyFlutterSdk.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 MonnifyFlutterSdk.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]
      ));

      _showToast(
          transactionResponse.transactionStatus.toString() + "\n" +
          transactionResponse.paymentReference.toString() + "\n" +
          transactionResponse.transactionReference.toString() + "\n" +
          transactionResponse.amountPaid.toString() + "\n" +
          transactionResponse.amountPayable.toString() + "\n" +
          transactionResponse.paymentDate.toString() + "\n" +
          transactionResponse.paymentMethod.toString()
      );

    } 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 Plugin Sample'),
        ),
        body: Builder(
          builder: (context) {
            mContext = context;
            return Center(
              child: TextButton(
                child: Text("PAY"),
                onPressed: () => initPayment(),
              ),
            );
          },
        ),
      ),
    );
  }
}

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

1 回复

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


当然,以下是如何在Flutter项目中集成并使用monnify_flutter_sdk插件的示例代码。请注意,在实际应用中,你需要替换示例中的API密钥和其他敏感信息。

步骤 1: 添加依赖

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

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

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

步骤 2: 配置Android和iOS

确保你已经按照Monnify的官方文档配置了Android和iOS平台的相关权限和设置。这通常包括在AndroidManifest.xmlInfo.plist中添加必要的权限和配置。

步骤 3: 初始化Monnify SDK

在你的Flutter项目的入口文件(通常是main.dart)中,初始化Monnify SDK。

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Monnify Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {
  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  @override
  void initState() {
    super.initState();
    // 初始化Monnify SDK
    MonnifyFlutterSdk.init(
      publicKey: '你的公钥', // 替换为你的Monnify公钥
      environment: 'sandbox', // 或者 'production'
      callbackUrlScheme: 'yourapp://callback', // 替换为你的回调URL Scheme
    );
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Monnify Flutter SDK Demo'),
      ),
      body: Center(
        child: ElevatedButton(
          onPressed: () {
            _initiatePayment();
          },
          child: Text('Initiate Payment'),
        ),
      ),
    );
  }

  Future<void> _initiatePayment() async {
    try {
      // 构建支付请求
      final paymentRequest = PaymentRequest(
        amount: 1000, // 金额,单位:奈拉(Naira)
        currency: 'NGN',
        email: 'user@example.com', // 用户邮箱
        phone: '08012345678', // 用户电话
        reference: 'unique_payment_reference_${DateTime.now().millisecondsSinceEpoch}',
        metadata: {
          'key1': 'value1',
          'key2': 'value2',
        },
        // 其他可选参数...
      );

      // 发起支付
      final paymentResponse = await MonnifyFlutterSdk.initiatePayment(paymentRequest);
      print('Payment Response: $paymentResponse');
    } catch (e) {
      print('Error initiating payment: $e');
    }
  }
}

class PaymentRequest {
  final int amount;
  final String currency;
  final String email;
  final String phone;
  final String reference;
  final Map<String, String> metadata;

  // 其他参数可以根据Monnify SDK的要求添加
  PaymentRequest({
    required this.amount,
    required this.currency,
    required this.email,
    required this.phone,
    required this.reference,
    required this.metadata,
  });
}

注意事项

  1. 公钥和私钥:确保你使用的是正确的公钥和私钥,并且它们已经在Monnify后台进行了配置。
  2. 回调URL Scheme:确保你在Info.plist(iOS)和AndroidManifest.xml(Android)中正确配置了回调URL Scheme。
  3. 支付参数:根据Monnify的要求,可能需要添加更多的支付参数,如descriptioncustomer等。
  4. 错误处理:在实际应用中,应该添加更详细的错误处理逻辑,以处理各种可能的异常情况。

请确保在实际部署前仔细阅读Monnify的官方文档,以了解所有可能的配置选项和参数。

回到顶部