Flutter支付插件flutter_payoo_vn的使用
Flutter支付插件flutter_payoo_vn的使用
该插件帮助在Flutter应用项目中集成Payoo原生移动SDK。目前,Payoo仅支持Android和iOS平台。
这是来自Romantic Project的一个礼物。更多详情请访问Romantic Developer。
开始使用
首先,在使用该插件之前,确保您的应用已经注册为Payoo的商户,并且您拥有Android(.aar文件)和iOS(框架文件)的SDK。
安卓设置
步骤1:通过AAR文件创建模块
-
参考文档
-
目前,每个Payoo的aar文件都是一个模块,名称如下:
步骤2:设置一些配置属性
- 将以下属性添加到你的项目路径下的
android/gradle.properties
文件中:
payoo.vn.native.sdk.dir=<包含Payoo安卓模块的目录>
payoo.vn.protocol.scheme.dev=<开发环境的协议方案>
payoo.vn.protocol.scheme.prod=<生产环境的协议方案>
- 在你的项目路径下的
android/build.gradle
文件中添加以下代码:
buildscript {
ext.kotlin_version = '1.3.50'
repositories {
google()
jcenter()
maven { url 'https://plugins.gradle.org/m2/' }
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:3.5.0'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
}
}
rootProject.allprojects {
repositories {
google()
jcenter()
maven { url 'https://jitpack.io' }
}
}
- 在你的项目路径下的
android/app/build.gradle
文件中添加以下代码:
def globalProperties = new Properties()
def globalPropertiesFile = new File(rootProject.projectDir, "gradle.properties")
println "propertiesFile: ${globalPropertiesFile}"
if (globalPropertiesFile.exists()) {
globalPropertiesFile.withReader('UTF-8') { reader ->
globalProperties.load(reader)
}
}
def payooSchemeDev = globalProperties.getProperty("payoo.vn.protocol.scheme.dev")
def payooSchemeProd = globalProperties.getProperty("payoo.vn.protocol.scheme.prod")
//TODO 你可以根据你的应用口味设置Payoo协议方案。
android {
compileSdkVersion 30
defaultConfig {
minSdkVersion 21
targetSdkVersion 30
resValue "string", "payoo_protocol_scheme", "${payooSchemeDev}"
}
lintOptions {
disable 'InvalidPackage'
}
packagingOptions {
}
}
dependencies {
implementation project(':payoo_core')
implementation project(':payoo_paybill')
implementation project(':payoo_payment')
implementation project(':payoo_topup')
// 这些依赖项由Payoo.vn所需。如果有问题,请联系Payoo协调员。
implementation "androidx.core:core-ktx:1.3.2"
implementation 'androidx.appcompat:appcompat:1.3.0'
implementation 'androidx.constraintlayout:constraintlayout:2.0.4'
implementation 'androidx.recyclerview:recyclerview:1.2.1'
implementation 'com.google.android.material:material:1.2.1'
implementation 'com.squareup.retrofit2:retrofit:2.4.0'
implementation 'com.squareup.retrofit2:converter-gson:2.4.0'
implementation 'com.squareup.retrofit2:adapter-rxjava2:2.4.0'
implementation 'androidx.lifecycle:lifecycle-livedata-ktx:2.2.0'
implementation 'org.fabiomsr:moneytextview:1.1.0'
implementation 'joda-time:joda-time:2.10.5'
implementation 'com.github.barteksc:android-pdf-viewer:2.8.2'
implementation 'com.github.zhukic:sectioned-recyclerview:1.2.3'
implementation 'androidx.paging:paging-runtime-ktx:2.1.0'
implementation 'com.github.wendux:DSBridge-Android:3.0.0'
implementation(platform("com.squareup.okhttp3:okhttp-bom:4.9.0"))
implementation("com.squareup.okhttp3:okhttp")
implementation("com.squareup.okhttp3:logging-interceptor")
implementation 'io.reactivex:rxkotlin:2.0.0-RC1'
implementation "io.reactivex.rxjava2:rxjava:2.2.1"
implementation 'io.reactivex.rxjava2:rxandroid:2.0.2'
}
- 启用MultipleDex。参见文档
步骤3:更新Proguard规则
- 添加以下行到
proguard-rules.pro
文件中:
#------------ Start Proguard rules for payoo_vn ----------------#
####################################################################################
# PAYMENT SDK
####################################################################################
-keep class vn.payoo.core.** { *; }
-dontwarn vn.payoo.core.**
-keepclassmembers enum vn.payoo.core.** { *; }
-keep class vn.payoo.model.** { *; }
-dontwarn vn.payoo.model.**
-keepclassmembers enum vn.payoo.model.** { *; }
-keep class vn.payoo.paymentsdk.PayooPaymentSDK {
public static <methods>;
}
-keepclassmembers class vn.payoo.paymentsdk.PayooPaymentSDK {
public static ** Companion;
}
-keepclassmembers enum vn.payoo.paymentsdk.** { *; }
####################################################################################
# DATA EXCEPTION
####################################################################################
-keep class vn.payoo.paymentsdk.data.exception.** { *; }
-dontwarn vn.payoo.paymentsdk.data.exception.**
####################################################################################
# DATA MODEL
####################################################################################
-keep class vn.payoo.paymentsdk.data.model.** { *; }
-dontwarn vn.payoo.paymentsdk.data.model.**
#------------ End Proguard rules for payoo_vn ----------------#
iOS设置
打开你的项目路径下的ios/Runner.xcworkspace
文件在Xcode中。
步骤1:为目标创建ExternalFrameworks组
-
为你的Runner目标创建一个新的组,命名为’ExternalFrameworks’,并添加所有Payoo的框架文件。参见文档
-
操作后,你会看到如下的图像:
步骤2:将ExternalFrameworks链接到flutter_payoo_vn目标
-
选择左侧面板中的Pods目标。
-
在中心面板中,选择TARGETS中的flutter_payoo_vn。
-
在Build Phases选项卡下,点击Link Binary With Libraries项下的(+)按钮,链接所有Payoo框架文件。
步骤3:将ExternalFrameworks嵌入到Runner目标
- 对Runner目标执行相同的步骤。
步骤4:添加NSContactsUsageDescription
- Payoo需要访问通讯录权限,在iOS上,你需要在Info.plist中添加NSContactsUsageDescription。参见文档
步骤5:添加NSAppTransportSecurity
- 还需要添加NSAppTransportSecurity以帮助应用程序在开发环境中进行HTTP连接。参见文档
在Flutter中使用
import 'package:flutter/material.dart';
import 'package:flutter_payoo_vn/flutter_payoo_vn.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatefulWidget {
@override
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
@override
void initState() {
_initialize();
super.initState();
}
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: const Text('插件示例应用'),
),
body: Center(
child: Column(
children: [
Text('这是Payoo'),
ElevatedButton(
onPressed: () {
_navigate(PayooVnServiceIds.topup);
},
child: Text(PayooVnServiceIds.topup)),
ElevatedButton(
onPressed: () {
_navigate(PayooVnServiceIds.electric);
},
child: Text(PayooVnServiceIds.electric)),
ElevatedButton(
onPressed: () {
_navigate(PayooVnServiceIds.water);
},
child: Text(PayooVnServiceIds.water)),
],
),
),
),
);
}
Future<dynamic> _navigate(String serviceId) async {
final res = await PayooVnPlugin.navigate(serviceId);
print('_MyAppState._navigate: $res');
}
void _initialize() async {
final res = await PayooVnPlugin.initialize(PayooVnSettings(
isDev: true,
merchantId: "your-merchant-id",
secretKey: "your-merchant-secret-key"));
}
}
开发环境
[✓] Flutter (Channel stable, 2.2.3, on macOS 11.2.3 20D91 darwin-x64, locale en-VN)
• Flutter version 2.2.3 at /Users/admin/fvm/versions/stable
• Framework revision f4abaa0735 (8天前), 2021-07-01 12:46:11 -0700
• Engine revision 241c87ad80
• Dart version 2.13.4
[✓] Android toolchain - develop for Android devices (Android SDK version 30.0.3)
• Android SDK at /Users/admin/Library/Android/sdk
• Platform android-30, build-tools 30.0.3
• ANDROID_HOME = /Users/admin/Library/Android/sdk
• Java binary at: /Applications/Android Studio.app/Contents/jre/jdk/Contents/Home/bin/java
• Java version OpenJDK Runtime Environment (build 1.8.0_242-release-1644-b3-6915495)
• 所有Android许可证均已接受。
[✓] Xcode - develop for iOS and macOS
• Xcode at /Applications/Xcode_12.app/Contents/Developer
• Xcode 12.4, Build version 12D4e
• CocoaPods version 1.10.1
[✓] Chrome - develop for the web
• Chrome at /Applications/Google Chrome.app/Contents/MacOS/Google Chrome
[✓] Android Studio (version 4.1)
• Android Studio at /Applications/Android Studio.app/Contents
• Flutter插件可以从以下地址安装:
🔨 https://plugins.jetbrains.com/plugin/9212-flutter
• Dart插件可以从以下地址安装:
🔨 https://plugins.jetbrains.com/plugin/6351-dart
• Java版本 OpenJDK Runtime Environment (build 1.8.0_242-release-1644-b3-6915495)
更多关于Flutter支付插件flutter_payoo_vn的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter支付插件flutter_payoo_vn的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
flutter_payoo_vn
是一个用于在 Flutter 应用中集成 Payoo 支付功能的插件。Payoo 是越南的一个流行的支付网关,支持多种支付方式。以下是如何在 Flutter 项目中使用 flutter_payoo_vn
插件的详细步骤。
1. 添加依赖
首先,你需要在 pubspec.yaml
文件中添加 flutter_payoo_vn
插件的依赖。
dependencies:
flutter:
sdk: flutter
flutter_payoo_vn: ^1.0.0 # 请使用最新版本
然后运行 flutter pub get
来获取依赖。
2. 配置 Payoo SDK
在 Android 和 iOS 项目中,你需要进行一些配置来支持 Payoo 支付。
Android 配置
在 android/app/build.gradle
文件中,确保你启用了多Dex支持,并添加了必要的依赖:
android {
...
defaultConfig {
...
multiDexEnabled true
}
...
}
dependencies {
...
implementation 'com.android.support:multidex:1.0.3'
}
iOS 配置
在 ios/Podfile
文件中,确保你添加了 Payoo 的依赖:
pod 'PayooCore', '~> 1.0.0' # 请使用最新版本
然后运行 pod install
来安装依赖。
3. 初始化 Payoo
在你的 Dart 代码中,首先需要初始化 Payoo 插件。通常你可以在 main.dart
文件中进行初始化。
import 'package:flutter_payoo_vn/flutter_payoo_vn.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
// 初始化 Payoo
await PayooVN.initialize(
merchantId: 'YOUR_MERCHANT_ID',
merchantName: 'YOUR_MERCHANT_NAME',
secretKey: 'YOUR_SECRET_KEY',
environment: PayooEnvironment.sandbox, // 或者 PayooEnvironment.production
);
runApp(MyApp());
}
4. 发起支付
在需要发起支付的地方,你可以调用 PayooVN.pay
方法来发起支付请求。
import 'package:flutter_payoo_vn/flutter_payoo_vn.dart';
class PaymentPage extends StatelessWidget {
Future<void> initiatePayment() async {
try {
final response = await PayooVN.pay(
orderId: 'ORDER_ID',
orderTitle: 'ORDER_TITLE',
orderAmount: 100000, // 金额,单位是越南盾
orderDescription: 'ORDER_DESCRIPTION',
customerName: 'CUSTOMER_NAME',
customerEmail: 'CUSTOMER_EMAIL',
customerPhone: 'CUSTOMER_PHONE',
returnUrl: 'RETURN_URL',
cancelUrl: 'CANCEL_URL',
);
if (response.status == PayooPaymentStatus.success) {
// 支付成功
print('Payment successful: ${response.transactionId}');
} else if (response.status == PayooPaymentStatus.cancelled) {
// 支付取消
print('Payment cancelled');
} else {
// 支付失败
print('Payment failed: ${response.errorMessage}');
}
} catch (e) {
print('Error: $e');
}
}
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Pay with Payoo'),
),
body: Center(
child: ElevatedButton(
onPressed: initiatePayment,
child: Text('Pay Now'),
),
),
);
}
}