Flutter支付集成插件flutter_paymob的使用

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

Flutter支付集成插件flutter_paymob的使用

Flutter Paymob

Flutter Paymob 是一个允许 Flutter 应用程序通过 Paymob 服务接受在线银行卡和电子钱包支付的库。

Inspired by Ahmed Abogameel!

🚀 安装

在您的应用的 pubspec.yaml 文件中添加以下依赖:

dependencies:
  flutter_paymob: latest_version

⭐ 初始化

为了初始化 FlutterPaymob 实例,您可以使用 initialize 方法。以下是如何初始化它的示例代码:

void main() {
  WidgetsFlutterBinding.ensureInitialized();
  FlutterPaymob.instance.initialize(
    apiKey: "auth key", // 从仪表板选择设置 -> 账户信息 -> API Key 
    integrationID: 123456, // 从仪表板选择开发者 -> 支付集成 -> 在线卡 ID 
    walletIntegrationId: 123456, // 从仪表板选择开发者 -> 支付集成 -> 在线钱包
    iFrameID: 12346, // 从 Paymob 选择开发者 -> iframes 
  );
  runApp(const MyApp());
}

📌 注意:您也可以创建自己的实例:

final FlutterPaymob flutterPaymob = FlutterPaymob();
flutterPaymob.initialize(
  apiKey: "auth key",
  integrationID: 123456,
  walletIntegrationId: 123456,
  iFrameID: 12346,
);

💡 使用

初始化后,您可以使用 FlutterPaymob 实例进行支付尝试,包括银行卡支付和钱包支付。

💳 卡支付

要使用 FlutterPaymob 实例发起卡支付,可以使用 payWithCard 方法。以下是具体用法:

ElevatedButton(
  onPressed: () {
    FlutterPaymob.instance.payWithCard(
      context: context,
      currency: "EGP",
      amount: 100,
      onPayment: (response) {
        if (response.success == true) {
          ScaffoldMessenger.of(context).showSnackBar(
            SnackBar(content: Text(response.message ?? "Success")),
          );
        }
      },
    );
  },
  child: const Text("Pay with card"),
),

📲 钱包支付

要使用 FlutterPaymob 实例发起钱包支付,可以使用 payWithWallet 方法。以下是具体用法:

ElevatedButton(
  onPressed: () {
    FlutterPaymob.instance.payWithWallet(
      context: context,
      currency: "EGP",
      amount: 100,
      number: "01010101010",
      onPayment: (response) {
        if (response.success == true) {
          ScaffoldMessenger.of(context).showSnackBar(
            SnackBar(content: Text(response.message ?? "Success")),
          );
        }
      },
    );
  },
  child: const Text("Pay With Wallet"),
),

🔧 PaymobResponse

变量 类型 描述
success bool 表示交易是否成功
transactionID String? 交易的 ID
responseCode String? 交易的响应码
message String? 简要描述交易的消息

测试

您可以使用以下测试数据来执行测试交易:

MasterCard

变量 描述
卡号 5123456789012346
到期月份 12
到期年份 25
CVV 123

Wallet

手机号码 PIN OTP
01010101010 123456 123456

示例代码

以下是一个完整的示例代码,展示了如何集成 Flutter Paymob 插件并实现卡支付和钱包支付功能:

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

