Flutter支付插件nravepay的使用

Flutter支付插件nravepay的使用

Nravepay 是一个用于在 Flutter 项目中轻松接受卡支付的包,它基于 Flutterwave。这项工作受到 rave_flutter 的启发。

特性

  • 自定义 Flutter 原生界面
  • 保存卡并使用令牌支付
  • 仅限卡支付
  • 分割支付

初始化

在启动时初始化:

void main() {
  NRavePayRepository.setup(Setup(
    publicKey: PaymentKeys.publicKey,
    encryptionKey: PaymentKeys.encryptionKey,
    secKey: PaymentKeys.secretKey,
    staging: true,
    version: Version.v3,
    allowSaveCard: true,
    logging: true,
  ));
  // 其他代码
}

使用方法

var initializer = PayInitializer(
  amount: 450,
  email: 'email@email.com',
  txRef: 'TXREF-${DateTime.now().microsecondsSinceEpoch}',
  narration: 'New payment',
  country: 'NG',
  currency: 'NGN',
  firstname: 'Nelson',
  lastname: 'Eze',
  phoneNumber: '09092343432',
  metadata: {'paymentType': 'card', 'platform': 'android'},
  onComplete: (result) {
    if (result.status == HttpStatus.success) {
      if (result.card != null) {
        print(result.card); // 可以保存卡
      }
    }
    print(result.message);
  },
);

return PayManager().prompt(context: context, initializer: initializer);

自定义

你可以自定义此包中的所有文本。这对于你的应用支持多种语言非常有用。

自定义文本

NRavePayRepository.setup(Setup(
  // 其他参数
  payText: '立即支付',
  chooseCardHeaderText: '付款卡',
  addCardHeaderText: '添加卡',
  addNewCardText: '添加新卡',
  strings: Strings().copyWith(),
));

自定义支付按钮

var initializer = PayInitializer(
  // 其他参数
  buttonBuilder: (amount, onPress) {
    return TextButton(
      child: Text(amount.toString()),
      onPressed: onPress,
    );
  },
);

服务

该包还暴露了一些有用的方法,以防你需要在其他地方调用它们。

调用交易服务

例如,使用 Payload 对象执行充值请求:

var payload = Payload(...);
ChargeResponse response = await TransactionService.instance.charge(payload);

获取银行列表

例如,获取支持的银行列表:

var banks = await BankService.instance.fetchBanks;

自定义HTTP操作

例如,验证账户号码是否正确:

Future<dynamic> verifyAccount(String acctNo, String bankCode) async {
  var data = {
    'recipientaccount': acctNo,
    'destbankcode': bankCode,
    'PBFPubKey': Setup.instance.publicKey
  };
  try {
    final res = await HttpService().dio.post('/flwv3-pug/getpaidx/api/resolve_account', data: data);
    if (res.statusCode == 200) {
      print(res.data);
    }
  } catch (e) {
    print(e);
  }
}

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

1 回复

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


flutterwave 是一个流行的支付解决方案,提供了 Flutter 插件 flutterwave_rave,用于在 Flutter 应用中集成支付功能。以下是如何在 Flutter 应用中使用 flutterwave_rave 插件的步骤:

1. 添加依赖

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

dependencies:
  flutter:
    sdk: flutter
  flutterwave_rave: ^2.1.0

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

2. 初始化插件

在你的 Dart 文件中导入 flutterwave_rave 插件:

import 'package:flutterwave_rave/flutterwave_rave.dart';

3. 配置支付参数

你需要配置支付参数,例如金额、货币、电子邮件、公钥等。以下是一个示例:

final RavePayInitializer ravePayInitializer = RavePayInitializer(
  amount: 1000, // 金额
  currency: "NGN", // 货币代码
  email: "user@example.com", // 用户电子邮件
  firstname: "John", // 用户名字
  lastname: "Doe", // 用户姓氏
  narration: "Payment for goods", // 描述
  publicKey: "FLWPUBK_TEST-xxxxxxxxxxxxx-X", // 你的公钥
  encryptionKey: "FLWSECK_TESTxxxxxxxxxxxxx", // 你的加密密钥
  txRef: "unique_transaction_reference", // 唯一交易参考
  isStaging: true, // 是否使用测试环境
);

4. 启动支付

使用 RavePayManager 来启动支付流程:

RavePayManager ravePayManager = RavePayManager(ravePayInitializer);

ravePayManager.startPayment(context).then((response) {
  if (response.status == "success") {
    // 支付成功
    print("Payment successful: ${response.transactionId}");
  } else {
    // 支付失败
    print("Payment failed: ${response.message}");
  }
});

5. 处理支付结果

支付完成后,RavePayManager 会返回一个 RavePayResponse 对象,你可以根据 response.status 来判断支付是否成功,并处理相应的逻辑。

6. 测试支付

如果你使用的是测试环境(isStaging: true),你可以使用以下测试卡号进行测试:

  • Card Number: 5531 8866 5214 2950
  • CVV: 564
  • Expiry Date: 09/32
  • PIN: 3310
  • OTP: 12345

7. 发布应用

当你准备发布应用时,确保将 isStaging 设置为 false,并使用生产环境的公钥和加密密钥。

完整示例代码

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

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

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

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

class PaymentScreen extends StatelessWidget {
  void initiatePayment(BuildContext context) {
    final RavePayInitializer ravePayInitializer = RavePayInitializer(
      amount: 1000,
      currency: "NGN",
      email: "user@example.com",
      firstname: "John",
      lastname: "Doe",
      narration: "Payment for goods",
      publicKey: "FLWPUBK_TEST-xxxxxxxxxxxxx-X",
      encryptionKey: "FLWSECK_TESTxxxxxxxxxxxxx",
      txRef: "unique_transaction_reference",
      isStaging: true,
    );

    RavePayManager ravePayManager = RavePayManager(ravePayInitializer);

    ravePayManager.startPayment(context).then((response) {
      if (response.status == "success") {
        print("Payment successful: ${response.transactionId}");
      } else {
        print("Payment failed: ${response.message}");
      }
    });
  }

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