Flutter支付集成插件payfort_plugin的使用

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

Flutter支付集成插件payfort_plugin的使用

一个帮助Flutter开发者轻松集成PayFort SDK的插件,支持Android和iOS版本12及以上。

开始使用

pubspec.yaml文件中添加以下依赖:

dependencies:
  payfort_plugin: ^0.3.1

使用方法

以下是使用插件的基本示例代码:

import 'dart:async';

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

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

class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  Map? result;

  @override
  void initState() {
    super.initState();
    initPlatformState();
  }

  // 平台消息是异步的,因此我们初始化在一个异步方法中。
  Future<void> initPlatformState() async {
    // 获取设备ID并发送到服务器以获取 YOR_MERCHANT_REF 和 YOUR_SDK_TOKEN
    String? deviceID = await PayfortPlugin.getID;
    
    if (deviceID != null) {
      PayfortPlugin.performPaymentRequest(
        'YOR_MERCHANT_REF', // 商户参考号
        'YOUR_SDK_TOKEN',   // SDK令牌
        'NAME',             // 用户姓名
        'LANGUAGE',         // 语言
        'EMAIL',            // 邮箱
        'AMOUNT',           // 金额
        'COMMAND',          // 命令
        'CURRENCY',         // 货币
        'MODE'              // 模式(0为测试模式,1为生产模式)
      ).then((value) {
        // value 对象包含PayFort响应,如卡号、交易参考等
        print("卡号 ${value?["card_number"]}");
      }).catchError((error) {
        print("发生错误:$error");
      });
    }
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('插件示例应用'),
        ),
        body: Center(
          child: RaisedButton(
            child: Text('支付'),
            onPressed: () {
              initPlatformState();
            },
          ),
        ),
      ),
    );
  }
}

贡献

我们接受以下贡献:

  • 改进代码文档
  • 报告问题
  • 修复错误

维护者

Magints


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

1 回复

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


当然,以下是一个关于如何在Flutter项目中集成并使用payfort_plugin的示例代码案例。请注意,这假设你已经有一个Flutter项目,并且已经配置好了基本的开发环境。

1. 添加依赖

首先,在你的Flutter项目的pubspec.yaml文件中添加payfort_plugin依赖:

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

然后,运行以下命令来安装依赖:

flutter pub get

2. 配置Android

android/app/src/main/AndroidManifest.xml中添加必要的权限和网络配置(如果插件文档中有提到的话)。例如:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.yourapp">

    <uses-permission android:name="android.permission.INTERNET"/>
    <!-- 其他必要的权限 -->

    <application
        ... >
        <!-- 如果插件需要特定的Activity或Service配置,请在这里添加 -->
    </application>
</manifest>

3. 配置iOS

在iOS项目中,你可能需要在Info.plist中添加一些配置,或者在你的AppDelegate.swift/AppDelegate.m中处理某些事件(具体取决于插件的文档)。

4. 使用Payfort插件

在你的Dart代码中,你可以按照以下方式使用payfort_plugin

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Payfort Plugin Example'),
        ),
        body: Center(
          child: PaymentButton(),
        ),
      ),
    );
  }
}

class PaymentButton extends StatefulWidget {
  @override
  _PaymentButtonState createState() => _PaymentButtonState();
}

class _PaymentButtonState extends State<PaymentButton> {
  final PayfortPlugin _payfortPlugin = PayfortPlugin();

  void _makePayment() async {
    try {
      // 替换以下参数为你的实际支付参数
      String merchantId = "your_merchant_id";
      String accessToken = "your_access_token";
      String amount = "100.00"; // 金额
      String currency = "AED"; // 货币
      String returnUrl = "https://yourwebsite.com/return";
      String cancelUrl = "https://yourwebsite.com/cancel";
      String description = "Payment Description";

      Map<String, dynamic> paymentData = {
        "merchant_id": merchantId,
        "access_token": accessToken,
        "amount": amount,
        "currency": currency,
        "return_url": returnUrl,
        "cancel_url": cancelUrl,
        "description": description,
      };

      String response = await _payfortPlugin.initiatePayment(paymentData);
      print("Payment Response: $response");

      // 根据响应处理支付结果
      if (response.contains("success")) {
        showDialog(
          context: context,
          builder: (BuildContext context) => AlertDialog(
            title: Text("Payment Successful"),
            content: Text("The payment was successful!"),
            actions: <Widget>[
              TextButton(
                onPressed: () => Navigator.of(context).pop(),
                child: Text("OK"),
              ),
            ],
          ),
        );
      } else {
        showDialog(
          context: context,
          builder: (BuildContext context) => AlertDialog(
            title: Text("Payment Failed"),
            content: Text("The payment failed. Please try again."),
            actions: <Widget>[
              TextButton(
                onPressed: () => Navigator.of(context).pop(),
                child: Text("OK"),
              ),
            ],
          ),
        );
      }
    } catch (e) {
      print("Error initiating payment: $e");
      showDialog(
        context: context,
        builder: (BuildContext context) => AlertDialog(
          title: Text("Error"),
          content: Text("An error occurred while initiating the payment."),
          actions: <Widget>[
            TextButton(
              onPressed: () => Navigator.of(context).pop(),
              child: Text("OK"),
            ),
          ],
        ),
      );
    }
  }

  @override
  Widget build(BuildContext context) {
    return ElevatedButton(
      onPressed: _makePayment,
      child: Text('Make Payment'),
    );
  }
}

注意事项

  1. 安全性:确保不要硬编码敏感信息(如merchantIdaccessToken)到你的代码中。考虑使用环境变量或安全的密钥管理服务。
  2. 错误处理:上述代码仅展示了基本的错误处理。在实际应用中,你可能需要更详细的错误处理逻辑。
  3. UI/UX:根据实际需求调整UI/UX设计,以确保良好的用户体验。

请确保仔细阅读payfort_plugin的官方文档,因为插件的具体使用方法和参数可能会随着版本的更新而变化。

回到顶部