Flutter支付网关插件nano_payment_gateway的使用
Flutter支付网关插件nano_payment_gateway的使用
安装
-
添加依赖到pubspec.yaml
在
pubspec.yaml
文件中添加以下依赖项。获取最新版本可以在pub.dartlang.org上的“Installing”标签页查看。dependencies: nano_payment_gateway: <latest_version>
-
导入包
在需要使用该插件的Dart文件中导入以下包:
import 'package:nano_payment_gateway/nano_payment_gateway.dart';
-
添加PaymentWidget
使用
PaymentWidget
组件来实现支付功能。你可以选择使用带参数或不带参数的方式。-
带参数的示例:
PaymentWidget( requestBody: requestBody, onTapConfirmAfterOTP: onTapConfirmAfterOTP, );
-
带可选参数的示例:
PaymentWidget( requestBody: requestBody, onTapConfirmAfterOTP: onTapConfirmAfterOTP, showAddress: true, );
-
requestBody参数应该以Map<String,dynamic>格式传递。例如:
Map<String, dynamic> requestBody = { "merchantId": "$merchantId", "merchantName": "$merchantName", "currencyCode": "$currencyCode", "amount": "$price", "merchantPublicKey": "$merchantPublicKey", "orderId": "$orderId", "cartId": "$cartId", "billingAddress": jsonEncode(billingAddress), "shippingAddress": jsonEncode(shippingAddress), "customerId": "$customerId", };
-
示例JSON数据:
Map<String, dynamic> requestBody = { "merchantId": "1", "merchantName": "EzKart ECOM Provider", "currencyCode": "AED", "amount": "1000", "merchantPublicKey": "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC5whV5aZ1mPiohGkE7GT2dYpr0iAW6STLbrE2yuT4DPAFRpXgeLJEPCGr2jakHlzEujzX+mr9ZHdY9ukp0ebyWBibWGPpqyVuSqGOx4BAukviltqPCmA+DGffxRcDh7cl+5HPwFCryiD7zKo1BOHCLLZFpck1ClgWETXIqbu8YEQIDAQAB", "orderId": "Y665JG", "cartId": "2", "billingAddress": jsonEncode(billingAddress), "shippingAddress": jsonEncode(shippingAddress), "customerId": "0000000000001", };
-
示例billingAddress数据:
Map<String, dynamic> billingAddress = { "billingName": "$billingName", "billingZip": "$billingZip", "billingState": "$billingState", "billingCountry": "$billingCountry", "billingTel": "$billingTel", "billingEmail": "$billingEmail", "billingCity": "$billingCity", "billingAddress": "$billingAddress", };
-
示例shippingAddress数据:
Map<String, dynamic> shippingAddress = { "deliveryName": "$deliveryName", "deliveryState": "$deliveryState", "deliveryCountry": "$deliveryCountry", "deliveryTel": "$deliveryTel", "deliveryZip": "$deliveryZip", "deliveryCity": "$deliveryCity", "deliveryAddress": "$deliveryAddress", };
-
额外信息
nano_payment_gateway
包使用了 flutter_dotenv
包来从应用程序的 .env
文件中检索API密钥。应用程序应包含一个 .env
文件,并且示例API密钥如下:
APIKEY=http://sandboxdev.omaemirates.com:9507
如何使用
查看示例应用中的example
目录或在pub.dartlang.org上的“Example”标签页,可以找到更完整的示例。
开始使用
这个项目是一个Dart包的起点,包含可以在多个Flutter或Dart项目中共享的库模块。
完整示例Demo
以下是在main.dart
文件中的完整示例代码:
import 'dart:convert';
import 'package:flutter/material.dart';
import 'package:nano_payment_gateway/nano_payment_gateway.dart';
void main() => runApp(const MySample());
class MySample extends StatefulWidget {
const MySample({super.key});
[@override](/user/override)
State<StatefulWidget> createState() => MySampleState();
}
class MySampleState extends State<MySample> {
// 处理用户输入OTP后的回调方法
void onTapConfirmAfterOTP(ResponseModel response) {
Navigator.of(context).pushReplacementNamed('/shopping', arguments: {
'description': response.data!['responseMessage'],
'statusCode': response.status
});
}
// 获取请求体数据的方法
RequestBodyModel getRequestBody() {
Map<String, dynamic> billingAddress = {
"billingName": "",
"billingZip": "",
"billingState": "",
"billingCountry": "",
"billingTel": "",
"billingEmail": "",
"billingCity": "",
"billingAddress": ""
};
Map<String, dynamic> shippingAddress = {
"deliveryName": "",
"deliveryState": "",
"deliveryCountry": "",
"deliveryTel": "",
"deliveryZip": "",
"deliveryCity": "",
"deliveryAddress": ""
};
Map<String, dynamic> objectBody = {
"merchantId": "1",
"merchantName": "EzKart ECOM Provider",
"currencyCode": "AED",
"amount": "1000",
"merchantPublicKey": "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC5whV5aZ1mPiohGkE7GT2dYpr0iAW6STLbrE2yuT4DPAFRpXgeLJEPCGr2jakHlzEujzX+mr9ZHdY9ukp0ebyWBibWGPpqyVuSqGOx4BAukviltqPCmA+DGffxRcDh7cl+5HPwFCryiD7zKo1BOHCLLZFpck1ClgWETXIqbu8YEQIDAQAB",
"orderId": "Y665JG",
"cartId": "2",
"billingAddress": jsonEncode(billingAddress),
"shippingAddress": jsonEncode(shippingAddress),
"customerId": "0000000000001",
};
RequestBodyModel requestBody =
requestBodyModelFromJson(jsonEncode(objectBody));
return requestBody;
}
[@override](/user/override)
Widget build(BuildContext context) {
return PaymentWidget(
requestBody: getRequestBody(),
onTapConfirmAfterOTP: onTapConfirmAfterOTP,
showAddress: true,
);
}
}
更多关于Flutter支付网关插件nano_payment_gateway的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter支付网关插件nano_payment_gateway的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,以下是如何在Flutter项目中集成和使用nano_payment_gateway
插件的详细步骤,以及相关的代码示例。
1. 添加依赖
首先,你需要在pubspec.yaml
文件中添加nano_payment_gateway
依赖。确保你的Flutter环境已经设置好,并且你的项目可以正常运行。
dependencies:
flutter:
sdk: flutter
nano_payment_gateway: ^最新版本号 # 请替换为实际的最新版本号
然后,运行以下命令来安装依赖:
flutter pub get
2. 导入插件
在你需要使用支付功能的Dart文件中,导入nano_payment_gateway
插件。
import 'package:nano_payment_gateway/nano_payment_gateway.dart';
3. 初始化插件
在你的应用启动或初始化时,配置和初始化nano_payment_gateway
插件。通常,这会在MainActivity.kt
(对于Android)或AppDelegate.swift
(对于iOS)中进行,但具体的初始化代码通常会在Dart层调用。
4. 使用支付功能
以下是一个简单的示例,展示如何调用支付功能。请注意,你需要替换示例中的YOUR_PUBLIC_KEY
、YOUR_SECRET_KEY
、PAYMENT_GATEWAY_URL
和其他支付相关的参数为你的实际值。
void initiatePayment() async {
// 初始化NanoPaymentGateway实例
final paymentGateway = NanoPaymentGateway(
publicKey: 'YOUR_PUBLIC_KEY',
secretKey: 'YOUR_SECRET_KEY',
baseUrl: 'PAYMENT_GATEWAY_URL', // 例如: 'https://api.yourpaymentgateway.com'
);
// 创建支付请求
final paymentRequest = PaymentRequest(
amount: 100.0, // 支付金额
currency: 'USD', // 货币类型
description: 'Product Description', // 支付描述
referenceId: 'UNIQUE_REFERENCE_ID', // 唯一参考ID,用于追踪支付
// 其他可选参数,根据支付网关的要求添加
);
try {
// 发起支付请求
final paymentResponse = await paymentGateway.initiatePayment(paymentRequest);
// 处理支付响应
if (paymentResponse.status == PaymentStatus.success) {
print('Payment successful! Payment ID: ${paymentResponse.paymentId}');
// 更新UI或执行其他成功后的逻辑
} else if (paymentResponse.status == PaymentStatus.failed) {
print('Payment failed! Error: ${paymentResponse.errorMessage}');
// 更新UI或执行其他失败后的逻辑
} else if (paymentResponse.status == PaymentStatus.pending) {
print('Payment pending! Payment ID: ${paymentResponse.paymentId}');
// 处理支付待确认的情况
}
} catch (e) {
// 处理异常
print('Error initiating payment: $e');
}
}
5. 调用支付函数
在你的UI层(例如按钮点击事件)中调用initiatePayment
函数。
import 'package:flutter/material.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('Payment Gateway Demo'),
),
body: Center(
child: ElevatedButton(
onPressed: initiatePayment,
child: Text('Pay Now'),
),
),
),
);
}
}
注意事项
- 安全性:确保你的公钥和私钥安全存储,不要将它们硬编码在客户端代码中。
- 错误处理:在生产环境中,请添加更详细的错误处理和用户反馈机制。
- 支付网关文档:详细阅读
nano_payment_gateway
插件和支付网关的官方文档,确保你遵循所有最佳实践和安全性要求。
以上就是在Flutter项目中集成和使用nano_payment_gateway
插件的基本步骤和代码示例。希望这对你有所帮助!