Flutter支付插件aangaraa_pay_flutter的使用

Flutter支付插件aangaraa_pay_flutter的使用

Aangaraa Pay Flutter Plugin

这是一个用于在Flutter应用中轻松集成MTN Mobile Money和Orange Money支付服务的插件,适用于喀麦隆市场。


安装

pubspec.yaml文件中添加依赖:

dependencies:
  aangaraa_pay_flutter: ^0.0.1

或者直接从GitHub安装:

dependencies:
  aangaraa_pay_flutter:
    git:
      url: https://github.com/votre-username/aangaraa_pay_flutter.git
      ref: main

运行以下命令以安装依赖:

flutter pub get

配置

在使用插件之前,需要初始化它,并提供API密钥和API基础URL。

import 'package:aangaraa_pay_flutter/aangaraa_pay_flutter.dart';

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

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

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

class HomeScreen extends StatefulWidget {
  [@override](/user/override)
  _HomeScreenState createState() => _HomeScreenState();
}

class _HomeScreenState extends State<HomeScreen> {
  final AangaraaPayFlutter aangaraaPay = AangaraaPayFlutter();

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

  Future<void> _initializePlugin() async {
    await aangaraaPay.initialize(
      apiKey: 'VOTRE_CLE_API',
      baseUrl: 'YOUR_API_BASE_URL',
    );
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Aangaraa Pay Example'),
      ),
      body: Center(
        child: Text('Initialized!'),
      ),
    );
  }
}

使用

执行支付

调用initiatePayment方法来发起支付请求。需要指定运营商(MTN或Orange)、金额、电话号码等信息。

Future<void> _makePayment(String operator) async {
  try {
    final result = await aangaraaPay.initiatePayment(
      operator: operator, // 指定运营商
      amount: '1000', // 支付金额
      currency: 'XAF', // 货币类型
      phoneNumber: '237600000000', // 用户电话号码
      description: 'Test payment', // 支付描述
      transactionId: DateTime.now().millisecondsSinceEpoch.toString(), // 唯一交易ID
      returnUrl: 'YOUR_RETURN_URL', // 返回URL
      notifyUrl: 'YOUR_NOTIFY_URL', // 通知URL
      apiKey: 'YOUR_API_KEY', // API密钥
      baseUrl: 'YOUR_API_BASE_URL', // API基础URL
    );

    print('Status: ${result['status']}');
    print('Transaction ID: ${result['transaction_id']}');
  } catch (e) {
    print('Error: $e');
  }
}
参数说明
参数名称 描述
operator 运营商 (MTN_CameroonOrange_Cameroon)
amount 支付金额
currency 货币类型 (XAF)
phoneNumber 用户电话号码
description 支付描述
transactionId 唯一交易ID
returnUrl 支付完成后跳转的URL
notifyUrl 交易状态更新的通知URL
apiKey API密钥
baseUrl API基础URL

查询交易状态

可以使用checkTransactionStatus方法查询支付状态。

Future<void> _checkTransactionStatus(String transactionId) async {
  try {
    final status = await aangaraaPay.checkTransactionStatus(
      payToken: transactionId, // 交易ID
      appKey: 'YOUR_API_KEY', // API密钥
      baseUrl: 'YOUR_API_BASE_URL', // API基础URL
    );

    print('Status: ${status['status']}');
  } catch (e) {
    print('Error: $e');
  }
}

完整示例

以下是完整的代码示例,包含用户输入手机号和金额,并选择运营商进行支付的功能。

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

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

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

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

class HomeScreen extends StatefulWidget {
  [@override](/user/override)
  _HomeScreenState createState() => _HomeScreenState();
}

class _HomeScreenState extends State<HomeScreen> {
  final AangaraaPayFlutter aangaraaPay = AangaraaPayFlutter();
  final TextEditingController _phoneController = TextEditingController();
  final TextEditingController _amountController = TextEditingController();
  String _paymentStatus = '';

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

  Future<void> _initializePlugin() async {
    await aangaraaPay.initialize(
      apiKey: 'VOTRE_CLE_API',
      baseUrl: 'YOUR_API_BASE_URL',
    );
  }

