Flutter支付交易插件transact_pay的使用

Flutter支付交易插件transact_pay的使用

Transact Pay

pub package License: MIT

TransactPay 提供创新且灵活的欧洲BIN赞助和模块化支付、借记卡及预付服务。

🌟 开始使用

要开始使用此包,请将 transact_pay 添加到你的 pubspec.yaml 文件中:

dependencies:
  transact_pay: "<latest_release>"

你还需要拥有 公钥加密密钥,这些可以从 TransactPay 商户仪表板获取。

📌 简单示例(感谢 @ChidiebereEdeh

以下是一个简单的示例,展示了如何使用 transact_pay 插件来创建订单、通过信用卡支付以及获取银行列表。

import 'package:flutter/material.dart';
import 'package:http/http.dart' as http;
import 'package:transact_pay/transact_pay.dart';

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

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

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Transact Pay API Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: const HomePage(),
    );
  }
}

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

  @override
  _HomePageState createState() => _HomePageState();
}

class _HomePageState extends State<HomePage> {
  // 示例 API 密钥和加密密钥
  String apiKey = "PGW-PUBLICKEY-TEST-5D9411AB210740019FF1374C896D86D0";
  String encryptionKey =
      "NDA5NiE8UlNBS2V5VmFsdWU+PE1vZHVsdXM+cW5rdlhOWHRYdEF0Mi9RcDB4SzBSUXpXYTVKRWc5T0xTNFBqYzZKcmN1eDg4bmJsd2Fyd0h4dnlrUy9STk92eFltU2ZPTlEzbW9vM1hhaWpXd2IwbnVVOTJ4anBmSzByb0FYaFo0emdHVUdlS081emY4enlncExTYzFqS05MMFNXZHZWYndMeTN3WHJiRTBrSjZJRWVvSThLRSs0anRndzY1R084Z3hJeGpibjhNemI5YVNreFdaSnVMRFRLNzJHcGcxYkwrNDBLYnVNc2tVWlJVTGxhNC84Y1dYSlpId2JINjRWNkNHQlVMMGVQUmQ4dnB3aEhySzhZSlZaRGxuYTdNbmxQVjdoeGg1Q0dabkVsNy91WEJjaGYvTExLOFNyckdnRWN1anFKWEZxMm9nUlEwNzBxN2RmOXBNZ0Q5YXpTK3dya2dBck9wNnVFcXBFQ1NnbXlvb1VMZFV2MTBhQk4xRUN5YTY2UnhuV3dEck5QZktSWjU4ZmFlNnJkelpMaExlajNId2VJRjZYcHpwL280VTlmVDVwOFNWTStHK1FZalFFV0RieldhYzMyMUIxRVhWc2xkMXFFTDJzZEk0UEFWNy9DWUcwS2hvR256NVdyZnNBQ1lRRUFkQm16MXM1NktYZnczV3dYVDJoUE1xWWtTZ2c4ejFiR1AxWTZJeDU3RHViUjdVcDlwc2taV0ptUzdNdkM1NnRHN1F6OUdiNzBjVTRiNXYvYkdBZnNMNUlRanBrc2QyRENsU2U0Vm5oNEcyWE0xeTEzS0gyZWVvNnViMUczdVBUMGtzZ2RxSXRtdjFKcmN3SThWaXJOWG9oeW1xL2xpbWg1VUhDTWhzMUhlUTQwMXIvNWt0S200bDJISFMvdXhNcmZlUmVEVTRWMXVBZTNQRU1jUDg9PC9Nb2R1bHVzPjxFeHBvbmVudD5BUUFCPC9FeHBvbmVudD48L1JTQUtleVZhbHVlPg==";

  late TransactPay transactPay;
  late Future<String> createOrderFuture;
  late Future<String> payWithCardFuture;
  late Future<String> getBanksFuture;

  @override
  void initState() {
    super.initState();
    transactPay = TransactPay(apiKey: apiKey, encryptionKey: encryptionKey);

    // 初始化一次未来以防止多次API调用
    createOrderFuture = createOrder();
    payWithCardFuture = payWithCard();
    getBanksFuture = getBanks();
  }

  Future<String> fetchData(Function apiCall) async {
    try {
      http.Response response = await apiCall();
      return 'Status: ${response.statusCode}\nBody: ${response.body}';
    } catch (e) {
      return 'Error: $e';
    }
  }

