Flutter支付集成插件monnify_payment_sdk的使用

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

Flutter支付集成插件monnify_payment_sdk的使用

monnify_payment_sdk

Flutter插件用于Monnify SDK。

Getting Started

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

How to use

该插件暴露了两个API:

1. Initialize

初始化插件。这应该只做一次,最好在您的小部件的initState中进行。

import 'package:monnify_payment_sdk/monnify_payment_sdk.dart';

class _MyAppState extends State<MyApp> {

  ...

  late Monnify? monnify;

  [@override](/user/override)
  void initState() {
    // 初始化Monnify插件
    monnify = await Monnify.initialize(
      applicationMode: ApplicationMode.TEST, // 使用测试模式
      apiKey: 'YOUR API KEY', // 替换为您的API密钥
      contractCode: 'YOUR CONTRACT CODE', // 替换为您的合约代码
    );
    super.initState();
  }
  
  ...
}
2. Initialize Payment

创建Transaction类的对象并将其传递给initializePayment函数。

Future<void> initializePayment() async {
  final amount = '20.00';
  final paymentReference = 'YOUR PAYMENT REFERENCE';

  final transaction = TransactionDetails().copyWith(
    amount: amount, // 支付金额
    currencyCode: 'NGN', // 货币代码
    customerName: 'Customer Name', // 客户姓名
    customerEmail: 'custo.mer@email.com', // 客户电子邮件
    paymentReference: paymentReference, // 支付参考号
    // metaData: {"ip": "0.0.0.0", "device": "mobile"}, // 元数据(可选)
    // paymentMethods: [PaymentMethod.CARD, PaymentMethod.ACCOUNT_TRANSFER, PaymentMethod.USSD], // 支付方法(可选)
    /*incomeSplitConfig: [SubAccountDetails("MFY_SUB_319452883968", 10.5, 500, true),
        SubAccountDetails("MFY_SUB_259811283666", 10.5, 1000, false)]*/ // 收入分配配置(可选)
  );

  try {
    final response =
        await monnify?.initializePayment(transaction: transaction); // 初始化支付
  } catch (e) { 
    // 处理异常
  }
}

Optional params:

  • Payment Methods 指定事务级别的支付方法。
  • Sub-AccountsincomeSplitConfig中的账户将接收特定交易的结算。
  • MetaData 是一个单层映射,用于传递任何额外的信息。

The TransactionResponse类在SDK关闭后收到包含以下字段:

String paymentDate; // 支付日期
double amountPayable; // 应付金额
double amountPaid; // 已付金额
String paymentMethod; // 支付方法
String transactionStatus; // 交易状态
String transactionReference; // 交易参考号
String paymentReference; // 支付参考号
String currencyCode; // 货币代码

注意:如果用户在iOS开发环境中关闭模态框,则不会返回TransactionResponse。

示例完整Demo

import 'dart:developer';

import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:monnify_payment_sdk/monnify_payment_sdk.dart';

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

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  [@override](/user/override)
  Widget build(BuildContext context) {
    return const MaterialApp(
      home: MonnifyPaymentSDKDemo(),
    );
  }
}

class MonnifyPaymentSDKDemo extends StatefulWidget {
  const MonnifyPaymentSDKDemo({super.key});

  [@override](/user/override)
  State<MonnifyPaymentSDKDemo> createState() => _MonnifyPaymentSDKDemoState();
}

class _MonnifyPaymentSDKDemoState extends State<MonnifyPaymentSDKDemo> {
  late final TextEditingController controller = TextEditingController()
    ..text = '20';

  late Monnify? monnify;

  [@override](/user/override)
  void initState() {
    initializeMonnify(); // 初始化Monnify
    super.initState();
  }

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

  void initializeMonnify() async {
    // 初始化Monnify插件
    monnify = await Monnify.initialize(
      applicationMode: ApplicationMode.TEST,
      apiKey: 'YOUR API KEY',
      contractCode: 'YOUR CONTRACT CODE',
    );
  }

