Flutter二维码支付插件flutter_gbprimepay_qrcode的使用

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

Flutter二维码支付插件flutter_gbprimepay_qrcode的使用

GBPrimePay QRCode 插件允许你从GBPrimePay提供的QRCash服务请求二维码图像。

功能

  • 显示来自QRCash服务的二维码
  • 监听支付结果并使用Cloud Firestore查询快照存储它们
  • 开始使用

要使用此插件,你可以使用 Dialog.builder()Get.dialog() 添加一个包含 GBPrimePayQRCode 小部件的对话框。更多详情请参见示例文件夹。

开始使用

要使用此插件,你可以使用 Dialog.builder()Get.dialog() 添加一个包含 GBPrimePayQRCode 小部件的对话框。更多详情请参见示例文件夹。

// 创建时间戳作为参考ID
final referenceNo = "202212220001";
final amount = 1.0;

// 显示带有二维码的对话框
Get.dialog(
    GBPrimePayQRCode(
    // 支付结果将被存储的Cloud Firestore集合引用
    collectionRef: FirebaseFirestore.instance.collection("payments"),
    // 唯一的支付参考号
    referenceNo: referenceNo,
    // 购买的商品描述
    detail: "Sample T-Shirt",
    // 购买金额
    amount: amount,
    // GBPrimePay将发送支付结果的回调URL
    backgroundUrl: BACKGROUND_URL,
    // 由服务提供的GBPrimePay令牌
    token: GB_TOKEN,
    // 成功支付时显示的消息
    completeMessage1: "Payment received!",
    completeMessage2: "Thank you",
    // 成功支付时关闭对话框的按钮标题
    completeButtonTitle: "Close",
    // 成功支付时按下按钮时执行的回调函数
    completeButtonOnTap: () => Get.back(),
    // 支付失败时显示的消息
    failMessage1: "Payment not complete!",
    failMessage2: "Try another payment method",
    // 支付失败时关闭对话框的按钮标题
    failButtonTitle: "Close",
    // 支付失败时按下按钮时执行的回调函数
    failButtonOnTap: () => Get.back(),
  ),
  // 使用屏幕的安全区域以避免与系统UI重叠
  useSafeArea: true,
);

在本示例中,GBPrimePayQRCode 小部件在一个对话框中显示,并使用提供的 collectionRef 监听支付结果。backgroundUrl 是GBPrimePay将发送支付结果的回调URL。token 是由服务提供的GBPrimePay令牌。该小部件还包括成功和失败支付时的消息和按钮标题。

示例代码

以下是一个完整的示例代码:

import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:example/firebase_options.dart';
import 'package:firebase_core/firebase_core.dart';
import 'package:flutter/material.dart';
import 'package:flutter_dotenv/flutter_dotenv.dart';
import 'package:flutter_gbprimepay_qrcode/flutter_gbprimepay_qrcode.dart';
import 'package:get/get.dart';

Future<void> main() async {
  WidgetsFlutterBinding.ensureInitialized();

  await dotenv.load(fileName: ".env");

  await Firebase.initializeApp(
    options: DefaultFirebaseOptions.currentPlatform,
  );

  // 使用Firestore模拟器
  FirebaseFirestore.instance.useFirestoreEmulator('10.0.2.2', 8088);

  runApp(const MyApp());
}

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

  [@override](/user/override)
  Widget build(BuildContext context) {
    return GetMaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: const MyHomePage(title: 'GBPrimePay QRCode Demo'),
    );
  }
}

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

  final String title;

  [@override](/user/override)
  State<MyHomePage> createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title),
      ),
      body: Padding(
        padding: const EdgeInsets.all(8.0),
        child: LayoutBuilder(builder: (context, constraints) {
          return ElevatedButton(
            style: ElevatedButton.styleFrom(
              minimumSize: Size(constraints.maxWidth, 48),
            ),
            onPressed: () {
              // 通过gbprimapay qrcode支付

              // 创建时间戳作为参考ID
              final referenceNo =
                  DateTime.now().millisecondsSinceEpoch.toString();
              const amount = 1.0;

              // 显示对话框
              Get.dialog(
                GBPrimePayQRCode(
                  collectionRef:
                      FirebaseFirestore.instance.collection("payment"),
                  referenceNo: referenceNo,
                  detail: "Sample T-Shirt",
                  amount: amount,
                  backgroundUrl: dotenv.env['BACKGROUND_URL'] ?? "",
                  token: dotenv.env['GB_TOKEN'] ?? "",
                  completeMessage1: "Payment received!",
                  completeMessage2: "Thank You",
                  completeButtonTitle: "Close",
                  completeButtonOnTap: () => Get.back(),
                  failMessage1: "Payment not complete!",
                  failMessage2: "Try other payment method",
                  failButtonTitle: "Close",
                  failButtonOnTap: () => Get.back(),
                ),
                useSafeArea: true,
              );
            },
            child: const Text("Pay via QRCode"),
          );
        }),
      ),
    );
  }
}

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

1 回复

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


当然,以下是如何在Flutter项目中使用flutter_gbprimepay_qrcode插件来实现二维码支付的示例代码。这个插件假设已经发布在pub.dev上,但实际上可能需要根据实际插件的文档进行调整。如果插件不存在或文档不同,请参考实际插件的README文件。

首先,确保在pubspec.yaml文件中添加依赖项:

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

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

接下来,在您的Flutter应用中,您可以按照以下步骤使用此插件:

  1. 导入插件
import 'package:flutter_gbprimepay_qrcode/flutter_gbprimepay_qrcode.dart';
  1. 配置支付参数

通常,支付插件会要求您提供一些配置信息,如支付金额、订单号等。以下是一个假设的配置示例:

final Map<String, dynamic> paymentParams = {
  'amount': '100.00',  // 支付金额
  'orderId': '123456789',  // 订单号
  'currency': 'CNY',  // 货币类型
  // 其他可能需要的参数,如描述、回调URL等
};
  1. 启动支付流程

使用插件提供的方法来启动二维码支付界面。以下是一个简单的调用示例:

void startPayment() async {
  try {
    final result = await FlutterGbprimepayQrcode.startPayment(paymentParams);
    if (result['status'] == 'success') {
      // 支付成功处理逻辑
      print('支付成功: ${result['message']}');
    } else {
      // 支付失败或取消处理逻辑
      print('支付失败或取消: ${result['message']}');
    }
  } catch (e) {
    // 错误处理
    print('支付发生错误: $e');
  }
}
  1. 在UI中调用支付功能

您可以在UI中添加一个按钮来触发支付流程,例如:

import 'package:flutter/material.dart';

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('二维码支付示例'),
        ),
        body: Center(
          child: ElevatedButton(
            onPressed: startPayment,
            child: Text('开始支付'),
          ),
        ),
      ),
    );
  }
}

请注意,上述代码是假设性的,并且可能需要根据实际插件的API进行调整。flutter_gbprimepay_qrcode插件的实际使用方法和参数可能有所不同,因此强烈建议查阅插件的官方文档和示例代码。

另外,支付插件通常会涉及敏感信息,如API密钥、商户ID等,这些信息应妥善保管,避免硬编码在客户端代码中。在实际应用中,这些信息通常通过安全的后端服务进行管理和传递。

回到顶部