Flutter支付插件esewa_pnp_forked的使用

Flutter支付插件esewa_pnp_forked的使用

esewa_pnp 是一个Flutter插件,让开发者能够仅通过几行代码将原生eSewa支付方法集成到他们的Flutter应用程序中。

如何安装

  1. 依赖于它

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

    dependencies:
      esewa_pnp: ^2.0.1
    
  2. [Android] 在你的 AndroidManifest.xml 文件中添加以下属性:

    <application
        ...
        android:theme="@style/Theme.AppCompat.Light.NoActionBar"
        ...>
        ...
    </application>
    
  3. [iOS] esewa_pnp 版本^1.0.0在模拟器上无法测试。你需要依赖于插件GitHub仓库的 dev 分支。

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

    dependencies:
      # esewa_pnp: ^2.0.1 # 在生产应用或在真实物理iOS设备上测试esewa_pnp时使用。
      esewa_pnp:
        git:
          url: git://github.com/ayyshim/esewa_pnp.git
          ref: dev
    

使用

  1. 创建一个 ESewaConfiguration 对象。开始时使用测试环境。当应用准备好后,你可以切换到正式环境(ENVIRONMENT_LIVE)。

    ESewaConfiguration _configuration = ESewaConfiguration(
        clientID: "<Client-ID>",
        secretKey: "<Secret-Key>",
        environment: ESewaConfiguration.ENVIRONMENT_TEST // ENVIRONMENT_LIVE
    );
    

    clientIDsecretKey 值是由eSewa为每个商户/客户端提供的,并且是唯一的。在开发阶段,你可以使用以下凭证:

    clientID: "JB0BBQ4aD0UqIThFJwAKBgAXEUkEGQUBBAwdOgABHD4DChwUAB0R"
    secretKey: "BhwIWQQADhIYSxILExMcAgFXFhcOBwAKBgAXEQ=="
    
  2. 创建 ESewaPnp 对象并传递配置。

    ESewaPnp _eSewaPnp = ESewaPnp(configuration: _configuration);
    
  3. 最后创建支付对象。

    ESewaPayment _payment = ESewaPayment(
        amount: <ANY_DOUBLE_VALUE>,
        productName: "<Product-Name>",
        productID: "<Unique-Product-ID>",
        callBackURL: "<Call-Back-URL>"
    );
    
  4. 调用 initPayment 方法。

    final _res = await _eSewaPnp.initPayment(payment: _payment);
    
  5. 根据响应确定应用程序的行为。将 .initPayment 方法包裹在try-catch块中。

    try {
        final _res = await _eSewaPnp.initPayment(payment: _payment);
        // 处理成功
    } on ESewaPaymentException catch(e) {
        // 处理错误
    }
    

ESewaPaymentException

ESewaPaymentException 类在支付过程失败时被抛出。

  • .message [String]:返回错误消息。

ESewaResult

ESewaResult 是在支付过程成功时返回的结果。

  • .message [String]:返回可读的成功消息
  • .productId [String]:返回客户支付的产品ID
  • .productName [String]:返回客户支付的产品名称
  • .totalAmount [String]:返回客户支付的总金额
  • .date [String]:返回交易日期
  • .status [String]:返回交易状态
  • .referenceId [String]:返回交易参考ID

ESewaPaymentButton

ESewaPaymentButton 是一个可定制的按钮小部件。它接受 ESewaPnp,6个必需参数和8个可选参数。

要使用此按钮,你必须下载资源并将其粘贴到项目的 assets 文件夹中。在 pubspec.yaml 文件中也添加以下行。

flutter:
  assets:
    - assets/esewa/
示例 #1(默认)
ESewaPaymentButton(
  _esewaPnp,
  amount: 800.0,
  callBackURL: "https://example.com",
  productId: "abc123",
  productName: "ESewa Pnp Example",
  onSuccess: (ESewaResult result) {
    // 处理结果
  },
  onFailure: (ESewaPaymentException e) {
    // 处理错误
  },
),
示例 #2(白色背景)