  void onInitializePayment() async {
    final amount = double.parse(controller.text);
    final paymentReference = DateTime.now().millisecondsSinceEpoch.toString();

    final transaction = TransactionDetails().copyWith(
      amount: amount, // 支付金额
      currencyCode: 'NGN', // 货币代码
      customerName: 'Customer Name', // 客户姓名
      customerEmail: 'custo.mer@email.com', // 客户电子邮件
      paymentReference: paymentReference, // 支付参考号
      // metaData: {"ip": "196.168.45.22", "device": "mobile"}, // 元数据(可选)
      // paymentMethods: [PaymentMethod.CARD, PaymentMethod.ACCOUNT_TRANSFER, PaymentMethod.USSD], // 支付方法(可选)
      /*incomeSplitConfig: [SubAccountDetails("MFY_SUB_319452883968", 10.5, 500, true),
          SubAccountDetails("MFY_SUB_259811283666", 10.5, 1000, false)]*/ // 收入分配配置(可选)
    );

    try {
      final response =
          await monnify?.initializePayment(transaction: transaction); // 初始化支付

      showToast(response.toString()); // 显示响应信息
      log(response.toString()); // 记录日志
    } catch (e) {
      log('$e'); // 记录异常
      showToast(e.toString()); // 显示异常信息
    }
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      body: Padding(
        padding: const EdgeInsets.symmetric(horizontal: 30),
        child: Column(
          crossAxisAlignment: CrossAxisAlignment.center,
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            TextFormField(
              controller: controller,
              keyboardType: TextInputType.number,
              inputFormatters: [
                FilteringTextInputFormatter.digitsOnly, // 仅允许数字输入
              ],
              decoration: const InputDecoration(hintText: 'Amount'), // 输入提示
            ),
            const SizedBox(height: 20), // 垂直间距
            TextButton(onPressed: onInitializePayment, child: const Text('Pay')) // 支付按钮
          ],
        ),
      ),
    );
  }
}

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

1 回复

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


当然,以下是如何在Flutter项目中集成和使用monnify_payment_sdk插件的示例代码。请注意,具体实现可能会根据Monnify SDK的最新版本和API有所变化,因此请参考官方文档进行最终确认。

步骤 1: 添加依赖

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

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

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

步骤 2: 配置Android和iOS

根据Monnify的官方文档,你可能需要在Android和iOS项目中进行一些配置,例如添加API密钥等。这里假设你已经完成了这些配置。

步骤 3: 初始化并启动支付

在你的Dart代码中,你可以按照以下方式使用monnify_payment_sdk进行支付初始化。

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

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

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

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

class _MyHomePageState extends State<MyHomePage> {
  void _initiatePayment() async {
    try {
      // 替换为实际的Monnify支付参数
      final paymentDetails = MonnifyPaymentDetails(
        amount: '1000', // 金额
        currency: 'NGN', // 货币
        email: 'user@example.com', // 用户邮箱
        phone: '08012345678', // 用户电话
        publicKey: 'your_public_key', // Monnify公钥
        reference: 'unique_payment_reference', // 支付引用
        metadata: {
          'key1': 'value1',
          'key2': 'value2',
        },
        customer: MonnifyCustomer(
          name: 'John Doe',
        ),
        callbackUrl: 'https://yourcallbackurl.com', // 回调URL
      );

      // 发起支付
      final result = await MonnifyPaymentSdk.initiatePayment(context, paymentDetails);

      // 处理支付结果
      if (result.success) {
        print('Payment successful: ${result.data}');
      } else {
        print('Payment failed: ${result.errorMessage}');
      }
    } catch (e) {
      print('Error initiating payment: $e');
    }
  }

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

说明

  1. MonnifyPaymentDetails: 这个类包含了支付所需的所有详细信息,如金额、货币、用户信息等。
  2. MonnifyPaymentSdk.initiatePayment: 这个方法用于启动支付流程。它返回一个Future,该Future会解析为一个包含支付结果的对象。
  3. 处理支付结果: 根据返回的结果,你可以判断支付是否成功,并据此进行后续操作。

注意

  • 确保你已经从Monnify获取了必要的公钥和私钥,并在你的应用中正确配置。
  • 根据Monnify的API文档,你可能需要处理更多的支付参数和回调逻辑。
  • 在生产环境中,务必保护好你的API密钥和其他敏感信息。

这个示例提供了一个基本的框架,你可以根据实际需求进行扩展和修改。

回到顶部