Flutter支付处理插件paymob_flutter_lib的使用

Flutter支付处理插件paymob_flutter_lib的使用

该插件用于Paymob。它实现了原生Paymob SDK(Android和iOS)以在Flutter环境中工作。

使用

将以下内容添加到你的pubspec.yaml文件中:

dependencies:
  paymob_flutter_lib: ^1.0.9

Android

你需要编辑AndroidManifest.xml文件,添加以下内容:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:tools="http://schemas.android.com/tools">
    <application
        android:supportsRtl="true"
        tools:replace="android:label,android:supportsRtl">
    </application>
</manifest>

iOS

在你的Podfile文件中添加以下内容:

# 为项目定义全局平台
platform :ios, '12.0'

post_install do |installer|
  installer.pods_project.targets.each do |target|
    flutter_additional_ios_build_settings(target)
    target.build_configurations.each do |config|
      config.build_settings["EXCLUDED_ARCHS[sdk=iphonesimulator*]"] = "arm64"  // 添加此行
    end
  end
end

示例代码

以下是完整的示例代码:

import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:paymob_flutter_lib/models/order.dart';
import 'package:paymob_flutter_lib/models/payment.dart';
import 'package:paymob_flutter_lib/models/payment_key_request.dart';
import 'package:paymob_flutter_lib/models/payment_result.dart';
import 'dart:async';

import 'package:paymob_flutter_lib/paymob_flutter_lib.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 _paymobFlutterLibPlugin = PaymobFlutterLib();

  // 替换为你自己的API密钥
  String apiKey =
      'ZXlKaGJHY2lPaUpJVXpVeE1pSXNJblI1Y0NJNklrcFhWQ0o5LmV5SmpiR0Z6Y3lJNklrMWxjbU5vWVc1MElpd2ljSEp2Wm1sc1pWOXdheUk2TVRJd056RXNJbTVoYldVaU9pSXhOall6TURjeE16WXlMakl4TkRVME5DSjkuZ0NiQnNiaW12SUswcGZzV084Q1RNUWtQUjFvOGpFdDYtdGY3UWFMeTdUWnU3S3FWYXBaNlNqMlZYMGladVh6Yk9PWkhzRmRDdVdaeUVQc0N3QnZYaXc=';

  String _auth = '';
  int _orderId = 0;
  String _paymentKey = '';

  String? _error = 'No Error';
  String? _result = 'Unknown';
  String? _token = 'Unknown';
  String? _maskedPan = 'Unknown';

  Future<void> authenticateRequest() async {
    try {
      String result = await PaymobFlutterLib.authenticateRequest(apiKey);
      if (!mounted) return;

      setState(() {
        _auth = result;
      });
    } catch (e) {
      if (!mounted) return;

      setState(() {
        _error = '$e';
      });
    }
  }

  Future<void> registerOrder() async {
    try {
      int result = await PaymobFlutterLib.registerOrder(
        Order(
          authToken: _auth,
          deliveryNeeded: "false",
          amountCents: "35000",
          currency: "PKR",
          items: [
            // Item(
            //   name: "ASC1515",
            //   amountCents: "35000",
            //   description: "Smart Watch",
            //   quantity: "1",
            // ),
            // Item(
            //     name: "ERT6565",
            //     amountCents: "1000",
            //     description: "Power Bank",
            //     quantity: "1",)
          ],
        ),
      );
      if (!mounted) return;

      setState(() {
        _orderId = result;
      });
    } catch (e) {
      if (!mounted) return;

      setState(() {
        _error = '$e';
      });
    }
  }

  Future<void> requestPaymentKey() async {
    try {
      String result = await PaymobFlutterLib.requestPaymentKey(
        PaymentKeyRequest(
          authToken: _auth,
          amountCents: "35000",
          expiration: 3600,
          orderId: _orderId.toString(),
          billingData: BillingData(
            firstName: "Bilal",
            lastName: "Ilyas",
            email: "bilal.ilyas1990@gmail.com",
            phoneNumber: "+923156702020",
            apartment: "NA",
            floor: "NA",
            street: "NA",
            building: "NA",
            postalCode: "NA",
            city: "Sargodha",
            state: "Punjab",
            country: "PK",
          ),
          currency: "PKR",
          integrationId: 12740,
          lockOrderWhenPaid: "false",
        ),
      );
      if (!mounted) return;

      setState(() {
        _paymentKey = result;
      });
    } catch (e) {
      if (!mounted) return;

      setState(() {
        _error = '$e';
      });
    }
  }

  Future<void> startPayActivityNoToken() async {
    try {
      PaymentResult? result =
          await _paymobFlutterLibPlugin.startPayActivityNoToken(Payment(
        paymentKey: _paymentKey,
        saveCardDefault: false,
        showSaveCard: false,
        themeColor: const Color(0xFF002B36),
        language: "en",
        actionbar: true,
      ));
      if (!mounted) return;

      print("transID : ${result?.id}");
      print(result);
      setState(() {
        _result = result?.dataMessage;
        _token = result?.token;
        _maskedPan = result?.maskedPan;
      });
    } on PlatformException catch (err) {
      // 处理错误
      print("PlatformException 1");
      print(err);
      setState(() {
        _error = '${err.message}';
      });
    } catch (e) {
      if (!mounted) return;
      setState(() {
        _error = '$e';
      });
    }
  }

  Future<void> startPayActivityToken() async {
    try {
      String? result =
          await _paymobFlutterLibPlugin.startPayActivityToken(Payment(
        paymentKey: _paymentKey,
        saveCardDefault: false,
        showSaveCard: true,
        themeColor: const Color(0xFF002B36),
        language: "en",
        actionbar: true,
        token: _token,
        maskedPanNumber: _maskedPan,
        customer: Customer(
            firstName: "Eman",
            lastName: "Ahmed",
            phoneNumber: "+201012345678",
            email: "example@gmail.com",
            building: "7",
            floor: "9",
            apartment: "91",
            city: "Alexandria",
            state: "NA",
            country: "Egypt",
            postalCode: "NA"),
      ));
      if (!mounted) return;

      setState(() {
        _result = result;
      });
    } catch (e) {
      print("erorrrrrr 2");
      print(e);
      if (!mounted) return;
      setState(() {
        _error = '$e';
      });
    }
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('插件示例应用'),
        ),
        body: SingleChildScrollView(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.spaceAround,
            children: [
              MaterialButton(
                onPressed: () async {
                  await authenticateRequest();
                },
                child: const Text('身份验证请求'),
              ),
              Text('auth: $_auth'),
              MaterialButton(
                onPressed: () async {
                  await registerOrder();
                },
                child: const Text('订单注册API'),
              ),
              Text('orderId: $_orderId'),
              MaterialButton(
                onPressed: () async {
                  await requestPaymentKey();
                },
                child: const Text('支付密钥请求'),
              ),
              Text('paymentKey: $_paymentKey'),
              const Divider(),
              MaterialButton(
                onPressed: () async {
                  // print(_paymentKey);
                  await startPayActivityNoToken();
                },
                child: const Text('startPayActivityNoToken'),
              ),
              MaterialButton(
                onPressed: () async {
                  await startPayActivityToken();
                },
                child: const Text('startPayActivityToken'),
              ),
              Text(
                'error: $_error',
                style: const TextStyle(color: Colors.red),
              ),
              const Text(
                "TRANSACTION_SUCCESSFUL : ",
                style: TextStyle(fontWeight: FontWeight.bold),
              ),
              Text('result: $_result'),
              const Text(
                "TRANSACTION_SUCCESSFUL_CARD_SAVED",
                style: TextStyle(fontWeight: FontWeight.bold),
              ),
              Text('token: $_token'),
              Text('maskedPan: $_maskedPan'),
            ],
          ),
        ),
      ),
    );
  }
}

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

