Flutter支付集成插件tosspayments_widget_sdk_flutter的使用
Flutter支付集成插件tosspayments_widget_sdk_flutter的使用
1. 概述
tosspayments_widget_sdk_flutter
是一个用于在Flutter应用中轻松集成TossPayments支付功能的插件。通过该插件,开发者可以快速实现支付页面的展示和支付流程的处理。
2. 安装与配置
2.1 环境要求
- Flutter 3.7.0 及以上版本
- Dart SDK 2.17.0 及以上版本
- Android minSdkVersion 19 及以上版本
2.2 安装插件
在 pubspec.yaml
文件中添加以下依赖:
dependencies:
tosspayments_widget_sdk_flutter: ^2.0.9
2.3 Android 配置
确保在 android/app/main/AndroidManifest.xml
文件中添加互联网权限,并设置 usesCleartextTraffic
为 true
,以便能够加载所有银行卡应用:
<!-- android/app/main/AndroidManifest.xml -->
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.yourapp">
<application
android:label="yourapp"
android:icon="@mipmap/ic_launcher"
android:usesCleartextTraffic="true">
<activity
android:name=".MainActivity"
android:exported="true"
android:theme="@style/LaunchTheme"
android:configChanges="orientation|keyboardHidden|keyboard|screenSize|smallestScreenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode"
android:hardwareAccelerated="true"
android:windowSoftInputMode="adjustResize">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<!-- 添加互联网权限 -->
<uses-permission android:name="android.permission.INTERNET" />
</application>
</manifest>
3. 使用示例
3.1 创建支付页面
以下是一个完整的示例代码,展示了如何使用 tosspayments_widget_sdk_flutter
插件来创建一个支付页面,并处理支付结果。
import 'package:flutter/material.dart';
import 'package:tosspayments_widget_sdk_flutter/model/payment_info.dart';
import 'package:tosspayments_widget_sdk_flutter/model/payment_widget_options.dart';
import 'package:tosspayments_widget_sdk_flutter/payment_widget.dart';
import 'package:tosspayments_widget_sdk_flutter/widgets/agreement.dart';
import 'package:tosspayments_widget_sdk_flutter/widgets/payment_method.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
[@override](/user/override)
Widget build(BuildContext context) {
return const MaterialApp(
home: PaymentWidgetExamplePage(),
);
}
}
class PaymentWidgetExamplePage extends StatefulWidget {
const PaymentWidgetExamplePage({super.key});
[@override](/user/override)
State<PaymentWidgetExamplePage> createState() {
return _PaymentWidgetExamplePageState();
}
}
class _PaymentWidgetExamplePageState extends State<PaymentWidgetExamplePage> {
late PaymentWidget _paymentWidget;
PaymentMethodWidgetControl? _paymentMethodWidgetControl;
AgreementWidgetControl? _agreementWidgetControl;
[@override](/user/override)
void initState() {
super.initState();
// 初始化 PaymentWidget,传入 clientKey 和 customerKey
_paymentWidget = PaymentWidget(clientKey: "test_gck_docs_Ovk5rk1EwkEbP0W43n07xlzm", customerKey: "a1b2c3d4e5f67890");
// 渲染支付方式选择器
_paymentWidget
.renderPaymentMethods(
selector: 'methods',
amount: Amount(value: 300, currency: Currency.KRW, country: "KR"))
.then((control) {
_paymentMethodWidgetControl = control;
});
// 渲染协议选择器
_paymentWidget
.renderAgreement(selector: 'agreement')
.then((control) {
_agreementWidgetControl = control;
});
}
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text('TossPayments 示例'),
),
body: SafeArea(
child: Column(children: [
Expanded(
child: ListView(children: [
// 显示支付方式选择器
PaymentMethodWidget(
paymentWidget: _paymentWidget,
selector: 'methods',
),
// 显示协议选择器
AgreementWidget(paymentWidget: _paymentWidget, selector: 'agreement'),
// 结账按钮
ElevatedButton(
onPressed: () async {
// 请求支付
final paymentResult = await _paymentWidget.requestPayment(
paymentInfo: const PaymentInfo(orderId: 'OrderId_123', orderName: '蓝T恤等2件商品'));
if (paymentResult.success != null) {
// 支付成功处理
ScaffoldMessenger.of(context).showSnackBar(
const SnackBar(content: Text('支付成功!')),
);
} else if (paymentResult.fail != null) {
// 支付失败处理
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(content: Text('支付失败: ${paymentResult.fail?.message}')),
);
}
},
child: const Text('结账')),
// 获取选择的支付方式
ElevatedButton(
onPressed: () async {
final selectedPaymentMethod = await _paymentMethodWidgetControl?.getSelectedPaymentMethod();
print('${selectedPaymentMethod?.method} ${selectedPaymentMethod?.easyPay?.provider ?? ''}');
},
child: const Text('获取选择的支付方式')),
// 获取协议同意状态
ElevatedButton(
onPressed: () async {
final agreementStatus = await _agreementWidgetControl?.getAgreementStatus();
print('${agreementStatus?.agreedRequiredTerms}');
},
child: const Text('获取协议同意状态')),
// 更新支付金额
ElevatedButton(
onPressed: () async {
await _paymentMethodWidgetControl?.updateAmount(amount: 300);
print('支付金额已更新为 300 元');
},
child: const Text('更新支付金额'))
]))
])));
}
}
更多关于Flutter支付集成插件tosspayments_widget_sdk_flutter的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter支付集成插件tosspayments_widget_sdk_flutter的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,以下是一个关于如何在Flutter项目中集成tosspayments_widget_sdk_flutter
插件的示例代码。这个插件通常用于集成支付功能。以下步骤将展示如何设置和使用这个插件。
1. 添加依赖
首先,在pubspec.yaml
文件中添加tosspayments_widget_sdk_flutter
依赖:
dependencies:
flutter:
sdk: flutter
tosspayments_widget_sdk_flutter: ^最新版本号 # 请替换为实际最新版本号
然后运行flutter pub get
来安装依赖。
2. 配置Android和iOS
Android配置
在android/app/src/main/AndroidManifest.xml
中添加必要的权限(如果需要):
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.yourapp">
<uses-permission android:name="android.permission.INTERNET"/>
<!-- 其他必要权限 -->
<application
... >
...
</application>
</manifest>
iOS配置
在ios/Runner/Info.plist
中根据需要添加配置。通常,支付SDK可能需要访问网络等权限,这些权限可以在Info.plist
中配置。
3. 初始化插件并集成支付功能
在你的Flutter项目中,你可以按照以下方式初始化并使用tosspayments_widget_sdk_flutter
插件。
import 'package:flutter/material.dart';
import 'package:tosspayments_widget_sdk_flutter/tosspayments_widget_sdk_flutter.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: PaymentScreen(),
);
}
}
class PaymentScreen extends StatefulWidget {
@override
_PaymentScreenState createState() => _PaymentScreenState();
}
class _PaymentScreenState extends State<PaymentScreen> {
final TossPaymentsWidgetSdkFlutter _tossPayments = TossPaymentsWidgetSdkFlutter();
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Payment Screen'),
),
body: Center(
child: ElevatedButton(
onPressed: () async {
// 初始化支付配置
final Map<String, dynamic> paymentConfig = {
'merchantId': 'your_merchant_id',
'amount': 1000, // 支付金额,单位通常是分
'currency': 'KRW', // 货币类型
// 其他必要的配置参数
};
try {
// 调用支付方法
final Map<String, dynamic> result = await _tossPayments.startPayment(paymentConfig);
if (result['status'] == 'success') {
// 支付成功处理
print('Payment successful: ${result}');
} else {
// 支付失败处理
print('Payment failed: ${result}');
}
} catch (e) {
// 错误处理
print('Error during payment: $e');
}
},
child: Text('Start Payment'),
),
),
);
}
}
4. 处理支付结果
在上面的代码中,_tossPayments.startPayment(paymentConfig)
方法将启动支付流程,并返回一个包含支付结果的Map。你需要根据返回的结果进行相应的处理,比如更新UI、记录日志或执行其他业务逻辑。
注意
- 请确保你已经注册并获取了
Toss Payments
的必要凭证(如merchantId
)。 - 根据实际业务需求,支付配置参数可能会有所不同,请参考
tosspayments_widget_sdk_flutter
的官方文档进行配置。 - 支付流程涉及敏感信息,务必确保应用的安全性,避免敏感信息泄露。
这个示例提供了一个基本的框架,你可以根据具体需求进一步扩展和定制。