更改按钮颜色也会动态更改标签颜色和eSewa徽标变体(深色/浅色)。

ESewaPaymentButton(
  _esewaPnp,
  amount: 800.0,
  callBackURL: "https://example.com",
  productId: "abc123",
  productName: "ESewa Pnp Example",
  onSuccess: (ESewaResult result) {
    // 处理结果
  },
  onFailure: (ESewaPaymentException e) {
    // 处理错误
  },
  color: Color(0xFFFFFFF), // 白色背景
),
示例 #3(带labelBuilder)
ESewaPaymentButton(
  _esewaPnp,
  amount: 800.0,
  callBackURL: "https://example.com",
  productId: "abc123",
  productName: "ESewa Pnp Example",
  onSuccess: (ESewaResult result) {
    // 处理结果
  },
  onFailure: (ESewaPaymentException e) {
    // 处理错误
  },
  color: Color(0xFF60BB47), // 绿色背景
  labelBuilder: (int amount, Widget esewaLogo) {
    return Text("Pay Rs.$amount");
  }
),

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

1 回复

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


esewa_pnp_forked 是一个用于在 Flutter 应用中集成 eSewa 支付的插件。eSewa 是尼泊尔广泛使用的在线支付平台。以下是如何在 Flutter 应用中使用 esewa_pnp_forked 插件的步骤:

1. 添加依赖

首先,在你的 pubspec.yaml 文件中添加 esewa_pnp_forked 插件的依赖:

dependencies:
  flutter:
    sdk: flutter
  esewa_pnp_forked: ^1.0.0  # 请检查最新版本

然后运行 flutter pub get 来获取依赖。

2. 配置 Android

AndroidManifest.xml 文件中添加以下权限:

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

3. 配置 iOS

Info.plist 文件中添加以下内容:

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

4. 初始化 eSewa 支付

在你的 Dart 代码中,导入 esewa_pnp_forked 插件并初始化 eSewa 支付。

import 'package:esewa_pnp_forked/esewa_pnp_forked.dart';

5. 配置支付参数

创建 EsewaPnp 实例并配置支付参数:

final esewaPnp = EsewaPnp(
  clientId: 'your_client_id',
  secretId: 'your_secret_id',
  environment: Environment.test, // 使用 Environment.prod 生产环境
);

6. 发起支付请求

使用 esewaPnp.initPayment 方法发起支付请求:

void initiatePayment() async {
  final payment = Payment(
    productId: 'your_product_id',
    productName: 'Your Product Name',
    productPrice: '100.0', // 价格
    callbackUrl: 'your_callback_url',
  );

  try {
    final result = await esewaPnp.initPayment(payment);
    if (result.status == PaymentStatus.success) {
      print('Payment Success: ${result.message}');
    } else {
      print('Payment Failed: ${result.message}');
    }
  } catch (e) {
    print('Error: $e');
  }
}

7. 处理支付结果

在上面的代码中,result.status 可以用于判断支付是否成功。你可以根据支付结果进行相应的处理。

8. 测试支付

在测试环境中,你可以使用 eSewa 提供的测试凭据进行支付测试。在生产环境中,确保使用真实的 clientIdsecretId

9. 处理回调

callbackUrl 中指定的 URL 将用于接收支付结果回调。你需要在服务器端处理这些回调,并根据回调数据更新订单状态。

示例代码

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

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

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

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

class PaymentScreen extends StatelessWidget {
  final esewaPnp = EsewaPnp(
    clientId: 'your_client_id',
    secretId: 'your_secret_id',
    environment: Environment.test,
  );

  void initiatePayment() async {
    final payment = Payment(
      productId: 'your_product_id',
      productName: 'Your Product Name',
      productPrice: '100.0',
      callbackUrl: 'your_callback_url',
    );

    try {
      final result = await esewaPnp.initPayment(payment);
      if (result.status == PaymentStatus.success) {
        print('Payment Success: ${result.message}');
      } else {
        print('Payment Failed: ${result.message}');
      }
    } catch (e) {
      print('Error: $e');
    }
  }

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