Flutter支付插件yenepay_flutter的使用
Flutter支付插件yenepay_flutter的使用
yenepay_flutter
是一个用于通过Yenepay支付网关进行支付的Flutter插件。它支持Android和iOS平台。
安装
要使用该插件,你需要在 pubspec.yaml
文件中添加 yenepay_flutter
作为依赖项。
对于Android
你需要在 android/app/src/main/AndroidManifest.xml
文件中声明以下意图过滤器:
<manifest ...>
<!-- ... 其他标签 -->
<!-- 提供API级别30及以上所需的可见性配置 -->
<queries>
<intent>
<action android:name="android.intent.action.VIEW" />
<data android:scheme="https" />
</intent>
</queries>
<application ...>
<activity ...>
<!-- ... 其他标签 -->
<!-- 深度链接以监听yenepay支付状态 -->
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<!-- 接受URI格式为YOUR_SCHEME://YOUR_HOST 的请求 -->
<data
android:scheme="yenepayflutter"
android:host="success" />
<data
android:scheme="yenepayflutter"
android:host="cancel" />
<data
android:scheme="yenepayflutter"
android:host="failure" />
</intent-filter>
</activity>
</application>
</manifest>
对于iOS
你需要在 ios/Runner/Info.plist
文件中添加以下URL方案条目:
<key>LSApplicationQueriesSchemes</key>
<array>
<string>https</string>
<string>http</string>
</array>
为了监听yenepay支付状态,你还需要在 ios/Runner/Info.plist
文件中声明方案(或者通过Xcode的目标信息编辑器,在URL类型下):
<!-- ... 其他标签 -->
<plist>
<dict>
<!-- ... 其他标签 -->
<key>CFBundleURLTypes</key>
<array>
<dict>
<key>CFBundleTypeRole</key>
<string>Editor</string>
<key>CFBundleURLName</key>
<string>[REPLACE_WITH_YOU_APP_BUNDLE_ID]</string>
<key>CFBundleURLSchemes</key>
<array>
<string>yenepayflutter</string>
</array>
</dict>
</array>
<!-- ... 其他标签 -->
</dict>
</plist>
使用
首先在应用启动时初始化 yenepay_flutter
:
import 'package:flutter/material.dart';
import 'package:yenepay_flutter/models/enums.dart';
import 'package:yenepay_flutter/models/yenepay_item.dart';
import 'package:yenepay_flutter/models/yenepay_parameters.dart';
import 'package:yenepay_flutter/yenepay_flutter.dart';
class MyApp extends StatelessWidget {
const MyApp({Key? key}) : super(key: key);
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
home: const HomePage(),
);
}
}
class HomePage extends StatefulWidget {
const HomePage({Key? key}) : super(key: key);
[@override](/user/override)
_HomePageState createState() => _HomePageState();
}
class _HomePageState extends State<HomePage> {
[@override](/user/override)
void initState() {
YenepayFlutter.init(
onPaymentSuccess: (List<YenepayItem> items) {
print("onPaymentSuccess ${items.length} ${items[0].itemName}");
},
onPaymentCancel: (List<YenepayItem> items) {
print("onPaymentCancel ${items.length} ${items[0].itemName}");
},
onPaymentFailure: (List<YenepayItem> items) {
print("onPaymentFailure ${items.length} ${items[0].itemName}");
},
onError: (e) {
print("onError ${e.toString()}");
},
);
// 启动支付流程
YenepayFlutter.startPayment(
isTestEnv: true,
yenepayParameters: YenepayParameters(
process: YenepayProcess.Express,
merchantId: "SB1356",
items: [
YenepayItem(
itemId: '1',
unitPrice: 12.2,
quantity: 2,
itemName: 'test',
),
],
),
);
super.initState();
}
[@override](/user/override)
void dispose() {
YenepayFlutter.dispose();
super.dispose();
}
[@override](/user/override)
Widget build(BuildContext context) {
return Container();
}
}
最后别忘了在应用关闭时调用 dispose
方法:
[@override](/user/override)
void dispose() {
YenepayFlutter.dispose();
super.dispose();
}
更多关于Flutter支付插件yenepay_flutter的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter支付插件yenepay_flutter的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
yenepay_flutter
是一个用于在 Flutter 应用中集成 YenePay 支付的插件。YenePay 是一个在埃塞俄比亚广泛使用的支付网关,支持在线支付、移动支付等。通过 yenepay_flutter
插件,你可以轻松地在 Flutter 应用中集成 YenePay 支付功能。
以下是如何使用 yenepay_flutter
插件的步骤:
1. 添加依赖
首先,你需要在 pubspec.yaml
文件中添加 yenepay_flutter
插件的依赖:
dependencies:
flutter:
sdk: flutter
yenepay_flutter: ^1.0.0 # 请检查最新版本
然后运行 flutter pub get
来安装依赖。
2. 初始化 YenePay
在你的 Flutter 应用中,首先需要初始化 YenePay。你可以在 main.dart
文件中进行初始化:
import 'package:yenepay_flutter/yenepay_flutter.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
await YenepayFlutter.initialize(
merchantId: 'YOUR_MERCHANT_ID', // 你的 YenePay 商户 ID
merchantOrderId: 'YOUR_ORDER_ID', // 你的订单 ID
returnUrl: 'YOUR_RETURN_URL', // 支付成功后的返回 URL
);
runApp(MyApp());
}
3. 发起支付请求
在需要发起支付的地方,你可以使用 YenepayFlutter.startPayment
方法来发起支付请求:
import 'package:yenepay_flutter/yenepay_flutter.dart';
Future<void> initiatePayment() async {
try {
final paymentResponse = await YenepayFlutter.startPayment(
amount: 100.0, // 支付金额
currency: 'ETB', // 货币类型
itemName: 'Sample Product', // 商品名称
itemId: '12345', // 商品 ID
successUrl: 'https://yoursuccessurl.com', // 支付成功后的 URL
failureUrl: 'https://yourfailureurl.com', // 支付失败后的 URL
ipnUrl: 'https://youripnurl.com', // 即时支付通知 URL
);
// 处理支付响应
if (paymentResponse['Status'] == 'Success') {
print('Payment Successful');
} else {
print('Payment Failed');
}
} catch (e) {
print('Error: $e');
}
}
4. 处理支付结果
在 startPayment
方法中,你可以通过 successUrl
和 failureUrl
来指定支付成功或失败后的回调 URL。你可以在这些 URL 中处理支付结果,或者直接在 Flutter 应用中处理 paymentResponse
。
5. 处理即时支付通知 (IPN)
即时支付通知 (IPN) 是 YenePay 在支付完成后发送到你的服务器的通知。你可以在 ipnUrl
中指定接收 IPN 的 URL,然后在服务器端处理支付结果。
6. 测试支付
在开发过程中,你可以使用 YenePay 的测试环境来进行支付测试。确保在测试时使用测试商户 ID 和测试订单 ID。
7. 发布应用
在发布应用之前,确保你已经配置了正确的生产环境的商户 ID 和其他必要参数。
8. 处理错误和异常
在支付过程中,可能会遇到各种错误和异常。你可以使用 try-catch
块来捕获和处理这些错误,确保用户体验不受影响。
示例代码
以下是一个完整的示例代码,展示了如何在 Flutter 应用中使用 yenepay_flutter
插件:
import 'package:flutter/material.dart';
import 'package:yenepay_flutter/yenepay_flutter.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
await YenepayFlutter.initialize(
merchantId: 'YOUR_MERCHANT_ID',
merchantOrderId: 'YOUR_ORDER_ID',
returnUrl: 'YOUR_RETURN_URL',
);
runApp(MyApp());
}
class MyApp extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('YenePay Payment Example'),
),
body: Center(
child: ElevatedButton(
onPressed: () {
initiatePayment();
},
child: Text('Pay with YenePay'),
),
),
),
);
}
}
Future<void> initiatePayment() async {
try {
final paymentResponse = await YenepayFlutter.startPayment(
amount: 100.0,
currency: 'ETB',
itemName: 'Sample Product',
itemId: '12345',
successUrl: 'https://yoursuccessurl.com',
failureUrl: 'https://yourfailureurl.com',
ipnUrl: 'https://youripnurl.com',
);
if (paymentResponse['Status'] == 'Success') {
print('Payment Successful');
} else {
print('Payment Failed');
}
} catch (e) {
print('Error: $e');
}
}