Flutter支付集成插件flutter_onpay_sdk的使用
Flutter支付集成插件flutter_onpay_sdk的使用
该插件用于将Flutter应用程序与支付服务onpay.ru
进行集成。
通过此插件,用户可以在应用内使用银行卡和其他支持的支付方式(如银行快速支付系统)完成支付,而无需离开应用程序。
重要信息
此插件仅能在已拥有onpay.ru
商户账户的情况下使用。
功能
- 在应用程序内支付商品和服务费用
- 支持Visa/Mastercard支付
- 支持俄罗斯央行的银行快速支付系统(СБП)
- 支持所有可用的支付方式
- 生成二维码以支持线下支付通过СБП
开始使用
对于接受Visa/Mastercard/МИР卡支付
- 注册并登录到
https://onpay.ru
- 填写接收信用卡支付的申请(支付方式为"CRD" / “UNR” / “CRW”)
- 请求OnPay的技术支持激活支付表单API (
https://wiki.onpay.ru/doku.php?id=api-for-pay-form
)
安装
在项目的pubspec.yaml
文件中添加以下依赖:
dependencies:
flutter_onpay_sdk: any # 或者使用最新版本
Android 配置
确保在<项目根目录>/android/app/src/main/AndroidManifest.xml
文件中添加了以下权限:
<uses-permission android:name="android.permission.INTERNET"/>
使用示例
默认支付方法
import 'package:flutter_onpay_sdk/flutter_onpay_sdk.dart';
// 1. 创建支付对象
OnPayOrder order = OnPayOrder(
reference: "SOMEUNIQ", // 唯一标识符
payAmount: 100, // 价格(单位:分)
payFor: '产品1', // 商品描述
payMode: 'fix', // 固定价格模式
recipient: 'cloud_sciencejet_net', // 商户在onpay的代码
userEmail: 'some@mail.ru', // 用户邮箱
note: "商品备注", // 可选。购买商品的额外描述
interfaceTicker: "CRW", // 指定商户可用的支付方式
additionalParams: { // 额外参数。将在check和pay请求中通过API传递
"someid": "1"
},
);
// 2. 在当前上下文中打开支付表单。这将打开一个新屏幕,展示支付表单。结果是一个包含支付状态的OnPayResult对象
OnPayResult result = await OnPaySdk.openPaymentForm(context, order);
// 3. 处理支付结果
switch (result.status) {
case OnPayResultCode.success:
// "支付成功";
break;
case OnPayResultCode.fail:
// "支付失败";
break;
case OnPayResultCode.notCompleted:
// "支付未完成";
break;
}
通过银行快速支付系统(СБП)进行支付
import 'package:flutter_onpay_sdk/flutter_onpay_sdk.dart';
// 1. 创建支付对象
OnPayOrder order = OnPayOrder(
reference: "SOMEUNIQ", // 唯一标识符
payAmount: 100, // 价格(单位:分)
payFor: '产品1', // 商品描述
payMode: 'fix', // 固定价格模式
recipient: 'onpay', // 商户在onpay的代码
userEmail: 'some@mail.ru', // 用户邮箱
note: "商品备注", // 可选。购买商品的额外描述
interfaceTicker: "QRW", // 指定支付方式为СБП
);
// 2. 在当前上下文中打开支付表单。这将打开一个新屏幕,展示支付表单。结果是一个包含支付状态的OnPayResult对象
OnPayResult result = await OnPaySdk.openPaymentForm(context, order, method: OnPayMethod.sbp);
示例代码
// 忽略_for_file: avoid_print, use_build_context_synchronously
import 'package:flutter/material.dart';
import 'package:flutter_onpay_sdk/data_models/pay_method.dart';
import 'package:flutter_onpay_sdk/data_models/pay_order.dart';
import 'package:flutter_onpay_sdk/data_models/pay_result.dart';
import 'package:flutter_onpay_sdk/sdk/onpay.dart';
class ExampleAppMyHomePage extends StatefulWidget {
const ExampleAppMyHomePage({Key? key, required this.title}) : super(key: key);
final String title;
[@override](/user/override)
State<ExampleAppMyHomePage> createState() => _MyHomePageState();
}
class _MyHomePageState extends State<ExampleAppMyHomePage> {
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(widget.title),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
_apiPayment(),
_apiFailedPayment(),
_sbpPayment(),
_qrCodePayment(),
],
),
),
);
}
Widget _apiFailedPayment() {
OnPayOrder order = OnPayOrder(
reference: "SALE1",
amount: 0.99,
payFor: '信用卡支付',
payMode: 'fix',
recipient: 'cloud_sciencejet_net',
userEmail: 'some@mail.ru',
interfaceTicker: 'UNR',
note: "会返回错误",
);
return _saleItem(order, () => _openPaymentForm(order));
}
Widget _apiPayment() {
OnPayOrder order = OnPayOrder(
reference: "SALE2",
payFor: '产品2',
amount: 10,
recipient: 'onpay',
userEmail: 'some@mail.ru',
interfaceTicker: 'UNR',
note: "商品备注。可以支付",
);
return _saleItem(order, () => _openPaymentForm(order));
}
Widget _sbpPayment() {
OnPayOrder order = OnPayOrder(
reference: "SALE3",
payFor: 'СБП支付',
amount: 20,
recipient: 'onpay',
userEmail: 'some@mail.ru',
interfaceTicker: 'QRW',
note: "通过СБП系统支付",
);
return _saleItem(order, () => _openPaymentForm(order, method: OnPayMethod.sbp));
}
Widget _qrCodePayment() {
OnPayOrder order = OnPayOrder(
reference: "SALE3",
payFor: '生成二维码支付',
amount: 20,
recipient: 'onpay',
userEmail: 'some@mail.ru',
interfaceTicker: '',
note: "生成二维码支付",
);
return _saleItem(order, () => _openPaymentForm(order, method: OnPayMethod.qrCode));
}
Widget _saleItem(OnPayOrder order, void Function() onPressed) {
return Padding(
padding: const EdgeInsets.fromLTRB(20, 5, 20, 5),
child: Card(
child: Row(
crossAxisAlignment: CrossAxisAlignment.center,
children: [
const Expanded(flex: 1, child: Icon(Icons.card_giftcard, size: 30)),
Expanded(
flex: 3,
child: Column(
children: [
Text(order.payFor),
Text(order.note ?? ""),
Text("${order.amount} ${order.ticker}"),
OutlinedButton(
onPressed: onPressed,
child: const Text("购买"),
)
],
),
),
],
)),
);
}
void _openPaymentForm(OnPayOrder order, {OnPayMethod method = OnPayMethod.api}) async {
OnPayResult result = await OnPaySdk.openPaymentForm(context, order, method: method);
print("_openPaymentForm RESULT: ${result.status.toString()}");
print("_openPaymentForm RESULT: ${result.message}");
String msg;
switch (result.status) {
case OnPayResultCode.success:
msg = "支付成功";
break;
case OnPayResultCode.fail:
msg = "支付失败";
break;
case OnPayResultCode.notCompleted:
msg = "支付未完成";
break;
}
ScaffoldMessenger.of(context)
..removeCurrentSnackBar()
..showSnackBar(SnackBar(content: Text('${result.order.payFor}: $msg [${result.message}]')));
}
}
更多关于Flutter支付集成插件flutter_onpay_sdk的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter支付集成插件flutter_onpay_sdk的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,以下是如何在Flutter项目中集成并使用flutter_onpay_sdk
插件的详细步骤和相关代码案例。
1. 添加依赖
首先,在你的pubspec.yaml
文件中添加flutter_onpay_sdk
依赖:
dependencies:
flutter:
sdk: flutter
flutter_onpay_sdk: ^最新版本号 # 请替换为实际的最新版本号
然后运行flutter pub get
来获取依赖。
2. 导入插件
在你需要使用支付功能的Dart文件中导入插件:
import 'package:flutter_onpay_sdk/flutter_onpay_sdk.dart';
3. 配置Android和iOS
Android
在android/app/src/main/AndroidManifest.xml
中添加必要的权限和配置:
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<!-- 其他必要的权限 -->
<application
... >
<!-- 添加必要的meta-data -->
<meta-data
android:name="com.onpay.sdk.API_KEY"
android:value="你的API_KEY"/>
<!-- 其他配置 -->
</application>
iOS
在ios/Runner/Info.plist
中添加必要的权限和配置。你还需要在ios/Runner/AppDelegate.swift
或ios/Runner/AppDelegate.m
中进行一些配置。
对于AppDelegate.swift
:
import UIKit
import Flutter
import flutter_onpay_sdk // 导入插件
@UIApplicationMain
@objc class AppDelegate: FlutterAppDelegate {
override func application(
_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
) -> Bool {
GeneratedPluginRegistrant.register(with: self)
OnpaySDK.configure(with: "你的API_KEY") // 配置API_KEY
return super.application(application, didFinishLaunchingWithOptions: launchOptions)
}
}
4. 初始化并使用SDK
在你的Flutter代码中初始化并使用SDK。例如,在一个按钮点击事件中启动支付:
import 'package:flutter/material.dart';
import 'package:flutter_onpay_sdk/flutter_onpay_sdk.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('Flutter OnPay SDK Demo'),
),
body: Center(
child: ElevatedButton(
onPressed: _startPayment,
child: Text('Start Payment'),
),
),
),
);
}
void _startPayment() async {
try {
final result = await OnpaySDK.startPayment(
orderId: '你的订单ID',
amount: 100, // 金额,单位根据你的需求(如:分)
currencyCode: 'USD', // 货币代码
description: '商品描述',
// 其他可选参数
);
if (result.isSuccess) {
print('支付成功: ${result.response}');
} else {
print('支付失败: ${result.errorMessage}');
}
} catch (e) {
print('支付异常: $e');
}
}
}
5. 处理支付结果
在上面的代码中,OnpaySDK.startPayment
会返回一个PaymentResult
对象,你可以根据isSuccess
字段来判断支付是否成功,并处理相应的逻辑。
注意事项
- 确保你已经在OnPay平台注册并获取了API_KEY。
- 在生产环境中,请务必保护好你的API_KEY,不要硬编码在客户端代码中。
- 根据实际需要,调整金额单位、货币代码等参数。
- 仔细阅读
flutter_onpay_sdk
的官方文档,以获取更多高级功能和配置选项。
这样,你就可以在Flutter项目中集成并使用flutter_onpay_sdk
插件来处理支付了。