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'),
),
),
);
}
}