Flutter支付集成插件sberbank_acquiring的使用
Flutter支付集成插件sberbank_acquiring的使用
概述
Sberbank Acquiring SDK允许您将Sberbank互联网收单功能集成到iOS和Android平台的移动应用中。该SDK提供了多种支付方式,包括普通支付、重复支付以及通过Apple Pay或Google Pay进行支付等。
安装
在您的pubspec.yaml
文件中添加以下依赖项:
dependencies:
sberbank_acquiring: <latest_version>
请确保替换<latest_version>
为实际的最新版本号。
使用前准备
在开始使用SDK之前,您需要获取以下信息:
userName
: 商户服务账户的登录名。password
: 商户账户的密码。token
: 用于验证商户发送请求到支付网关时的身份令牌(如果使用token
则不需要提供userName
和password
)。
这些值可以在您的个人账户中连接到Sberbank互联网收单后获得。
配置示例
使用用户名和密码配置
final SberbankAcquiring acquiring = SberbankAcquiring(
SberbankAcquiringConfig.credential(
userName: 'your_username',
password: 'your_password',
isDebugMode: false,
),
);
使用Token配置
final SberbankAcquiring acquiring = SberbankAcquiring(
SberbankAcquiringConfig.token(
token: 'your_token',
isDebugMode: false,
),
);
使用代理配置
final SberbankAcquiring acquiring = SberbankAcquiring(
SberbankAcquiringConfig.proxy(
proxyDomain: 'server.com',
proxyPath: 'api/v1/',
globalHeaders: <String, String>{'auth': 'test'},
mapping: (AcquiringRequest request, bool isDebugMode) {
if(request is RegisterRequest) return ProxyMapping(path: '/register');
return;
}
),
);
示例代码
以下是一个完整的Flutter应用程序示例,展示了如何使用sberbank_acquiring
插件进行支付操作。
import 'dart:io';
import 'package:flutter/material.dart';
import 'package:sberbank_acquiring/sberbank_acquiring_core.dart';
import 'package:sberbank_acquiring/sberbank_acquiring_ui.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: MyHomePage(),
);
}
}
class MyHomePage extends StatefulWidget {
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
final List<PaymentItem> items = [
PaymentItem(name: 'T-Shirt', price: 2000),
PaymentItem(name: 'Trousers', price: 1600),
];
SberbankAcquiring acquiring = SberbankAcquiring(
SberbankAcquiringConfig.token(token: 'YRF3C5RFICWISEWFR6GJ'),
);
OrderStatus? orderStatus;
@override
Widget build(BuildContext context) {
return Scaffold(
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text('Status: $orderStatus'),
ElevatedButton(
onPressed: () async {
await webviewPayment();
},
child: const Text('Webview Buy'),
),
ElevatedButton(
onPressed: () async {
await tokenPayment();
},
child: const Text('Apple/Google Buy'),
),
],
),
),
);
}
Future<void> webviewPayment() async {
final RegisterResponse register = await acquiring.register(
RegisterRequest(
amount: 1000,
returnUrl: 'https://test.ru/return.html',
failUrl: 'https://test.ru/fail.html',
orderNumber: 'test',
pageView: 'MOBILE',
),
);
final String? formUrl = register.formUrl;
if (!register.hasError && formUrl != null) {
Navigator.of(context).push(
MaterialPageRoute<void>(
builder: (BuildContext context) => Scaffold(
body: WebViewPayment(
logger: acquiring.logger,
formUrl: formUrl,
returnUrl: 'https://test.ru/return.html',
failUrl: 'https://test.ru/fail.html',
onLoad: (bool v) {
debugPrint('WebView load: $v');
},
onError: () {
debugPrint('WebView Error');
},
onFinished: (String? v) async {
final GetOrderStatusExtendedResponse status =
await acquiring.getOrderStatusExtended(
GetOrderStatusExtendedRequest(orderId: v),
);
orderStatus = status.orderStatus;
setState(() {});
Navigator.of(context).pop();
},
),
),
),
);
}
}
Future<void> tokenPayment() async {
// 假设madPay已经正确初始化
final String? token = 'your_payment_token'; // 获取支付令牌
if (token != null) {
String orderId = '';
if (Platform.isIOS) {
final ApplePayResponse applePay = await acquiring.applePay(
ApplePayRequest(
merchant: 'test',
language: 'ru',
paymentToken: token,
),
);
if (applePay.success == true) {
orderId = applePay.data?.orderId ?? '';
}
}
if (Platform.isAndroid) {
final GooglePayResponse googlePay = await acquiring.googlePay(
GooglePayRequest(
orderNumber: '',
merchant: 'test',
language: 'ru',
amount: items.map((PaymentItem v) => v.price).reduce((double i1, double i2) => i1 + i2).toInt(),
paymentToken: token,
failUrl: 'https://test.ru/fail',
returnUrl: 'https://test.ru/return',
),
);
if (googlePay.success == true) {
orderId = googlePay.data?.orderId ?? '';
}
}
if (orderId.isNotEmpty) {
final GetOrderStatusExtendedResponse status =
await acquiring.getOrderStatusExtended(
GetOrderStatusExtendedRequest(
orderId: orderId,
language: 'ru',
),
);
orderStatus = status.orderStatus;
setState(() {});
}
}
}
}
以上示例展示了如何通过WebView和Apple/Google Pay进行支付,并获取支付状态。请根据实际需求调整代码中的参数和逻辑。
更多关于Flutter支付集成插件sberbank_acquiring的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter支付集成插件sberbank_acquiring的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,以下是如何在Flutter项目中集成和使用sberbank_acquiring
插件进行支付的代码示例。这个插件用于集成Sberbank Acquiring支付系统。
1. 添加依赖
首先,在你的pubspec.yaml
文件中添加sberbank_acquiring
依赖:
dependencies:
flutter:
sdk: flutter
sberbank_acquiring: ^最新版本号 # 请替换为实际最新版本号
然后运行flutter pub get
来获取依赖。
2. 配置Android和iOS
Android
在你的android/app/src/main/AndroidManifest.xml
文件中添加必要的权限:
<uses-permission android:name="android.permission.INTERNET"/>
iOS
通常,iOS的配置较为简单,只需确保你的Info.plist
文件包含必要的配置(如果有特定要求)。sberbank_acquiring
插件本身可能没有特别的iOS配置需求,但请遵循Sberbank的官方文档确保所有必要配置都已到位。
3. 初始化插件并创建支付请求
在你的Flutter代码中,你需要初始化SberbankAcquiring
插件并创建一个支付请求。以下是一个简单的示例:
import 'package:flutter/material.dart';
import 'package:sberbank_acquiring/sberbank_acquiring.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Sberbank Acquiring Payment Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: PaymentScreen(),
);
}
}
class PaymentScreen extends StatefulWidget {
@override
_PaymentScreenState createState() => _PaymentScreenState();
}
class _PaymentScreenState extends State<PaymentScreen> {
SberbankAcquiring? _sberbankAcquiring;
@override
void initState() {
super.initState();
_initSberbankAcquiring();
}
Future<void> _initSberbankAcquiring() async {
_sberbankAcquiring = SberbankAcquiring(
publicKey: '你的公钥', // 替换为你的公钥
testMode: true, // 如果是测试环境,设置为true;生产环境设置为false
);
// 注册支付结果回调
_sberbankAcquiring!.onPaymentResult = (result) {
// 处理支付结果
print('支付结果: $result');
if (result.status == PaymentStatus.success) {
// 支付成功处理逻辑
} else if (result.status == PaymentStatus.failed) {
// 支付失败处理逻辑
} else if (result.status == PaymentStatus.cancelled) {
// 支付取消处理逻辑
}
};
}
Future<void> _startPayment() async {
if (_sberbankAcquiring != null) {
final paymentData = PaymentData(
amount: '100.00', // 支付金额
orderDescription: '测试订单', // 订单描述
orderId: '123456', // 订单ID
returnUrl: 'https://your-return-url.com', // 支付完成后的返回URL
);
try {
await _sberbankAcquiring!.startPayment(paymentData);
} catch (e) {
print('支付初始化失败: $e');
}
}
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Sberbank Acquiring Payment Demo'),
),
body: Center(
child: ElevatedButton(
onPressed: _startPayment,
child: Text('开始支付'),
),
),
);
}
}
注意事项
- 公钥和私钥:确保你已经从Sberbank Acquiring获取了必要的公钥和私钥,并且在测试和生产环境中使用正确的密钥对。
- 测试环境:在测试环境中,
testMode
应设置为true
。在生产环境中,请将其设置为false
。 - 返回URL:
returnUrl
是支付完成后用户将被重定向到的URL。确保这个URL是有效的,并且你能够处理支付结果。 - 错误处理:在实际应用中,添加更多的错误处理和用户反馈机制。
这段代码提供了一个基本的框架,你可以根据具体需求进行扩展和修改。详细的使用说明和更多配置选项,请参考sberbank_acquiring
插件的官方文档和Sberbank Acquiring的开发者指南。