Flutter支付插件esewa_pnp_forked的使用
Flutter支付插件esewa_pnp_forked的使用
esewa_pnp 是一个Flutter插件,让开发者能够仅通过几行代码将原生eSewa支付方法集成到他们的Flutter应用程序中。
如何安装
-
依赖于它
在
pubspec.yaml文件中添加以下依赖项:dependencies: esewa_pnp: ^2.0.1 -
[Android] 在你的
AndroidManifest.xml文件中添加以下属性:<application ... android:theme="@style/Theme.AppCompat.Light.NoActionBar" ...> ... </application> -
[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
使用
-
创建一个
ESewaConfiguration对象。开始时使用测试环境。当应用准备好后,你可以切换到正式环境(ENVIRONMENT_LIVE)。ESewaConfiguration _configuration = ESewaConfiguration( clientID: "<Client-ID>", secretKey: "<Secret-Key>", environment: ESewaConfiguration.ENVIRONMENT_TEST // ENVIRONMENT_LIVE );clientID和secretKey值是由eSewa为每个商户/客户端提供的,并且是唯一的。在开发阶段,你可以使用以下凭证:clientID: "JB0BBQ4aD0UqIThFJwAKBgAXEUkEGQUBBAwdOgABHD4DChwUAB0R" secretKey: "BhwIWQQADhIYSxILExMcAgFXFhcOBwAKBgAXEQ==" -
创建
ESewaPnp对象并传递配置。ESewaPnp _eSewaPnp = ESewaPnp(configuration: _configuration); -
最后创建支付对象。
ESewaPayment _payment = ESewaPayment( amount: <ANY_DOUBLE_VALUE>, productName: "<Product-Name>", productID: "<Unique-Product-ID>", callBackURL: "<Call-Back-URL>" ); -
调用
initPayment方法。final _res = await _eSewaPnp.initPayment(payment: _payment); -
根据响应确定应用程序的行为。将
.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
更多关于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 提供的测试凭据进行支付测试。在生产环境中,确保使用真实的 clientId 和 secretId。
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'),
),
),
);
}
}

