Flutter支付集成插件payhere_mobilesdk_flutter的使用
Flutter支付集成插件payhere_mobilesdk_flutter的使用
集成PayHere到你的Flutter应用非常简单。只需将插件添加到项目的依赖项中,调用其方法来发起支付并获取支付状态即可。该SDK允许用户在不离开应用的情况下完成支付。
使用指南
1. 在应用中包含PayHere移动SDK
打开你的Flutter项目的pubspec.yaml
文件,并添加PayHere Flutter SDK依赖。
dependencies:
payhere_mobilesdk_flutter: ^3.0.12
然后在Flutter项目目录中运行以下命令:
flutter pub get
2. Android预设条件
a. 添加PayHere Android SDK的Maven仓库
在你的Android项目的(外层)
build.gradle
文件中添加仓库:
allprojects {
repositories {
mavenLocal()
maven {
url 'https://jitpack.io'
}
}
}
b. 允许Manifest属性合并
在你的Android项目的AndroidManifest.xml
文件中进行以下更改:
i. 在<manifest>
元素中声明Android tools
命名空间:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.domain.name"
xmlns:tools="http://schemas.android.com/tools">
ii. 在<application>
元素中添加replace
合并规则以替换android:label
属性:
<application tools:replace="android:label">
3. iOS预设条件
在iOS项目中运行以下命令:
pod install
4. 白名单移动应用包名
a. 登录到你的PayHere商户账户并导航到集成部分。
b. 点击“添加域/应用”按钮。
c. 从第一个下拉菜单中选择“应用”。
d. 添加你的Flutter应用包名(例如:lk.bhasha.helakuru)。
e. 记住最后一个字段中的哈希值。这是特定移动应用的商户密钥。
f. 点击“请求批准”。
注意:如果你使用的是PayHere实时商户账户,你的应用包名必须由我们的运营团队手动审核。请允许最多一天的时间完成此审核过程。
更多信息,请联系:techsupport@payhere.lk
5. 向PayHere支付网关发起支付请求
a. 一次性支付请求
创建一个仅收取一次的支付请求。要从服务器捕获支付详情,请阅读文档。
import 'package:payhere_mobilesdk_flutter/payhere_mobilesdk_flutter.dart';
Map paymentObject = {
"sandbox": false, // 如果使用沙箱商户ID则为true
"merchant_id": "1223220", // 替换为你的商户ID
"notify_url": "https://ent13zfovoz7d.x.pipedream.net/",
"order_id": "ItemNo12345",
"items": "Hello from Flutter!",
"item_number_1": "001",
"item_name_1": "Test Item #1",
"amount_1": "5.00",
"quantity_1": "2",
"item_number_2": "002",
"item_name_2": "Test Item #2",
"amount_2": "20.00",
"quantity_2": "1",
"amount": 30.00,
"currency": "LKR",
"first_name": "Saman",
"last_name": "Perera",
"email": "samanp@gmail.com",
"phone": "0771234567",
"address": "No.1, Galle Road",
"city": "Colombo",
"country": "Sri Lanka",
"delivery_address": "No. 46, Galle road, Kalutara South",
"delivery_city": "Kalutara",
"delivery_country": "Sri Lanka",
"custom_1": "",
"custom_2": ""
};
PayHere.startPayment(
paymentObject, (paymentId) {
print("One Time Payment Success. Payment Id: $paymentId");
}, (error) {
print("One Time Payment Failed. Error: $error");
}, () {
print("One Time Payment Dismissed");
}
);
b. 定期支付请求
创建一个定期支付订阅,按固定频率收费。要从服务器捕获支付详情,请阅读文档。
import 'package:payhere_mobilesdk_flutter/payhere_mobilesdk_flutter.dart';
Map paymentObject = {
"sandbox": false, // 如果使用沙箱商户ID则为true
"merchant_id": "1223220", // 替换为你的商户ID
"notify_url": "https://ent13zfovoz7d.x.pipedream.net/",
"order_id": "ItemNo12345",
"items": "Hello from Flutter!",
"item_number_1": "001",
"item_name_1": "Test Item #1",
"amount_1": 50.00,
"quantity_1": "1",
"item_number_2": "002",
"item_name_2": "Test Item #1",
"amount_2": "25.00",
"quantity_2": "2",
"amount": 100.00,
"recurrence": "1 Month", // 定期支付频率
"duration": "1 Year", // 定期支付持续时间
"currency": "LKR",
"first_name": "Saman",
"last_name": "Perera",
"email": "samanp@gmail.com",
"phone": "0771234567",
"address": "No.1, Galle Road",
"city": "Colombo",
"country": "Sri Lanka",
"delivery_address": "No. 46, Galle road, Kalutara South",
"delivery_city": "Kalutara",
"delivery_country": "Sri Lanka",
"custom_1": "",
"custom_2": ""
};
PayHere.startPayment(paymentObject, (paymentId) {
print("Recurring Payment Success. Payment Id: $paymentId");
}, (error) {
print("Recurring Payment Failed. Error: $error");
}, () {
print("Recurring Payment Dismissed");
});
c. 预授权请求
令牌化客户卡详细信息以便后续使用。要从服务器捕获支付详情,请阅读文档。
import 'package:payhere_mobilesdk_flutter/payhere_mobilesdk_flutter.dart';
Map paymentObject = {
"sandbox": false, // 如果使用沙箱商户ID则为true
"preapprove": true, // 必须设置
"merchant_id": "1223220", // 替换为你的商户ID
"notify_url": "https://ent13zfovoz7d.x.pipedream.net/",
"order_id": "ItemNo12345",
"items": "Hello from Flutter!",
"currency": "LKR",
"first_name": "Saman",
"last_name": "Perera",
"email": "samanp@gmail.com",
"phone": "0771234567",
"address": "No.1, Galle Road",
"city": "Colombo",
"country": "Sri Lanka",
"amount": 30.00 // 可选参数,如果需要在预授权时收费
};
PayHere.startPayment(
paymentObject, (paymentId) {
print("Tokenization Payment Success. Payment Id: $paymentId");
}, (error) {
print("Tokenization Payment Failed. Error: $error");
}, () {
print("Tokenization Payment Dismissed");
}
);
d. 卡上保留请求
授权(保留)客户卡上的费用,以便稍后使用。要从服务器捕获支付保留详情,请阅读文档。
import 'package:payhere_mobilesdk_flutter/payhere_mobilesdk_flutter.dart';
Map paymentObject = {
"sandbox": false, // 如果使用沙箱商户ID则为true
"authorize": true, // 必须设置
"merchant_id": "1223220", // 替换为你的商户ID
"notify_url": "https://ent13zfovoz7d.x.pipedream.net/",
"order_id": "ItemNo12345",
"items": "Hello from Flutter!",
"currency": "LKR",
"item_number_1": "001",
"item_name_1": "Test Item #1",
"amount_1": "15.00",
"quantity_1": "2",
"item_number_2": "002",
"item_name_2": "Test Item #2",
"amount_2": "20.00",
"quantity_2": "1",
"amount": "50.00",
"first_name": "Saman",
"last_name": "Perera",
"email": "samanp@gmail.com",
"phone": "0771234567",
"address": "No.1, Galle Road",
"city": "Colombo",
"country": "Sri Lanka",
};
PayHere.startPayment(paymentObject, (paymentId) {
print("Hold-on-Card Payment Success.");
}, (error) {
print("Hold-on-Card Payment Failed. Error: $error");
}, () {
print("Hold-on-Card Payment Dismissed");
});
6. 可选地传递商品详细信息
从版本2.0.0
开始,你可以选择性地传递订单中每项的商品详细信息。这些详细信息会出现在客户的发票上。商品详细信息支持一次性、订阅和授权支付模式。不支持预授权支付。
每个商品有四个参数。它们的参数名称后面必须跟上该商品的索引。例如:
"item_number_1": "ITM001",
"item_name_1": "PayHere Sticker",
"quantity_1": "2",
"amount_1": "25.0",
下面是一个带有两个商品的一次性支付请求示例。如果有具体问题,请在GitHub的Issues部分提出。
import 'package:payhere_mobilesdk_flutter/payhere_mobilesdk_flutter.dart';
Map paymentObject = {
"sandbox": false,
"merchant_id": "1223220", // 替换为你的商户ID
"notify_url": "https://ent13zfovoz7d.x.pipedream.net/",
"order_id": "ItemNo12345",
"items": "Hello from Flutter!",
"item_number_1": "001", // ** 商品 1 **
"item_name_1": "Test Item #1",
"amount_1": "15.00",
"quantity_1": "2",
"item_number_2": "002", // ** 商品 2 **
"item_name_2": "Test Item #2",
"amount_2": "20.00",
"quantity_2": "1",
"amount": 50.00,
"currency": "LKR",
"first_name": "Saman",
"last_name": "Perera",
"email": "samanp@gmail.com",
"phone": "0771234567",
"address": "No.1, Galle Road",
"city": "Colombo",
"country": "Sri Lanka",
"delivery_address": "No. 46, Galle road, Kalutara South",
"delivery_city": "Kalutara",
"delivery_country": "Sri Lanka",
"custom_1": "",
"custom_2": ""
};
PayHere.startPayment(
paymentObject, (paymentId) {
print("One Time Payment Success. Payment Id: $paymentId");
}, (error) {
print("One Time Payment Failed. Error: $error");
}, () {
print("One Time Payment Dismissed");
}
);
常见问题
支持哪些版本的Flutter?
支持Flutter版本1.20.0以上。
支持哪些版本的iOS?
此SDK的iOS组件支持iOS 11.0以上版本。
支持哪些版本的Android?
此SDK的Android组件支持API级别17以上版本。
PayHere.startPayment
方法有哪些参数?
PayHere.startPayment(
paymentObject,
onCompletedHandler,
onErrorHandler,
onDismissedHandler
);
paymentObject
- 对象:作为Map<String, dynamic>
的支付参数。onCompletedHandler
- 函数:成功支付时,使用支付ID(字符串)作为参数调用。onErrorHandler
- 函数:发生错误时,使用错误(字符串)作为参数调用。onDismissedHandler
- 函数:在支付弹窗关闭但支付未处理前调用,无参数。
如何获取支付详情,如支付方式、状态、持卡人等?
你必须设置一个服务器端点,该端点接受异步的PayHere支付通知POST
请求,并将其URL传递给paymentObject
的notify_url
参数。
每种支付请求类型(一次性/定期/预授权)发送不同的支付通知。请参阅以下部分了解更多信息。
我遇到了一个错误,说“无法获取’https://dl.bintray.com…’”
PayHere Flutter原生SDK版本1.0.2之前的版本(1.0.1及更早版本)依赖于较旧版本的PayHere Android SDK,该版本不再通过bintray.com Maven仓库可用。升级到最新版本1.0.2并再次尝试。
如果仍然遇到问题,请确保已遵循新的“2. Android预设条件”部分中更新的指令,适用于SDK版本1.0.2及以上。
我在iOS中遇到一个运行时错误,提示“PayHere Bundle找不到!”
要解决此问题,请打开./ios/Podfile
文件。找到一行use_modular_headers!
。在其上方添加use_frameworks!
行,如下所示:
target 'Runner' do
# 添加这一行
use_frameworks!
use_modular_headers!
flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__))
end
更多关于Flutter支付集成插件payhere_mobilesdk_flutter的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter支付集成插件payhere_mobilesdk_flutter的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
payhere_mobilesdk_flutter
是一个用于在 Flutter 应用中集成 PayHere 支付功能的插件。PayHere 是斯里兰卡的一个流行支付网关,支持信用卡、借记卡以及多种本地支付方式。
以下是如何在 Flutter 项目中使用 payhere_mobilesdk_flutter
插件的步骤:
1. 添加依赖
首先,在 pubspec.yaml
文件中添加 payhere_mobilesdk_flutter
插件的依赖:
dependencies:
flutter:
sdk: flutter
payhere_mobilesdk_flutter: ^1.0.0 # 请检查最新版本
然后运行 flutter pub get
来安装依赖。
2. 初始化 PayHere SDK
在你的 Dart 文件中导入插件并初始化 PayHere SDK。
import 'package:payhere_mobilesdk_flutter/payhere_mobilesdk_flutter.dart';
在 initState
或 main
函数中初始化 SDK:
void main() {
WidgetsFlutterBinding.ensureInitialized();
PayHere().init(
onCompleted: (Map<dynamic, dynamic> data) {
print("Payment Completed: $data");
},
onError: (Map<dynamic, dynamic> error) {
print("Payment Error: $error");
},
onDismissed: () {
print("Payment Dismissed");
},
).then((_) {
runApp(MyApp());
});
}
3. 创建支付请求
创建一个支付请求对象并启动支付流程。
void startPayment() {
Map<String, dynamic> paymentObject = {
"sandbox": true, // 设置为 false 以使用生产环境
"merchant_id": "your_merchant_id",
"merchant_secret": "your_merchant_secret",
"notify_url": "https://your.notify.url",
"order_id": "order_12345",
"items": "Test Item",
"currency": "LKR",
"amount": 100.00,
"first_name": "John",
"last_name": "Doe",
"email": "john.doe@example.com",
"phone": "0771234567",
"address": "No.1, Galle Road",
"city": "Colombo",
"country": "Sri Lanka",
"delivery_address": "No.1, Galle Road",
"delivery_city": "Colombo",
"delivery_country": "Sri Lanka",
"custom_1": "",
"custom_2": ""
};
PayHere().startPayment(paymentObject);
}