Flutter支付集成插件b24_payment_sdk的使用

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

Flutter支付集成插件b24_payment_sdk的使用

b24_payment_sdk 是一个简化商家集成多种支付方式的 Flutter 包,支持银行应用支付、银行结账和KHQR支付。该包用 Dart 编写,并支持 Android、iOS 和 Web 平台。

功能

  • 支付Deep-link:允许用户通过银行的移动应用程序进行支付,提供流畅且熟悉的支付体验。
  • 银行结账:为用户提供便捷的结账流程,直接通过银行支付,确保安全高效的交易。
  • KHQR支付:使用户能够使用KHQR(快速响应码)方法进行支付,提供灵活且广泛接受的支付选项。

开始使用

要将 b24_payment_sdk 包添加到你的 Flutter 项目中,请遵循以下步骤:

iOS

Info.plist 中添加权限

<key>Privacy - Photo Library Additions Usage Description</key>
<string>App需要访问照片库以保存图片。</string>

<key>LSApplicationQueriesSchemes</key>
<array>
    <string>https</string>
</array>

Android

修改 AndroidManifest.xml 中的配置

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<activity android:launchMode="singleInstance"></activity>

<queries>
    <intent>
      <action android:name="android.intent.action.VIEW" />
      <data android:scheme="https" />
  </intent>
</queries>

添加依赖

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

dependencies:
  b24_payment_sdk: ^1.1.4

使用示例

在你的 Flutter 项目中,你可以按照以下方式使用 b24_payment_sdk 插件:

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

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

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

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      debugShowCheckedModeBanner: false,
      title: 'Flutter Demo',
      theme: ThemeData(
        colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
        useMaterial3: true,
      ),
      home: const MyHomePage(title: '应用程序'),
    );
  }
}

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> {
  bool isToggled = false;

  String? tranId = "95DBF755CA7C";
  String? refererKey = "123X";
  String? language = '';
  bool? darkMode = false;
  bool? isProduction = false;

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        backgroundColor: Theme.of(context).colorScheme.inversePrimary,
        title: Text(widget.title),
      ),
      body: Column(
        children: [
          Expanded(
            child: Center(
              child: SingleChildScrollView(
                child: Padding(
                  padding: const EdgeInsets.all(16.0),
                  child: Column(
                    mainAxisAlignment: MainAxisAlignment.center,
                    mainAxisSize: MainAxisSize.min,
                    children: [
                      TextField(
                        onChanged: (value) {
                          setState(() {
                            tranId = value;
                          });
                        },
                        decoration: const InputDecoration(labelText: 'tranId'),
                      ),
                      TextField(
                        onChanged: (value) {
                          setState(() {
                            refererKey = value;
                          });
                        },
                        decoration: const InputDecoration(labelText: 'X-Referrer-Key'),
                      ),
                      TextField(
                        onChanged: (value) {
                          setState(() {
                            language = value;
                          });
                        },
                        decoration: const InputDecoration(labelText: '语言'),
                      ),
                      CheckboxListTile(
                        title: const Text('是否生产环境'),
                        value: isProduction,
                        onChanged: (value) {
                          setState(() {
                            isProduction = value;
                          });
                        },
                      ),
                      CheckboxListTile(
                        title: const Text('暗黑模式'),
                        value: darkMode,
                        onChanged: (value) {
                          setState(() {
                            darkMode = value;
                          });
                        },
                      ),
                      const SizedBox(height: 10.0),
                      ElevatedButton(
                        onPressed: () {
                          B24PaymentSdk.intSdk(
                            controller: context,
                            tranId: tranId!,
                            refererKey: refererKey!,
                            language: language,
                            darkMode: darkMode,
                            isProduction: isProduction,
                            isPopup: true
                          );
                        },
                        child: const Text('结账'),
                      ),
                      const SizedBox(height: 80),
                    ],
                  ),
                ),
              ),
            ),
          ),
        ],
      ),
    );
  }
}

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

1 回复

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


当然,以下是一个关于如何在Flutter应用中集成并使用b24_payment_sdk插件进行支付的代码示例。请注意,这个示例假设您已经设置好了Flutter开发环境,并且已经创建了一个新的Flutter项目。

1. 添加依赖

首先,在您的pubspec.yaml文件中添加b24_payment_sdk依赖:

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

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

2. 导入插件

在您需要进行支付操作的Dart文件中导入插件:

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

3. 配置支付参数

在开始支付之前,您需要准备好支付所需的参数,例如公钥、私钥、支付金额、订单号等。这些信息通常由您的支付服务提供商提供。

4. 发起支付请求

以下是一个简单的按钮点击事件处理函数,用于发起支付请求:

void _startPayment() async {
  // 配置支付参数
  final paymentConfig = B24PaymentConfig(
    publicKey: '您的公钥',  // 替换为您的公钥
    privateKey: '您的私钥',  // 替换为您的私钥
    amount: '100.00',  // 支付金额
    currencyCode: 'USD',  // 货币代码
    orderId: '订单号${DateTime.now().millisecondsSinceEpoch}',  // 订单号,需要唯一
    successUrl: 'https://您的网站/success',  // 支付成功后的回调URL
    failUrl: 'https://您的网站/fail',  // 支付失败后的回调URL
    // 其他可选参数根据需求配置
  );

  // 创建支付实例
  final payment = B24Payment(config: paymentConfig);

  // 发起支付请求
  try {
    final result = await payment.startPayment();
    if (result.isSuccess) {
      // 支付成功处理逻辑
      ScaffoldMessenger.of(context).showSnackBar(
        SnackBar(content: Text('支付成功!')),
      );
    } else {
      // 支付失败处理逻辑
      ScaffoldMessenger.of(context).showSnackBar(
        SnackBar(content: Text('支付失败:${result.errorMessage}')),
      );
    }
  } catch (e) {
    // 捕获异常
    ScaffoldMessenger.of(context).showSnackBar(
      SnackBar(content: Text('发生错误:$e')),
    );
  }
}

5. 在UI中添加按钮

最后,在您的UI中添加一个按钮来触发支付请求:

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('发起支付'),
          ),
        ),
      ),
    );
  }
}

注意事项

  1. 安全性:确保您的私钥安全存储,不要在客户端代码中硬编码。
  2. 错误处理:在生产环境中,添加更详细的错误处理和用户反馈。
  3. 测试环境:在上线之前,务必在测试环境中充分测试支付流程。

通过上述步骤,您应该能够在Flutter应用中成功集成并使用b24_payment_sdk插件进行支付。如果有任何问题或需要进一步的定制,请参考插件的官方文档或联系插件的维护者。

回到顶部