void main() {
  WidgetsFlutterBinding.ensureInitialized();
  FlutterPaymob.instance.initialize(
    apiKey: "auth key",
    integrationID: 123456,
    walletIntegrationId: 123456,
    iFrameID: 123456,
  );
  runApp(const MyApp());
}

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

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
        useMaterial3: true,
      ),
      home: const MyHomePage(title: 'Flutter Paymob'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  const MyHomePage({super.key, required this.title});

  final String title;

  @override
  State<MyHomePage> createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        backgroundColor: Theme.of(context).colorScheme.inversePrimary,
        title: Text(widget.title),
      ),
      body: Center(
        child: Column(
          children: [
            ElevatedButton(
              onPressed: () {
                FlutterPaymob.instance.payWithCard(
                  context: context,
                  currency: "EGP",
                  amount: 100,
                  onPayment: (response) {
                    if (response.success == true) {
                      ScaffoldMessenger.of(context).showSnackBar(
                        SnackBar(content: Text(response.message ?? "Success")),
                      );
                    }
                  },
                );
              },
              child: const Text("Pay with card"),
            ),
            ElevatedButton(
              onPressed: () {
                FlutterPaymob.instance.payWithWallet(
                  context: context,
                  currency: "EGP",
                  amount: 100,
                  number: "01010101010",
                  onPayment: (response) {
                    if (response.success == true) {
                      ScaffoldMessenger.of(context).showSnackBar(
                        SnackBar(content: Text(response.message ?? "Success")),
                      );
                    }
                  },
                );
              },
              child: const Text("Pay With Wallet"),
            ),
          ],
        ),
      ),
    );
  }
}

希望以上内容能帮助您成功集成 Flutter Paymob 插件!如果有任何问题或需要进一步的帮助,请随时联系我。


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

1 回复

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


当然,以下是如何在Flutter项目中集成并使用flutter_paymob插件的一个基本示例。这个插件允许你在Flutter应用中集成Paymob支付服务。

首先,确保你的Flutter开发环境已经配置好,并且你有一个有效的Paymob账户和API密钥。

1. 添加依赖

在你的pubspec.yaml文件中添加flutter_paymob依赖:

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

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

2. 配置Android

android/app/src/main/AndroidManifest.xml中添加必要的权限:

<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>

3. 配置iOS(如果需要)

如果你也在iOS上开发,确保在Info.plist中配置了必要的权限和URL Scheme(根据Paymob的要求)。

4. 初始化Paymob并处理支付

在你的Flutter应用中,你可以这样初始化Paymob并处理支付:

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

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

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

class PaymobButton extends StatefulWidget {
  @override
  _PaymobButtonState createState() => _PaymobButtonState();
}

class _PaymobButtonState extends State<PaymobButton> {
  final Paymob _paymob = Paymob();

  void _startPayment() async {
    try {
      // 替换为你的实际API密钥和支付信息
      String apiKey = "your_api_key_here";
      String publicKey = "your_public_key_here";
      String privateKey = "your_private_key_here";
      String paymentMethod = "CARD"; // 或其他支付方式,如 "CASH", "BANK_TRANSFER" 等
      double amount = 100.0; // 支付金额
      String currency = "EGP"; // 货币类型
      String description = "Payment Description"; // 支付描述
      String reference = "order_reference_${DateTime.now().toIso8601String()}"; // 订单参考号

      // 初始化Paymob配置
      await _paymob.initialize(
        apiKey: apiKey,
        publicKey: publicKey,
        privateKey: privateKey,
      );

      // 开始支付
      PaymobResult result = await _paymob.startPayment(
        paymentMethod: paymentMethod,
        amount: amount,
        currency: currency,
        description: description,
        reference: reference,
      );

      // 处理支付结果
      if (result.success) {
        print("Payment successful: ${result.response}");
      } else {
        print("Payment failed: ${result.error}");
      }
    } catch (e) {
      print("Error initializing or starting payment: $e");
    }
  }

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

5. 处理支付回调(可选)

根据Paymob的文档,你可能需要处理支付完成后的回调。这通常涉及到在你的服务器端设置Webhook,并在Flutter应用中处理返回的结果。这部分代码将取决于你的具体实现和需求。

注意事项

  • 确保你使用的是最新的flutter_paymob插件版本。
  • 替换代码中的your_api_key_here, your_public_key_here, your_private_key_here等占位符为你的实际Paymob密钥。
  • 根据Paymob的API文档,确保你传递的参数是正确的,并且符合Paymob的要求。

这样,你就可以在Flutter应用中集成Paymob支付服务了。

回到顶部