Flutter支付集成插件easy_pay_develop的使用
Flutter支付集成插件easy_pay_develop的使用
本指南提供了在您的Flutter项目中配置所需Android依赖项和设置的逐步说明。
在flutter项目中实现:
dependencies:
easy_pay_develop: ^0.0.2
Android端配置
步骤1:将SoftPos-v1.3.66.11-Debug_Test.aar
添加到项目中
- 导航到您的Flutter项目的
android
文件夹。 - 在
android
文件夹内创建一个名为libs
的新文件夹。 - 将
SoftPos-v1.3.66.11-Debug_Test.aar
文件粘贴到libs
文件夹中。
步骤2:在AndroidManifest.xml
文件中添加以下权限
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
步骤3:更新build.gradle
文件
- 打开
android/app/build.gradle
文件。 - 在
dependencies
部分,添加以下代码:
implementation 'com.sdk:easypay:1.1.5'
implementation 'com.denovo:topliteapp:1.7.5.1'
compileOnly files('libs/SoftPos-v1.3.66.11-Debug_Test.aar')
步骤4:在MainActivity
中扩展FlutterActivity
- 导航到
android/app/src/main/kotlin/your/package/name/
。 - 创建或更新
MainActivity.kt
文件,使用以下代码:
import android.os.Bundle
import io.flutter.embedding.android.FlutterActivity
import io.flutter.embedding.engine.FlutterEngine
import io.flutter.plugin.common.MethodChannel
import io.flutter.plugins.GeneratedPluginRegistrant
class MainActivity : FlutterActivity() {
private val CHANNEL = "easy_pay_develop"
private var easyPayPlugin: EasyPayPlugin? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
// 初始化EasyPay插件
easyPayPlugin = EasyPayPlugin()
easyPayPlugin?.setActivity(this)
}
override fun configureFlutterEngine(flutterEngine: FlutterEngine) {
super.configureFlutterEngine(flutterEngine)
GeneratedPluginRegistrant.registerWith(flutterEngine)
easyPayPlugin?.let {
flutterEngine.plugins.add(it)
}
MethodChannel(flutterEngine.dartExecutor.binaryMessenger, CHANNEL).setMethodCallHandler { call, result ->
when (call.method) {
"startPayment" -> {
val secretKey = call.argument<String>("secretKey") ?: ""
val jsonRequest = call.argument<String>("jsonRequest") ?: ""
easyPayPlugin?.onMethodCall(call, result)
}
"registerDevice" -> {
val tpn = call.argument<String>("tpn") ?: ""
val merchantKey = call.argument<String>("merchantKey") ?: ""
easyPayPlugin?.onMethodCall(call, result)
}
else -> {
result.notImplemented()
}
}
}
}
}
步骤5:在settings.gradle
文件的repositories
部分添加以下代码
maven {
url = uri("s3://denovo-android.s3.amazonaws.com")
credentials(AwsCredentials) {
accessKey = "accessKey"
secretKey = "secretKey"
}
}
maven {
url = uri("gitUrl")
credentials {
username = "Username"
password = "password"
}
}
步骤6:在gradle.properties
文件中添加以下代码
android.enableJetifier=true
android.disableAutomaticComponentCreation=true
步骤7:Android调用函数
要在Android侧调用函数,请使用以下代码:
Future<void> startTransaction() async {
try {
var status = await Permission.location.status;
if (!status.isGranted) {
status = await Permission.location.request();
if (!status.isGranted) {
showSnackbar('位置权限被拒绝。请允许权限。');
return;
}
}
final response = await _easyPay.registerDevice('tpnKey', 'merchantKey');
print("交易成功: $response");
Map<String, dynamic> decodedResponse = jsonDecode(response ?? '{}');
String? sessionKey = decodedResponse['session_key'];
if (sessionKey != null) {
print('会话密钥: $sessionKey');
var uuid = Uuid();
// 更改参数值,除了类型
Map<String, dynamic> paymentData = {
'type': 'SALE', // 必须为SALE
'amount': '1', // 更改金额值
'isreceiptsneeded': false,
'showapprovalscreen': false,
'Customobject': {
'customeremail': 'graghu@denovosystem.com',
'PhoneNumber': '919840720372',
'CreditType': '1',
'NumberOfPayments': '1',
'ExtraData': '[]',
'HolderID': '1',
'TransactionUniqueIdForQuery': uuid.v1()
}
};
String jsonRequest = jsonEncode(paymentData);
final paymentResponse = await _easyPay.startPayment(sessionKey, jsonRequest);
print('付款已启动: $paymentResponse');
} else {
print('响应中未找到会话密钥。');
}
} catch (e) {
showSnackbar('启动交易失败: $e');
}
}
iOS端配置
步骤1:在info.plist
文件中添加以下权限
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
<key>NSLocationWhenInUseUsageDescription</key>
<string>请提供原因,说明您的应用为何需要在使用时访问位置。</string>
<key>NSLocationAlwaysUsageDescription</key>
<string>请提供原因,说明您的应用为何需要始终访问位置。</string>
步骤2:iOS示例代码
Future<void> makeRequest() async {
try {
final response = await _easyPay.requestWith('merchantKey');
print("请求成功: $response");
} catch (e) {
showSnackbar('请求失败: $e');
}
}
Future<void> performTransaction() async {
try {
final response = await _easyPay.transactionWith(100.0, 1); // 更改金额值
print("交易成功: $response");
} catch (e) {
showSnackbar('交易失败: $e');
}
}
// 首先调用makeRequest()函数。然后调用performTransaction()。
完整示例代码
import 'dart:convert';
import 'package:flutter/material.dart';
import 'package:easy_pay_develop/easy_pay_develop.dart';
import 'package:permission_handler/permission_handler.dart';
import 'package:uuid/uuid.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatefulWidget {
const MyApp({super.key});
[@override](/user/override)
State<MyApp> createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
String _platformVersion = 'Unknown';
final EasyPay _easyPay = EasyPay();
String? _sessionKey;
[@override](/user/override)
void initState() {
super.initState();
initPlatformState();
}
Future<void> initPlatformState() async {
try {
final version = await _easyPay.getPlatformVersion() ?? '未知平台版本';
setState(() {
_platformVersion = version;
});
} catch (e) {
print('获取平台版本失败: $e');
}
}
void showSnackbar(String message) {
final snackBar = SnackBar(content: Text(message));
ScaffoldMessenger.of(context).showSnackBar(snackBar);
}
Future<void> startTransaction() async {
try {
var status = await Permission.location.status;
if (!status.isGranted) {
status = await Permission.location.request();
if (!status.isGranted) {
showSnackbar('位置权限被拒绝。请允许权限。');
return;
}
}
final response = await _easyPay.registerDevice('128922769414', '139453877702');
print("交易成功: $response");
Map<String, dynamic> decodedResponse = jsonDecode(response ?? '{}');
String? sessionKey = decodedResponse['session_key'];
if (sessionKey != null) {
print('会话密钥: $sessionKey');
var uuid = Uuid();
Map<String, dynamic> paymentData = {
'type': 'SALE',
'amount': '1',
'isreceiptsneeded': false,
'showapprovalscreen': false,
'Customobject': {
'customeremail': 'graghu@denovosystem.com',
'PhoneNumber': '919840720372',
'CreditType': '1',
'NumberOfPayments': '1',
'ExtraData': '[]',
'HolderID': '1',
'TransactionUniqueIdForQuery': uuid.v1()
}
};
String jsonRequest = jsonEncode(paymentData);
final paymentResponse = await _easyPay.startPayment('5', sessionKey, jsonRequest);
print('付款已启动: $paymentResponse');
} else {
print('响应中未找到会话密钥。');
}
} catch (e) {
showSnackbar('启动交易失败: $e');
}
}
Future<void> makeRequest() async {
try {
final response = await _easyPay.requestWith('128922769414');
print("请求成功: $response");
} catch (e) {
showSnackbar('请求失败: $e');
}
}
Future<void> performTransaction() async {
try {
final response = await _easyPay.transactionWith(100.0, 1); // 示例值
print("交易成功: $response");
} catch (e) {
showSnackbar('交易失败: $e');
}
}
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: const Text('插件示例应用'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text('运行于: $_platformVersion\n'),
ElevatedButton(
onPressed: () => startTransaction(),
child: const Text('开始交易'),
),
ElevatedButton(
onPressed: () => makeRequest(),
child: const Text('发起请求'),
),
ElevatedButton(
onPressed: () => performTransaction(),
child: const Text('执行交易'),
),
],
),
),
),
);
}
}
更多关于Flutter支付集成插件easy_pay_develop的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
1 回复
更多关于Flutter支付集成插件easy_pay_develop的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
easy_pay_develop
是一个用于 Flutter 应用中的支付集成插件,支持多种支付方式,如支付宝、微信支付等。以下是如何在 Flutter 项目中使用 easy_pay_develop
插件的步骤:
1. 添加依赖
首先,在 pubspec.yaml
文件中添加 easy_pay_develop
插件的依赖:
dependencies:
flutter:
sdk: flutter
easy_pay_develop: ^latest_version
然后运行 flutter pub get
以获取依赖。
2. 配置支付平台
根据你使用的支付平台(如支付宝、微信支付),你需要在相应的平台进行配置。
2.1 支付宝配置
在 AndroidManifest.xml
中添加以下内容:
<activity
android:name="com.alipay.sdk.app.H5PayActivity"
android:configChanges="orientation|keyboardHidden|navigation|screenSize"
android:exported="false"
android:screenOrientation="portrait"
android:windowSoftInputMode="stateAlwaysHidden|adjustPan" />
2.2 微信支付配置
在 AndroidManifest.xml
中添加以下内容:
<activity
android:name="com.tencent.mm.opensdk.openapi.WXPayEntryActivity"
android:exported="true"
android:launchMode="singleTop"
android:theme="@android:style/Theme.Translucent.NoTitleBar" />
3. 初始化支付插件
在应用启动时初始化支付插件。通常可以在 main.dart
文件中进行初始化:
import 'package:easy_pay_develop/easy_pay_develop.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
await EasyPayDevelop.init();
runApp(MyApp());
}
4. 发起支付
在需要发起支付的地方,调用支付方法。以下是一个示例:
import 'package:easy_pay_develop/easy_pay_develop.dart';
void payWithAlipay() async {
try {
String orderInfo = "your_order_info"; // 从服务器获取的订单信息
Map<String, dynamic> result = await EasyPayDevelop.alipay(orderInfo);
if (result['resultStatus'] == '9000') {
// 支付成功
print('支付成功');
} else {
// 支付失败
print('支付失败: ${result['resultStatus']}');
}
} catch (e) {
print('支付异常: $e');
}
}
void payWithWeChat() async {
try {
Map<String, dynamic> params = {
"appid": "your_appid",
"partnerid": "your_partnerid",
"prepayid": "your_prepayid",
"package": "Sign=WXPay",
"noncestr": "your_noncestr",
"timestamp": "your_timestamp",
"sign": "your_sign"
};
Map<String, dynamic> result = await EasyPayDevelop.weChatPay(params);
if (result['errCode'] == 0) {
// 支付成功
print('支付成功');
} else {
// 支付失败
print('支付失败: ${result['errCode']}');
}
} catch (e) {
print('支付异常: $e');
}
}