Flutter支付集成插件flutter_paystack_client的使用

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

Flutter支付集成插件flutter_paystack_client的使用

flutter_paystack_client 是一个用于通过Paystack支付网关进行支付的Flutter插件,支持Web和移动设备。它作为 flutter_paystack 的一个包装器。

🚀 安装

要在项目中使用此插件,请在 pubspec.yaml 文件中添加 flutter_paystack_client 作为依赖项:

dependencies:
  flutter_paystack_client: ^latest_version

然后,在您的小部件的 initState 方法中初始化插件:

import 'package:flutter_paystack_client/flutter_paystack_client.dart';

class _PaymentPageState extends State<PaymentPage> {
  var publicKey = '[YOUR_PAYSTACK_PUBLIC_KEY]';

  [@override](/user/override)
  void initState() {
    super.initState();
    PaystackClient.initialize(publicKey);
  }
}

Web

对于Web平台,需要在 index.html 文件中包含Paystack JS脚本:

<script src="https://js.paystack.co/v1/inline.js"></script>

使用方法

下面是如何使用 flutter_paystack_client 创建并处理支付请求的基本示例:

Charge charge = Charge()
      ..amount = 10000 // 支付金额,单位为最小货币单位(如分)
      ..reference = _getReference() // 唯一交易参考号
      ..email = 'customer@email.com'; // 用户邮箱

CheckoutResponse response = await PaystackPlugin.checkout(
  context, 
  charge: charge,
);

PaystackClient.checkout() 返回时,建议在后端验证支付是否成功。

示例代码

以下是一个完整的示例demo,展示了如何集成和使用 flutter_paystack_client 插件:

import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter_paystack_client/flutter_paystack_client.dart';

// 假设.env文件中定义了paystackPublicKey变量
import '.env.dart';

const String appName = 'Paystack Example';

Future<void> main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await PaystackClient.initialize(paystackPublicKey);

  runApp(MyApp());
}

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

class HomePage extends StatefulWidget {
  [@override](/user/override)
  _HomePageState createState() => _HomePageState();
}

class _HomePageState extends State<HomePage> {
  String _email = '';
  int _amount = 0;
  String _message = '';

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Flutter Paystack Client Test'),
      ),
      body: Padding(
        padding: EdgeInsets.symmetric(
          horizontal: MediaQuery.of(context).size.width / 8,
        ),
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            Text(
              _message,
              style: TextStyle(
                fontWeight: FontWeight.w600,
                color: Colors.deepPurple,
              ),
            ),
            const SizedBox(height: 10),
            TextField(
              decoration: InputDecoration(
                labelText: 'Email',
              ),
              keyboardType: TextInputType.emailAddress,
              onChanged: (val) {
                _email = val;
              },
            ),
            TextField(
              decoration: InputDecoration(
                labelText: 'Amount',
              ),
              keyboardType: TextInputType.number,
              onChanged: (val) {
                try {
                  _amount = (double.parse(val) * 100).toInt();
                } catch (e) {}
              },
            ),
            const SizedBox(height: 20),
            ElevatedButton(
              onPressed: () async {
                setState(() {
                  _message = '';
                });

                final charge = Charge()
                  ..email = _email
                  ..amount = _amount
                  ..reference = 'ref_${DateTime.now().millisecondsSinceEpoch}';
                final res =
                    await PaystackClient.checkout(context, charge: charge);

                if (res.status) {
                  _message = 'Charge was successful. Ref: ${res.reference}';
                } else {
                  _message = 'Failed: ${res.message}';
                }
                setState(() {});
              },
              child: Text('Checkout'),
            ),
          ],
        ),
      ),
    );
  }
}

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

1 回复

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


当然,下面是一个关于如何在Flutter项目中集成和使用flutter_paystack_client插件进行支付的代码示例。这个插件允许你使用Paystack进行支付集成。

第一步:添加依赖

首先,你需要在你的pubspec.yaml文件中添加flutter_paystack_client依赖:

dependencies:
  flutter:
    sdk: flutter
  flutter_paystack_client: ^x.y.z  # 请使用最新版本号替换x.y.z

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

第二步:配置Android和iOS

Android

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

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

iOS

确保在ios/Runner/Info.plist中配置了适当的网络权限,例如:

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSAllowsArbitraryLoads</key>
    <true/>
</dict>

第三步:初始化Paystack

在你的Flutter应用中,你需要初始化Paystack并设置公钥。

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

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

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

class PaystackIntegration extends StatefulWidget {
  @override
  _PaystackIntegrationState createState() => _PaystackIntegrationState();
}

class _PaystackIntegrationState extends State<PaystackIntegration> {
  final String publicKey = 'YOUR_PAYSTACK_PUBLIC_KEY'; // 替换为你的Paystack公钥

  @override
  void initState() {
    super.initState();
    PaystackPlugin.initialize(publicKey: publicKey);
  }

  void makePayment() async {
    try {
      var result = await PaystackPlugin.startTransaction(
        amount: 1000, // 金额,单位:分(例如1000代表10.00)
        email: 'customer@example.com',
        phoneNumber: '+2348012345678',
        currency: 'NGN',
        ref: 'unique-transaction-ref',
        metadata: {
          'custom_fields': [
            {'display_name': 'Item Purchased', 'value': 'T-Shirt'},
            {'display_name': 'Quantity', 'value': '2'},
          ],
        },
      );

      if (result.status == 'success') {
        print('Payment successful: ${result.data}');
      } else if (result.status == 'error') {
        print('Payment error: ${result.message}');
      }
    } catch (e) {
      print('Error initiating payment: $e');
    }
  }

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

注意事项

  1. 公钥:确保你已经从Paystack获取了公钥,并将其替换到代码中的YOUR_PAYSTACK_PUBLIC_KEY位置。
  2. 测试环境:在开发过程中,建议使用Paystack的测试环境,包括测试公钥和测试卡。
  3. 安全性:不要在客户端代码中硬编码敏感信息,如私钥。这些信息应该在服务器端安全地处理。
  4. 处理回调:在真实的应用中,你需要处理支付成功或失败的回调,并根据结果更新用户界面或执行相应的业务逻辑。

这个示例展示了如何在Flutter应用中集成Paystack进行支付。你可以根据具体需求进一步定制和扩展这个代码。

回到顶部