Flutter支付结账插件flutter_checkout_payment的使用
Flutter支付结账插件flutter_checkout_payment的使用
概述
flutter_checkout_payment
是一个用于在线支付的Flutter插件,实现了Checkout.com的原生SDK。以下是该插件的基本用法和示例代码。
安装步骤
在 pubspec.yaml
文件中添加依赖
dependencies:
flutter_checkout_payment: ^1.4.0
Android 配置
无需额外配置。
iOS 配置
确保在 Podfile
中设置平台版本为 iOS 10 或更高。
platform :ios, '10.0'
使用方法
导入包
import 'package:flutter_checkout_payment/flutter_checkout_payment.dart';
初始化API
使用你的公共密钥初始化API。密钥可以在Checkout仪表板中找到。
await FlutterCheckoutPayment.init(key: "YOUR_PUBLIC_KEY");
生产环境需要设置环境为Live:
await FlutterCheckoutPayment.init(key: "YOUR_PUBLIC_KEY", environment: Environment.LIVE);
生成Token
生成Token用于支付过程。
CardTokenisationResponse response = await FlutterCheckoutPayment.generateToken(
number: "4242424242424242",
name: "name",
expiryMonth: "05",
expiryYear: "21",
cvv: "100"
);
print(response.token);
示例Demo
以下是一个完整的示例应用,展示如何使用 flutter_checkout_payment
插件。
import 'dart:async';
import 'package:flutter/material.dart';
import 'package:flutter_checkout_payment/flutter_checkout_payment.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: "Test",
home: HomeScreen(),
);
}
}
class HomeScreen extends StatefulWidget {
@override
_HomeScreenState createState() => _HomeScreenState();
}
class _HomeScreenState extends State<HomeScreen> {
String _isInit = "false";
String cardNumber = '';
String expiryDate = '';
String cardNameHolder = '';
String cvv = '';
@override
void initState() {
super.initState();
initPaymentSDK();
}
Future<void> initPaymentSDK() async {
try {
bool? isSuccess = await FlutterCheckoutPayment.init(key: "YOUR_PUBLIC_KEY");
if (mounted) setState(() => _isInit = "true");
} on PlatformException {
if (mounted) setState(() => _isInit = "error");
}
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Checkout Payment Plugin'),
),
body: SafeArea(
child: Column(
children: <Widget>[
SizedBox(height: 10),
Text("Checkout Init: $_isInit", style: TextStyle(fontSize: 18)),
// Add your Credit Card UI here
Expanded(
child: SingleChildScrollView(
child: Container(
padding: EdgeInsets.all(16),
child: Column(
children: [
TextField(
decoration: InputDecoration(labelText: 'Card Number'),
onChanged: (value) => cardNumber = value,
),
TextField(
decoration: InputDecoration(labelText: 'Expiry Date'),
onChanged: (value) => expiryDate = value,
),
TextField(
decoration: InputDecoration(labelText: 'Card Holder Name'),
onChanged: (value) => cardNameHolder = value,
),
TextField(
decoration: InputDecoration(labelText: 'CVV'),
onChanged: (value) => cvv = value,
),
],
),
),
),
),
ElevatedButton(
onPressed: _generateToken,
child: Text('Generate Token'),
),
],
),
));
}
Future<void> _generateToken() async {
try {
showDialog(
context: context,
barrierDismissible: false,
builder: (BuildContext context) {
return WillPopScope(
onWillPop: () => Future<bool>.value(false),
child: AlertDialog(
title: Text("Loading..."),
content: Column(
mainAxisSize: MainAxisSize.min,
children: <Widget>[CircularProgressIndicator()]),
));
},
);
String number = cardNumber.replaceAll(" ", "");
String expiryMonth = expiryDate.substring(0, 2);
String expiryYear = expiryDate.substring(3);
CardTokenisationResponse? response = await FlutterCheckoutPayment.generateToken(
number: number,
name: cardNameHolder,
expiryMonth: expiryMonth,
expiryYear: expiryYear,
cvv: cvv);
Navigator.pop(context);
showDialog(
context: context,
builder: (BuildContext context) {
return AlertDialog(
title: Text("Token"),
content: Text("${response?.token ?? 'No token found'}"),
actions: <Widget>[
TextButton(
child: Text("Close"),
onPressed: () => Navigator.pop(context),
)
],
);
},
);
} catch (ex) {
Navigator.pop(context);
showDialog(
context: context,
builder: (BuildContext context) {
return AlertDialog(
title: Text("Error"),
content: Text("${ex.toString()}"),
actions: <Widget>[
TextButton(
child: Text("Close"),
onPressed: () => Navigator.pop(context),
)
],
);
},
);
}
}
}
公共静态方法总结
返回值 | 描述 |
---|---|
Future<bool> | init(@required String key, Environment environment default Environment.SANDBOX}) |
Future<CardTokenisationResponse> | generateToken({@required String number, @required String name, @required String expiryMonth, @required String expiryYear, @required String cvv, BillingModel billingModel}) |
Future<bool> | isCardValid({@required String number}) |
Future<String> | handle3DS({@required String authUrl, @required String successUrl, @required String failUrl}) |
Future<CardTokenisationResponse> | generateApplePayToken({@required String paymentDataBase64}) |
Future<CardTokenisationResponse> | generateGooglePayToken({@required String tokenJsonPayload}) |
以上是 flutter_checkout_payment
插件的基本使用方法及示例代码,希望对您有所帮助!
更多关于Flutter支付结账插件flutter_checkout_payment的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter支付结账插件flutter_checkout_payment的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,以下是如何在Flutter项目中集成和使用flutter_checkout_payment
插件的一个示例。请注意,由于flutter_checkout_payment
插件的具体实现和API可能会随时间变化,以下代码基于假设的插件API结构。如果插件的实际API有所不同,请查阅最新的官方文档。
首先,确保你已经在pubspec.yaml
文件中添加了flutter_checkout_payment
依赖:
dependencies:
flutter:
sdk: flutter
flutter_checkout_payment: ^latest_version # 替换为最新版本号
然后,运行flutter pub get
来安装依赖。
接下来,在你的Flutter项目中,你可以按照以下步骤使用flutter_checkout_payment
插件进行支付结账。
1. 导入插件
在你的Dart文件中导入插件:
import 'package:flutter_checkout_payment/flutter_checkout_payment.dart';
2. 配置支付参数
创建一个函数来配置支付参数,并启动支付流程。这里是一个简单的示例:
Future<void> initiatePayment() async {
// 配置支付参数
final paymentConfig = CheckoutPaymentConfig(
publicKey: 'your_public_key', // 替换为你的公钥
amount: 100.0, // 支付金额
currency: 'USD', // 货币类型
description: 'Product Description', // 商品描述
// 其他可选参数,如成功回调URL、失败回调URL等
);
try {
// 启动支付流程
final result = await FlutterCheckoutPayment.startPayment(config: paymentConfig);
if (result.status == PaymentStatus.success) {
// 支付成功处理
print('Payment successful! Transaction ID: ${result.transactionId}');
} else if (result.status == PaymentStatus.failed) {
// 支付失败处理
print('Payment failed! Error: ${result.errorMessage}');
} else if (result.status == PaymentStatus.canceled) {
// 支付取消处理
print('Payment canceled by user.');
}
} catch (e) {
// 处理异常
print('An error occurred: $e');
}
}
3. 在UI中调用支付函数
在你的UI组件中,比如一个按钮的点击事件中调用initiatePayment
函数:
import 'package:flutter/material.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('Flutter Checkout Payment Example'),
),
body: Center(
child: ElevatedButton(
onPressed: initiatePayment,
child: Text('Initiate Payment'),
),
),
),
);
}
}
注意事项
- 公钥和私钥:确保你使用的是从支付服务提供商获取的正确的公钥和私钥。私钥通常用于后端服务器验证支付结果。
- 安全性:不要在客户端代码中硬编码敏感信息,如私钥。所有敏感操作应在后端服务器上进行。
- 错误处理:在实际应用中,添加更详细的错误处理和用户反馈。
- UI/UX:根据应用需求,自定义支付界面的UI/UX。
这个示例提供了一个基本的框架,你可以根据flutter_checkout_payment
插件的实际API文档和支付服务提供商的要求进行调整和扩展。