  Future<void> _makePayment(String operator) async {
    try {
      setState(() {
        _paymentStatus = 'Processing $operator Payment...';
      });

      final result = await aangaraaPay.initiatePayment(
        operator: operator,
        amount: _amountController.text,
        currency: 'XAF',
        phoneNumber: _phoneController.text,
        description: 'Test payment',
        transactionId: DateTime.now().millisecondsSinceEpoch.toString(),
        returnUrl: 'YOUR_RETURN_URL',
        notifyUrl: 'YOUR_NOTIFY_URL',
        apiKey: 'YOUR_API_KEY',
        baseUrl: 'YOUR_API_BASE_URL',
      );

      setState(() {
        _paymentStatus = '${operator} Payment Status: ${result['status']}';
      });

      // 查询最终状态
      if (result['transaction_id'] != null) {
        await Future.delayed(const Duration(seconds: 5));
        final status = await aangaraaPay.checkTransactionStatus(
          payToken: result['transaction_id'],
          appKey: 'YOUR_API_KEY',
          baseUrl: 'YOUR_API_BASE_URL',
        );
        setState(() {
          _paymentStatus = 'Final Status: ${status['status']}';
        });
      }
    } catch (e) {
      setState(() {
        _paymentStatus = 'Error: $e';
      });
    }
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Aangaraa Pay Example'),
      ),
      body: Padding(
        padding: const EdgeInsets.all(16.0),
        child: Column(
          children: [
            TextField(
              controller: _phoneController,
              decoration: InputDecoration(
                labelText: 'Phone Number',
                hintText: 'Enter phone number',
              ),
              keyboardType: TextInputType.phone,
            ),
            SizedBox(height: 16),
            TextField(
              controller: _amountController,
              decoration: InputDecoration(
                labelText: 'Amount',
                hintText: 'Enter amount in XAF',
              ),
              keyboardType: TextInputType.number,
            ),
            SizedBox(height: 24),
            Row(
              mainAxisAlignment: MainAxisAlignment.spaceEvenly,
              children: [
                ElevatedButton(
                  onPressed: () => _makePayment('MTN'),
                  child: Text('Pay with MTN'),
                ),
                ElevatedButton(
                  onPressed: () => _makePayment('Orange_Cameroon'),
                  child: Text('Pay with Orange'),
                ),
              ],
            ),
            SizedBox(height: 24),
            Text(
              _paymentStatus,
              style: TextStyle(fontSize: 16),
              textAlign: TextAlign.center,
            ),
          ],
        ),
      ),
    );
  }

  [@override](/user/override)
  void dispose() {
    _phoneController.dispose();
    _amountController.dispose();
    super.dispose();
  }
}

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

1 回复

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


aangaraa_pay_flutter 是一个用于在 Flutter 应用中集成支付功能的插件。它支持多种支付方式,如信用卡、移动支付等。以下是如何使用 aangaraa_pay_flutter 插件的基本步骤:

1. 添加依赖

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

dependencies:
  flutter:
    sdk: flutter
  aangaraa_pay_flutter: ^1.0.0  # 请使用最新版本

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

2. 配置支付环境

根据你使用的支付方式,你可能需要在项目中配置一些环境变量或密钥。例如,如果你使用的是 Stripe 支付,你需要在 AndroidManifest.xmlInfo.plist 中配置 Stripe 的 API 密钥。

3. 初始化支付插件

在你的 Flutter 应用中,首先需要初始化支付插件。通常,你可以在 main.dart 文件中进行初始化:

import 'package:aangaraa_pay_flutter/aangaraa_pay_flutter.dart';

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await AangaraaPayFlutter.initialize(
    publicKey: 'your_public_key',  // 你的支付公钥
    environment: Environment.sandbox,  // 使用沙盒环境或生产环境
  );
  runApp(MyApp());
}

4. 创建支付页面

接下来,你可以创建一个支付页面,用户可以在该页面选择支付方式并完成支付。

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

class PaymentPage extends StatelessWidget {
  final _paymentController = AangaraaPayFlutter.paymentController();

  Future<void> _makePayment() async {
    try {
      final paymentIntent = await _paymentController.createPaymentIntent(
        amount: 1000,  // 支付金额(以分为单位)
        currency: 'USD',  // 货币类型
      );

      final paymentResult = await _paymentController.confirmPayment(
        paymentIntentId: paymentIntent.id,
      );

      if (paymentResult.status == PaymentStatus.succeeded) {
        // 支付成功
        print('Payment succeeded!');
      } else {
        // 支付失败
        print('Payment failed: ${paymentResult.message}');
      }
    } catch (e) {
      print('Error: $e');
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Payment'),
      ),
      body: Center(
        child: ElevatedButton(
          onPressed: _makePayment,
          child: Text('Pay Now'),
        ),
      ),
    );
  }
}

5. 处理支付结果

_makePayment 方法中,你可以处理支付结果。根据支付结果,你可以显示成功或失败的消息,或者导航到其他页面。

6. 运行应用

最后,运行你的 Flutter 应用,并测试支付功能。

flutter run

7. 其他注意事项

  • 测试环境:在开发阶段,建议使用沙盒环境进行测试,以避免产生真实的支付交易。
  • 错误处理:确保在支付过程中处理所有可能的错误,并提供友好的用户提示。
  • 安全性:不要在客户端代码中硬编码敏感信息(如 API 密钥),建议通过后端服务来管理这些信息。

8. 参考文档

如果你需要更详细的信息,可以参考 aangaraa_pay_flutter 的官方文档或 GitHub 仓库。

https://pub.dev/packages/aangaraa_pay_flutter
回到顶部