Flutter支付集成插件monnify_flutter的使用

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

Flutter支付集成插件monnify_flutter的使用

开始使用

这个项目专注于Monnify支付。它支持Android和iOS平台。

安装

要使用此插件进行支付,将其作为依赖项添加到你的pubspec.yaml文件中:

dependencies:
  monnify_flutter: ^x.y.z

然后在initState方法中初始化插件:

import 'package:monnify_flutter/monnify_flutter.dart';

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

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

class _MyAppState extends State<MyApp> {
  final monnify = MonnifyFlutter.instance;

  [@override](/user/override)
  void initState() {
    super.initState();
    
    monnify.initializeMonnify(
      /// 输入你的API密钥
      apiKey: "Hidden.API_KEY",
      /// 输入你的合同代码
      contractCode: "Hidden.CONTRACT_CODE",
      applicationMode: ApplicationMode.test); // 设置为测试模式
  }
}

使用示例

你可以在你的Flutter应用中使用这个插件来实现支付功能。以下是完整的示例代码:

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

import 'package:monnify_flutter/common/app_enums/EnumClasses.dart';
import 'package:monnify_flutter/monnify_flutter.dart';
import 'package:monnify_flutter_example/hidden.dart';

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

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

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

class _MyAppState extends State<MyApp> {
  final _monnifyPlugPlugin = MonnifyFlutter.instance;
  final TextEditingController nameController = TextEditingController();
  final TextEditingController emailController = TextEditingController();
  final TextEditingController amountController = TextEditingController();

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

  // 异步初始化平台状态
  Future<void> initPlatformState() async {
    try {
      final result = await _monnifyPlugPlugin.initializeMonnify(
        apiKey: API_KEY, // 输入你的API密钥
        contractCode: CONTRACT_CODE, // 输入你的合同代码
        applicationMode: ApplicationMode.test, // 设置为测试模式
      );

      print("初始化结果: $result");
    } on Exception {
      print('初始化失败。');
    }
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('Monnify 插件'),
        ),
        body: Padding(
          padding: const EdgeInsets.all(8.0),
          child: Center(
            child: ListView(
              children: [
                const SizedBox(
                  height: 10.0,
                ),
                customTextField(hint: "姓名:", controller: nameController),
                const SizedBox(
                  height: 10.0,
                ),
                customTextField(hint: "邮箱:", controller: emailController),
                const SizedBox(
                  height: 10.0,
                ),
                customTextField(hint: "金额:", controller: amountController),
                const SizedBox(
                  height: 10.0,
                ),
                TextButton(
                    style: TextButton.styleFrom(
                        backgroundColor: Theme.of(context).primaryColor,
                        shape: RoundedRectangleBorder(
                            borderRadius: BorderRadius.circular(10))),
                    onPressed: () async {
                      try {
                        final result = await _monnifyPlugPlugin.makePayment(
                          amount: amountController.text,
                          currencyCode: "NGN", // 货币代码
                          customerName: nameController.text,
                          customerPhoneNumber: '081234545657', // 客户电话号码
                          customerEmail: emailController.text,
                          paymentReference: referenceId(), // 支付引用ID
                          paymentDescription: "测试", // 支付描述
                          paymentMethod: PaymentMethod.all, // 支付方式
                        );

                        // 处理支付结果
                        print("支付结果: $result");
                      } catch (error) {
                        print("错误: $error");
                      }
                    },
                    child: const Text("支付",
                        style: TextStyle(color: Colors.white, fontSize: 30),)),
              ],
            ),
          ),
        ),
      ),
    );
  }

  /// 随机生成的字符串
  String referenceId() => DateTime.now().toString();

  /// 自定义文本框
  Widget customTextField({
    String? hint,
    TextEditingController? controller,
    FocusNode? focusNode,
    String? errorText,
    Widget? suffixIcon,
    bool readOnly = false,
    TextInputType? textInputType,
    ValueChanged<String>? onChanged,
    Widget? label,
  }) {
    return TextField(
      controller: controller,
      focusNode: focusNode,
      readOnly: readOnly,
      decoration: InputDecoration(
        suffixIcon: suffixIcon,
        errorText: errorText,
        hintText: hint,
        label: label,
        enabledBorder: const OutlineInputBorder(
          borderSide: BorderSide(color: Colors.blue, width: 2),
          borderRadius: BorderRadius.all(
            Radius.circular(10),
          ),
        ),
        labelStyle: const TextStyle(fontWeight: FontWeight.bold),
        border: const OutlineInputBorder(
          borderSide: BorderSide(color: Colors.blue, width: 10),
          borderRadius: BorderRadius.all(
            Radius.circular(10),
          ),
        ),
      ),
      onChanged: onChanged,
      keyboardType: textInputType,
      textInputAction: TextInputAction.next,
      onEditingComplete: () {},
    );
  }
}

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

1 回复

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


当然,以下是如何在Flutter项目中集成并使用monnify_flutter插件的示例代码。monnify_flutter是一个用于集成Monnify支付服务的Flutter插件。请确保你已经在Flutter项目中添加了该插件的依赖,并完成了必要的配置。

1. 添加依赖

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

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

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

2. 导入插件

在你需要使用Monnify支付的Dart文件中导入插件:

import 'package:monnify_flutter/monnify_flutter.dart';

3. 配置Monnify支付参数

你需要向Monnify后端发送请求以获取支付令牌(token)和其他必要信息。这通常是在你的服务器端完成的,但为演示目的,我们假设你已经有了这些信息。

4. 发起支付请求

下面是一个完整的示例代码,用于在Flutter应用中发起Monnify支付请求:

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Monnify Payment Integration'),
        ),
        body: Center(
          child: ElevatedButton(
            onPressed: () {
              _startPayment();
            },
            child: Text('Start Payment'),
          ),
        ),
      ),
    );
  }

  void _startPayment() async {
    // 替换为从服务器获取的实际值
    String publicKey = "你的公钥";
    String paymentToken = "你的支付令牌";
    String callbackUrl = "你的回调URL";

    try {
      MonnifyPaymentResult result = await MonnifyFlutter.startPayment(
        publicKey: publicKey,
        paymentToken: paymentToken,
        callbackUrl: callbackUrl,
        environment: MonnifyEnvironment.sandbox,  // 使用沙盒环境进行测试,生产环境请使用MonnifyEnvironment.production
      );

      // 处理支付结果
      if (result.success) {
        print("Payment successful! Transaction ID: ${result.transactionId}");
        // 显示支付成功界面或执行其他逻辑
      } else {
        print("Payment failed! Error: ${result.errorMessage}");
        // 显示支付失败界面或执行其他逻辑
      }
    } catch (e) {
      print("An error occurred: $e");
      // 处理错误
    }
  }
}

// MonnifyPaymentResult 类定义(根据插件的实际情况可能有所不同)
class MonnifyPaymentResult {
  final bool success;
  final String? transactionId;
  final String? errorMessage;

  MonnifyPaymentResult({
    required this.success,
    this.transactionId,
    this.errorMessage,
  });
}

注意事项

  1. 安全性:不要在客户端代码中硬编码敏感信息,如公钥和支付令牌。这些信息应该从你的安全服务器端获取。
  2. 回调处理:确保你的回调URL能够正确接收和处理来自Monnify的支付结果通知。
  3. 错误处理:在实际应用中,你应该有更详细的错误处理和用户反馈机制。

以上代码提供了一个基本的框架,用于在Flutter应用中集成Monnify支付。根据Monnify插件的文档和API,你可能需要调整某些参数和方法调用。

回到顶部