  Future<String> createOrder() {
    Map<String, dynamic> payload = {
      "customer": {
        "firstname": "transact",
        "lastname": "pay",
        "mobile": "+2348134509421",
        "country": "NG",
        "email": "email@transactpay.ai"
      },
      "order": {
        "amount": 200,
        "reference": "12137e00034hjekhke",
        "description": "Pay",
        "currency": "NGN"
      },
      "payment": {"RedirectUrl": "https://www.hi.com"}
    };
    return fetchData(() => transactPay.createOrder(payload));
  }

  Future<String> payWithCard() {
    Map<String, dynamic> payload = {
      "reference": "12137e00034hjekhke",
      "paymentoption": "C",
      "country": "NG",
      "card": {
        "cardnumber": "5123450000784608",
        "expirymonth": "01",
        "expiryyear": "39",
        "cvv": "193"
      }
    };
    return fetchData(() => transactPay.payWithCard(payload));
  }

  Future<String> getBanks() {
    Map<String, dynamic> payload = {};
    return fetchData(() => transactPay.banks());
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('Transact Pay API Demo'),
      ),
      body: ListView(
        children: [
          buildApiResultTile('Create Order', createOrderFuture),
          buildApiResultTile('Pay with Card', payWithCardFuture),
          buildApiResultTile('Get Banks', getBanksFuture),
        ],
      ),
    );
  }

  Widget buildApiResultTile(String title, Future<String> apiFuture) {
    return FutureBuilder<String>(
      future: apiFuture,
      builder: (context, snapshot) {
        if (snapshot.connectionState == ConnectionState.waiting) {
          return ListTile(
            title: Text(title),
            subtitle: const Text('Loading...'),
            leading: const CircularProgressIndicator(),
          );
        } else if (snapshot.hasError) {
          return ListTile(
            title: Text(title),
            subtitle: Text('Error: ${snapshot.error}'),
            leading: const Icon(Icons.error, color: Colors.red),
          );
        } else {
          return ListTile(
            title: Text(title),
            subtitle: Text(snapshot.data ?? 'No data'),
            leading: const Icon(Icons.check_circle, color: Colors.green),
          );
        }
      },
    );
  }
}

📝 文档

📝 TransactPay 实例化和加密

// 示例 API 密钥和加密密钥
String apiKey = "PGW-PUBLICKEY-TEST-5D9411AB210740019FF1374C896D86D0";
String encryptionKey =
    "NDA5NiE8UlNBS2V5VmFsdWU+PE1vZHVsdXM+cW5rdlhOWHRYdEF0Mi9RcDB4SzBSUXpXYTVKRWc5T0xTNFBqYzZKcmN1eDg4bmJsd2Fyd0h4dnlrUy9STk92eFltU2ZPTlEzbW9vM1hhaWpXd2IwbnVVOTJ4anBmSzByb0FYaFo0emdHVUdlS081emY4enlncExTYzFqS05MMFNXZHZWYndMeTN3WHJiRTBrSjZJRWVvSThLRSs0anRndzY1R084Z3hJeGpibjhNemI5YVNreFdaSnVMRFRLNzJHcGcxYkwrNDBLYnVNc2tVWlJVTGxhNC84Y1dYSlpId2JINjRWNkNHQlVMMGVQUmQ4dnB3aEhySzhZSlZaRGxuYTdNbmxQVjdoeGg1Q0dabkVsNy91WEJjaGYvTExLOFNyckdnRWN1anFKWEZxMm9nUlEwNzBxN2RmOXBNZ0Q5YXpTK3dya2dBck9wNnVFcXBFQ1NnbXlvb1VMZFV2MTBhQk4xRUN5YTY2UnhuV3dEck5QZktSWjU4ZmFlNnJkelpMaExlajNId2VJRjZYcHpwL280VTlmVDVwOFNWTStHK1FZalFFV0RieldhYzMyMUIxRVhWc2xkMXFFTDJzZEk0UEFWNy9DWUcwS2hvR256NVdyZnNBQ1lRRUFkQm16MXM1NktYZnczV3dYVDJoUE1xWWtTZ2c4ejFiR1AxWTZJeDU3RHViUjdVcDlwc2taV0ptUzdNdkM1NnRHN1F6OUdiNzBjVTRiNXYvYkdBZnNMNUlRanBrc2QyRENsU2U0Vm5oNEcyWE0xeTEzS0gyZWVvNnViMUczdVBUMGtzZ2RxSXRtdjFKcmN3SThWaXJOWG9oeW1xL2xpbWg1VUhDTWhzMUhlUTQwMXIvNWt0S200bDJISFMvdXhNcmZlUmVEVTRWMXVBZTNQRU1jUDg9PC9Nb2R1bHVzPjxFeHBvbmVudD5BUUFCPC9FeHBvbmVudD48L1JTQUtleVZhbHVlPg==";

