Flutter支付插件vnpay_flutter的使用
Flutter支付插件vnpay_flutter的使用
简介
这是一个帮助与VNPAY进行交互的包。
安装
在项目的pubspec.yaml
文件中添加以下依赖项:
dependencies:
vnpay_flutter: ^1.0.0
然后运行以下命令获取依赖项:
flutter pub get
使用/示例
以下是如何使用该插件生成支付URL并调用支付功能的示例代码:
import 'package:flutter/material.dart';
import 'package:vnpay_flutter/vnpay_flutter.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({Key? key}) : super(key: key);
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: const Example(),
);
}
}
class Example extends StatefulWidget {
const Example({Key? key}) : super(key: key);
[@override](/user/override)
State<Example> createState() => _ExampleState();
}
class _ExampleState extends State<Example> {
String responseCode = '';
Future<void> onPayment() async {
// 生成支付URL
final paymentUrl = VNPAYFlutter.instance.generatePaymentUrl(
url: 'https://sandbox.vnpayment.vn/paymentv2/vpcpay.html', // VNPAY URL,默认为https://sandbox.vnpayment.vn/paymentv2/vpcpay.html
version: '2.0.1', // VNPAY版本,默认为2.0.1
tmnCode: 'XXXX', // VNPAY的tmn代码,从VNPAY获取
txnRef: DateTime.now().millisecondsSinceEpoch.toString(), // 引用代码,默认为时间戳
orderInfo: 'Pay 30.000 VND', // 订单信息,默认为Pay Order
amount: 30000, // 金额
returnUrl: 'https://abc.com/return', // 返回URL,参见https://sandbox.vnpayment.vn/apis/docs/huong-dan-tich-hop/#code-returnurl
ipAdress: '192.168.10.10', // 您的IP地址
vnpayHashKey: 'XXXXX', // VNPAY哈希密钥,从VNPAY获取
vnPayHashType: VNPayHashType.HMACSHA512, // 哈希类型。默认为HMACSHA512,可以在https://sandbox.vnpayment.vn/merchantv2更改
vnpayExpireDate: DateTime.now().add(const Duration(hours: 1)), // 过期日期
);
// 显示支付页面
await VNPAYFlutter.instance.show(
paymentUrl: paymentUrl,
onPaymentSuccess: (params) {
setState(() {
responseCode = params['vnp_ResponseCode'];
});
},
onPaymentError: (params) {
setState(() {
responseCode = 'Error';
});
},
);
}
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text('Response Code: $responseCode'), // 显示响应码
TextButton(
onPressed: onPayment, // 触发支付操作
child: const Text('30.000VND'), // 支付按钮文本
),
],
),
),
);
}
}
更多关于Flutter支付插件vnpay_flutter的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter支付插件vnpay_flutter的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,下面是一个关于如何在Flutter项目中使用vnpay_flutter插件的示例代码。vnpay_flutter是一个用于集成越南支付网关VNPay的Flutter插件。
首先,确保你已经在pubspec.yaml
文件中添加了vnpay_flutter依赖:
dependencies:
flutter:
sdk: flutter
vnpay_flutter: ^最新版本号 # 请替换为实际发布的最新版本号
然后,运行flutter pub get
来安装依赖。
接下来,你可以在你的Flutter项目中按照以下步骤使用vnpay_flutter插件:
- 导入vnpay_flutter包:
import 'package:vnpay_flutter/vnpay_flutter.dart';
- 配置支付参数:
在调用支付功能之前,你需要配置支付所需的参数。这些参数通常包括商户ID、订单信息、支付金额等。
Map<String, String> paymentParams = {
'tn': 'your_transaction_no', // 交易号,唯一标识每一笔交易
'vnp_Version': '2.0.0', // 版本号
'vnp_Tms': '20231010120000', // 时间戳,格式为YYYYMMDDHHMMSS
'vnp_Amount': '100000', // 交易金额,单位为越南盾(VND),这里为100,000越南盾
'vnp_Command': 'pay', // 命令类型,一般为pay
'vnp_Returnurl': 'your_return_url',// 支付成功后的回调URL
'vnp_TestMode': '1', // 测试模式,1为测试模式,0为正式模式
};
注意:这里的参数需要根据实际的业务逻辑和VNPay的要求进行调整。
- 调用支付功能:
使用vnpay_flutter插件提供的支付功能来发起支付请求。
void initiatePayment() async {
try {
bool result = await VNPayFlutter.startPayment(paymentParams);
if (result) {
print("支付成功");
// 处理支付成功后的逻辑
} else {
print("支付失败");
// 处理支付失败后的逻辑
}
} catch (e) {
print("支付过程中发生错误: $e");
// 处理异常
}
}
- 在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('VNPay Flutter Demo'),
),
body: Center(
child: ElevatedButton(
onPressed: initiatePayment,
child: Text('支付'),
),
),
),
);
}
}
完整的代码示例如下:
import 'package:flutter/material.dart';
import 'package:vnpay_flutter/vnpay_flutter.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('VNPay Flutter Demo'),
),
body: Center(
child: ElevatedButton(
onPressed: () async {
Map<String, String> paymentParams = {
'tn': 'your_transaction_no', // 交易号
'vnp_Version': '2.0.0', // 版本号
'vnp_Tms': '20231010120000', // 时间戳
'vnp_Amount': '100000', // 交易金额
'vnp_Command': 'pay', // 命令类型
'vnp_Returnurl': 'your_return_url',// 支付成功后的回调URL
'vnp_TestMode': '1', // 测试模式
};
try {
bool result = await VNPayFlutter.startPayment(paymentParams);
if (result) {
print("支付成功");
// 处理支付成功后的逻辑
} else {
print("支付失败");
// 处理支付失败后的逻辑
}
} catch (e) {
print("支付过程中发生错误: $e");
// 处理异常
}
},
child: Text('支付'),
),
),
),
);
}
}
请确保你替换了示例代码中的your_transaction_no
和your_return_url
等参数为你的实际值。同时,注意在实际项目中处理好支付成功和失败的逻辑,以及异常处理。