Flutter支付集成插件payhere_flutter的使用
Flutter支付集成插件payhere_flutter的使用
Payhere插件简介
Payhere是一款为Flutter开发者提供的支付网关插件。它模仿了原生Payhere Android SDK的功能,使支付流程与原生SDK保持一致。
以下是插件的一些截图:
安装插件
在您的项目pubspec.yaml
文件中添加以下依赖项:
dependencies:
payhere_flutter: ^0.1.1
运行flutter pub get
以安装插件。
使用插件进行支付
导入插件包
首先需要导入payhere_flutter
包:
import 'package:payhere_flutter/payhere_flutter.dart';
创建支付请求对象
创建一个InitRequest
对象,并设置必要的参数:
InitRequest req = new InitRequest();
// 必填参数
req.setMerchantId("1210XXX"); // 您的商户PayHere ID
req.setMerchantSecret("ugknesnvn"); // 您的商户密钥(在Settings > Domains & Credentials中获取)
req.setCurrency("LKR"); // 货币代码,例如LKR/USD/GBP/EUR/AUD
req.setAmount(1000.00); // 最终支付金额
req.setOrderId("230000123"); // 唯一订单ID
req.setItemsDescription("门铃无线"); // 商品描述
req.setCustom1("这是自定义消息1");
req.setCustom2("这是自定义消息2");
// 设置客户信息
req.getCustomer().setFirstName("张");
req.getCustomer().setLastName("三");
req.getCustomer().setEmail("zhangsan@example.com");
req.getCustomer().setPhone("+8613800138000");
req.getCustomer().getAddress().setAddress("北京市朝阳区");
req.getCustomer().getAddress().setCity("北京");
req.getCustomer().getAddress().setCountry("中国");
// 可选参数:设置配送地址
req.getCustomer().getDeliveryAddress().setAddress("上海市浦东新区");
req.getCustomer().getDeliveryAddress().setCity("上海");
req.getCustomer().getDeliveryAddress().setCountry("中国");
// 添加商品
req.getItems().add(new Item(null, "门铃无线", 1, 1000.0));
发起支付请求
调用oneTimePaymentSandbox
或oneTimePaymentLive
方法来发起支付请求。示例如下:
RaisedButton(
onPressed: () async {
// 测试环境
PhResponse response =
await PayhereFlutter.oneTimePaymentSandbox(request: req);
// 生产环境
// PhResponse response =
// await PayhereFlutter.oneTimePaymentLive(request: req);
print("支付状态: ${response.status}");
print("支付信息: ${response.data?.toJson()}");
},
child: Text("发起一次支付"),
),
返回结果解析
PhResponse
对象包含以下字段:
status
: 支付状态。data
: 包含交易详细信息。message
: 交易简要说明。
示例返回值:
{
"status": 1,
"data": {
"status": 2,
"paymentNo": 123456789,
"currency": "LKR",
"price": 1000.0,
"sign": "abcdef123456",
"message": "支付成功"
},
"message": "支付成功"
}
支付状态代码:
状态 | 代码 |
---|---|
STATUS_SUCCESS | 1 |
ERROR_UNKNOWN | -1 |
ERROR_DATA | -2 |
ERROR_VALIDATION | -3 |
ERROR_NETWORK | -4 |
ERROR_PAYMENT | -5 |
示例代码
以下是一个完整的示例代码,展示了如何在Flutter应用中集成Payhere插件:
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:payhere_flutter/payhere_flutter.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: PaymentPage(),
);
}
}
class PaymentPage extends StatefulWidget {
@override
_PaymentPageState createState() => _PaymentPageState();
}
class _PaymentPageState extends State<PaymentPage> {
InitRequest req = InitRequest();
String responseText = "";
@override
void initState() {
super.initState();
initRequest();
}
void initRequest() {
req.setMerchantId("YOUR_MERCHANT_ID");
req.setMerchantSecret("YOUR_MERCHANT_SECRET");
req.setCurrency("LKR");
req.setAmount(1000.00);
req.setOrderId("ORDER12345");
req.setItemsDescription("门铃无线");
req.setCustom1("自定义消息1");
req.setCustom2("自定义消息2");
req.getCustomer().setFirstName("张");
req.getCustomer().setLastName("三");
req.getCustomer().setEmail("zhangsan@example.com");
req.getCustomer().setPhone("+8613800138000");
req.getCustomer().getAddress().setAddress("北京市朝阳区");
req.getCustomer().getAddress().setCity("北京");
req.getCustomer().getAddress().setCountry("中国");
req.getCustomer().getDeliveryAddress().setAddress("上海市浦东新区");
req.getCustomer().getDeliveryAddress().setCity("上海");
req.getCustomer().getDeliveryAddress().setCountry("中国");
req.getItems().add(new Item(null, "门铃无线", 1, 1000.0));
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text("Payhere支付示例"),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
ElevatedButton(
onPressed: () async {
PhResponse response =
await PayhereFlutter.oneTimePaymentSandbox(request: req);
setState(() {
responseText = "支付状态: ${response.status}\n支付信息: ${response.data?.toJson()}";
});
},
child: Text("发起支付"),
),
SizedBox(height: 20),
Text(responseText),
],
),
),
);
}
}
配置代码缩减
如果您启用了R8代码缩减器,请确保配置proguard-rules.pro
文件以保留Payhere相关的类:
buildTypes {
release {
minifyEnabled true
useProguard true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
signingConfig signingConfigs.debug
}
}
在proguard-rules.pro
中添加以下规则:
-keep class lk.payhere.** { *; }
或者禁用代码缩减:
flutter build --no-shrink
更多关于Flutter支付集成插件payhere_flutter的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter支付集成插件payhere_flutter的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
payhere_flutter
是一个用于在 Flutter 应用中集成 PayHere 支付网关的插件。PayHere 是斯里兰卡的一家流行支付网关,支持多种支付方式,包括信用卡、借记卡和移动支付。
以下是如何在 Flutter 项目中使用 payhere_flutter
插件的步骤:
1. 添加依赖
首先,在 pubspec.yaml
文件中添加 payhere_flutter
依赖:
dependencies:
flutter:
sdk: flutter
payhere_flutter: ^1.0.0 # 使用最新版本
然后运行 flutter pub get
来获取依赖。
2. 配置 Android 和 iOS
Android
在 android/app/build.gradle
文件中,确保 minSdkVersion
至少为 21:
android {
defaultConfig {
minSdkVersion 21
...
}
...
}
iOS
在 ios/Podfile
文件中,确保 platform
设置为 ios 11.0
或更高版本:
platform :ios, '11.0'
然后运行 pod install
来更新 iOS 依赖。
3. 初始化 PayHere
在你的 Flutter 应用中初始化 PayHere 插件。通常,你可以在 main.dart
文件中进行初始化:
import 'package:flutter/material.dart';
import 'package:payhere_flutter/payhere_flutter.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
await PayHereFlutter.init(
sandbox: true, // 使用沙盒环境进行测试
);
runApp(MyApp());
}
4. 创建支付请求
你可以使用 PayHerePaymentRequest
类来创建支付请求。以下是一个简单的示例:
import 'package:payhere_flutter/payhere_flutter.dart';
Future<void> makePayment() async {
final request = PayHerePaymentRequest(
amount: 100.0, // 支付金额
currency: 'LKR', // 货币代码
orderId: 'ORDER123456', // 订单ID
itemsDescription: 'Test Payment', // 商品描述
customer: PayHereCustomer(
firstName: 'John',
lastName: 'Doe',
email: 'john.doe@example.com',
phone: '+94771234567',
),
notifyUrl: 'https://example.com/notify', // 通知URL
returnUrl: 'https://example.com/return', // 返回URL
);
try {
final response = await PayHereFlutter.startPayment(request);
if (response.status == PayHerePaymentStatus.success) {
print('Payment successful: ${response.paymentId}');
} else {
print('Payment failed: ${response.message}');
}
} catch (e) {
print('Error: $e');
}
}
5. 处理支付结果
PayHereFlutter.startPayment
方法会返回一个 PayHerePaymentResponse
对象,你可以根据 status
属性来判断支付是否成功。
6. 运行应用
现在,你可以运行你的 Flutter 应用并测试支付功能。确保在沙盒环境中使用测试卡号和其他支付信息。
7. 生产环境
当你准备将应用部署到生产环境时,请将 sandbox
参数设置为 false
:
await PayHereFlutter.init(
sandbox: false,
);