1 回复

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


paymob_flutter_lib 是一个用于处理支付的 Flutter 插件,它允许开发者在 Flutter 应用中集成 Paymob 支付网关。以下是如何使用 paymob_flutter_lib 插件的基本步骤:

1. 添加依赖

首先,在 pubspec.yaml 文件中添加 paymob_flutter_lib 依赖:

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

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

2. 初始化 Paymob

在你的 Dart 代码中,首先需要初始化 Paymob。通常,你需要在应用启动时进行初始化:

import 'package:paymob_flutter_lib/paymob_flutter_lib.dart';

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  
  // 初始化 Paymob
  PaymobFlutterLib.initialize(
    apiKey: 'YOUR_API_KEY',
    integrationId: 'YOUR_INTEGRATION_ID',
    iframeId: 'YOUR_IFRAME_ID',
  );
  
  runApp(MyApp());
}

3. 发起支付请求

在需要发起支付的地方,调用 PaymobFlutterLibpay 方法。你可以传递支付金额、用户信息等参数。

Future<void> initiatePayment() async {
  try {
    final paymentResponse = await PaymobFlutterLib.pay(
      amount: 1000,  // 支付金额(单位:分)
      currency: 'EGP',  // 货币代码
      billingData: BillingData(
        firstName: 'John',
        lastName: 'Doe',
        email: 'john.doe@example.com',
        phoneNumber: '+201234567890',
      ),
    );

    if (paymentResponse.success) {
      // 支付成功
      print('Payment successful: ${paymentResponse.transactionId}');
    } else {
      // 支付失败
      print('Payment failed: ${paymentResponse.errorMessage}');
    }
  } catch (e) {
    // 处理异常
    print('Error during payment: $e');
  }
}

4. 处理支付结果

PaymobFlutterLib.pay 方法会返回一个 PaymentResponse 对象,你可以通过检查 success 属性来判断支付是否成功,并通过 transactionId 获取交易ID。

5. 处理回调

在支付完成后,Paymob 可能会通过回调 URL 通知你的服务器支付结果。你需要在 Paymob 控制台设置回调 URL,并处理来自 Paymob 的请求。

6. 测试和上线

在开发过程中,你可以使用 Paymob 提供的测试环境和测试卡来进行支付测试。测试完成后,切换到生产环境并上线你的应用。

示例代码

以下是一个完整的示例代码,展示了如何在 Flutter 应用中使用 paymob_flutter_lib 进行支付:

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

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  
  // 初始化 Paymob
  PaymobFlutterLib.initialize(
    apiKey: 'YOUR_API_KEY',
    integrationId: 'YOUR_INTEGRATION_ID',
    iframeId: 'YOUR_IFRAME_ID',
  );
  
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: PaymentScreen(),
    );
  }
}

class PaymentScreen extends StatelessWidget {
  Future<void> initiatePayment() async {
    try {
      final paymentResponse = await PaymobFlutterLib.pay(
        amount: 1000,  // 支付金额(单位:分)
        currency: 'EGP',  // 货币代码
        billingData: BillingData(
          firstName: 'John',
          lastName: 'Doe',
          email: 'john.doe@example.com',
          phoneNumber: '+201234567890',
        ),
      );

      if (paymentResponse.success) {
        // 支付成功
        print('Payment successful: ${paymentResponse.transactionId}');
      } else {
        // 支付失败
        print('Payment failed: ${paymentResponse.errorMessage}');
      }
    } catch (e) {
      // 处理异常
      print('Error during payment: $e');
    }
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Paymob Payment'),
      ),
      body: Center(
        child: ElevatedButton(
          onPressed: initiatePayment,
          child: Text('Pay Now'),
        ),
      ),
    );
  }
}
回到顶部