// 创建一个 TransactPay 实例
TransactPay transactPay = TransactPay(
  apiKey: apiKey,
  encryptionKey: encryptionKey,
);

📝 简单使用

// 简单的订单费用示例
//----------------------------------------------------------------------------

// 订单费用有效载荷
Map<String, dynamic> orderFeePayload = {
    "amount": 100,
    "currency": "USD",
    "paymentoption": "C"
};
// 调用订单费用方法
try {
    http.Response orderFeeResponse =
    await transactPay.orderFee(orderFeePayload);
    print('Order Status Response: ${orderFeeResponse.statusCode}');
    print('Response Body: ${orderFeeResponse.body}');
} catch (e) {
    print('Error fetching order fee: $e');
}

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

1 回复

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


当然,以下是如何在Flutter项目中使用transact_pay插件进行支付交易的一个基本示例。请注意,实际使用时需要根据具体的支付平台(如支付宝、微信支付等)配置相应的参数,并且确保你已经按照插件文档完成了相关的依赖配置和平台特定设置。

首先,确保你已经在pubspec.yaml文件中添加了transact_pay依赖:

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

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

接下来,我们创建一个简单的Flutter应用,展示如何使用transact_pay插件进行支付。

主应用代码 (main.dart)

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

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

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

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

class _MyHomePageState extends State<MyHomePage> {
  final TransactPay _transactPay = TransactPay();

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

  Future<void> _initiatePayment() async {
    try {
      // 配置支付参数,这里以假设的支付参数为例
      final Map<String, dynamic> paymentOptions = {
        'amount': '100.00',  // 支付金额
        'currency': 'CNY',   // 货币类型
        'description': 'Test Payment',  // 支付描述
        // 其他必要的支付参数,如订单号、支付平台相关参数等
        // 'orderId': 'your_order_id',
        // 'platform': 'alipay' 或 'wechat',
        // 其他平台特定参数...
      };

      // 发起支付请求
      final bool result = await _transactPay.initiatePayment(paymentOptions);

      if (result) {
        ScaffoldMessenger.of(context).showSnackBar(
          SnackBar(content: Text('Payment Successful')),
        );
      } else {
        ScaffoldMessenger.of(context).showSnackBar(
          SnackBar(content: Text('Payment Failed')),
        );
      }
    } catch (e) {
      // 处理异常
      ScaffoldMessenger.of(context).showSnackBar(
        SnackBar(content: Text('Error: ${e.message}')),
      );
    }
  }
}

注意事项

  1. 平台配置:确保你已经在iOS和Android平台上配置了必要的支付SDK和权限。这通常涉及在Info.plist(iOS)和AndroidManifest.xml(Android)中添加必要的配置。

  2. 支付参数paymentOptions中的参数需要根据你的支付平台(如支付宝、微信支付等)的要求进行填充。例如,支付宝和微信支付会有各自特定的参数需求。

  3. 错误处理:在实际应用中,你需要更细致地处理支付过程中可能出现的各种异常情况,比如网络错误、支付取消、支付失败等。

  4. 支付回调:支付成功后,你可能需要处理支付回调,以更新订单状态或执行其他后续操作。这通常需要在你的服务器端进行配置,并通过某种方式(如HTTP请求)通知你的Flutter应用。

  5. 安全性:确保你的支付参数和回调URL等敏感信息的安全,避免在客户端代码中硬编码敏感信息。

由于transact_pay插件的具体使用方法和参数可能会随着版本更新而变化,请参考插件的官方文档和示例代码以获取最新的使用指南。

回到顶部