Flutter支付处理插件flutter_payments_stripe_sdk的使用
Flutter支付处理插件flutter_payments_stripe_sdk的使用
Stripe Flutter SDK 可以让你快速轻松地在你的Flutter应用中构建一个优秀的支付体验。我们提供了功能强大且可定制的UI屏幕和元素,可以直接使用来收集用户的支付信息。
开始使用Stripe,请参考Stripe的集成指南和示例项目,或者浏览SDK的文档。
特性
- 简化安全:我们使你能够简单地收集敏感数据如信用卡号,并保持PCI合规。这意味着敏感数据会直接发送到Stripe,而不是通过你的服务器。更多详情,请参阅我们的集成安全指南。
- SCA就绪:如果需要遵守欧洲的强客户认证规定,SDK会自动执行原生的3D Secure认证。
- Stripe API:如果你想要使用低级别的API,可以使用我们的Stripe Dart。
- 原生UI:我们提供了原生屏幕和元素来收集支付和配送详情。例如,
PaymentCardTextField
是一个可以收集和验证卡片详细信息的Widget。
贡献
我们欢迎任何形式的贡献,包括新功能、错误修复和文档改进。如果这是一个重大更改,请先打开一个问题进行讨论。否则,对于小的更改(如拼写修正和单行代码),可以直接提交拉取请求。
完整示例Demo
以下是使用flutter_payments_stripe_sdk
的一个完整示例:
import 'package:flutter/material.dart';
import 'package:flutter_payments_stripe_sdk/flutter_payments_stripe_sdk.dart';
import 'dart:convert' show json;
import 'package:http/http.dart' as http;
import 'dart:convert' as convert;
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
title: 'Stripe Flutter SDK Example',
theme: ThemeData(
primarySwatch: Colors.blue,
visualDensity: VisualDensity.adaptivePlatformDensity,
),
home: MyHomePage(),
);
}
}
class MyHomePage extends StatefulWidget {
MyHomePage({Key? key}) : super(key: key);
[@override](/user/override)
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
var rows = ["创建支付意图", "创建设置意图"];
// TODO: 插入你的API密钥
var stripe = Stripe("pk_test_...");
String? clientSecret = "";
String? setupIntentClientSecret = "";
// TODO: 插入你的后端URL
var backendUrl = "";
// TODO: 插入客户ID
var customerID = "";
//
var testPaymentMethodID = "pm_card_threeDSecure2Required";
startCheckout() async {
var url = "$backendUrl/stripe/payment_intents/create";
var body = {
"params": {"amount": "200", "currency": "eur", "customer": customerID}
};
var response = await http.post(Uri.parse(url),
headers: {'Content-Type': 'application/json'},
body: convert.json.encode(body));
var j = json.decode(response.body);
if (j["data"] != null && j["data"]["clientSecret"] != null) {
clientSecret = j["data"]["clientSecret"];
print(clientSecret);
} else {
print("发生错误");
}
}
startSetupIntent() async {
var url = "$backendUrl/stripe/setup_intents/create";
var body = {
"params": {"customer": customerID}
};
var response = await http.post(Uri.parse(url),
headers: {'Content-Type': 'application/json'},
body: convert.json.encode(body));
var j = json.decode(response.body);
if (j["data"] != null && j["data"]["clientSecret"] != null) {
setupIntentClientSecret = j["data"]["clientSecret"];
print(setupIntentClientSecret);
} else {
print("发生错误");
}
}
performAction(String item) async {
if (backendUrl.isEmpty) {
print("插入一个后端URL");
return;
}
if (item == "创建支付意图") {
await startCheckout();
var res = await stripe.paymentIntents?.confirmPaymentIntent(clientSecret!,
data: ConfirmPaymentIntentRequest(
paymentMethod: testPaymentMethodID,
returnUrl: stripe.getReturnUrlForSca(),
useStripeSdk: false));
if (res.runtimeType == StripeError) {
print((res as StripeError).toJson());
} else if (res.runtimeType == PaymentIntent) {
print((res as PaymentIntent).toJson());
}
} else if (item == "创建设置意图") {
await startSetupIntent();
var res = await stripe.setupIntents?.confirmSetupIntent(
setupIntentClientSecret!,
data: ConfirmSetupIntentRequest(
paymentMethod: PaymentMethodData(
type: PaymentMethodType.card,
card: CardMethod(
cvc: "555",
expMonth: 12,
expYear: 24,
number: "4242424242424242")),
useStripeSdk: false,
returnUrl: stripe.getReturnUrlForSca()));
if (res.runtimeType == StripeError) {
print((res as StripeError).toJson());
} else if (res.runtimeType == SetupIntent) {
print((res as SetupIntent).toJson());
}
}
}
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Stripe Flutter SDK Example'),
),
body: GestureDetector(
behavior: HitTestBehavior.translucent,
onTap: () {
FocusScope.of(context).unfocus();
},
child: Padding(
padding: EdgeInsets.all(0.0),
child: ListView.separated(
itemBuilder: (context, index) {
if (index == rows.length) {
return Padding(
padding: const EdgeInsets.fromLTRB(0, 20, 0, 20),
child: PaymentCardTextField(
border: (status, card) {
if (card.isEmpty()) {
return Border.all(color: Colors.grey);
} else if (status ==
PaymentCardTextFieldStatus.success) {
return Border.all(color: Colors.green);
} else {
return Border.all(color: Colors.red);
}
},
onCardChanged: (card) {
print(card.toPaymentMethod());
},
showShadow: false,
),
);
}
var item = rows[index];
return TextIcon(
title: item,
shapedSelectedBackground: false,
tapHandler: (d) {
performAction(item);
},
);
},
separatorBuilder: (context, index) {
return SeparatorLine(margin: EdgeInsets.fromLTRB(20, 0, 0, 0));
},
itemCount: rows.length + 1,
)),
),
);
}
}
更多关于Flutter支付处理插件flutter_payments_stripe_sdk的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter支付处理插件flutter_payments_stripe_sdk的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,以下是一个关于如何使用Flutter支付处理插件flutter_payments_stripe_sdk
的示例代码。该插件允许你在Flutter应用中集成Stripe支付功能。
首先,确保你已经在你的Flutter项目中添加了flutter_payments_stripe_sdk
依赖。你可以在pubspec.yaml
文件中添加以下依赖:
dependencies:
flutter:
sdk: flutter
flutter_payments_stripe_sdk: ^最新版本号 # 请替换为实际的最新版本号
然后,运行flutter pub get
来获取依赖。
接下来,你需要配置Stripe的公钥和私钥。你可以在Stripe的仪表盘中生成这些密钥。将公钥(publishable key)添加到你的android/app/src/main/res/values/strings.xml
(对于Android)和ios/Runner/Info.plist
(对于iOS)文件中。
对于Android(strings.xml
):
<resources>
<string name="stripe_publishable_key">你的公钥</string>
</resources>
对于iOS(Info.plist
):
<key>StripePublishableKey</key>
<string>你的公钥</string>
私钥(secret key)应该保存在你的服务器端,用于处理支付事务。
下面是一个简单的Flutter代码示例,展示如何使用flutter_payments_stripe_sdk
来创建一个支付意图并启动支付流程:
import 'package:flutter/material.dart';
import 'package:flutter_payments_stripe_sdk/flutter_payments_stripe_sdk.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Stripe Payment Example',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: MyHomePage(),
);
}
}
class MyHomePage extends StatefulWidget {
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
final Stripe _stripe = Stripe();
String _paymentStatus = 'Not Paid';
void _initiatePayment() async {
try {
// 创建支付意图
final paymentIntent = await _stripe.createPaymentIntent(
amount: 1000, // 金额,单位为美分(1000美分 = 10美元)
currency: 'usd',
);
// 启动支付流程
final result = await Stripe.paymentRequestWithNativePay(
paymentIntentClientSecret: paymentIntent.clientSecret,
);
if (result.status == PaymentResultStatus.succeeded) {
setState(() {
_paymentStatus = 'Paid Successfully';
});
} else {
setState(() {
_paymentStatus = 'Payment Failed';
});
}
} catch (e) {
print('Error: $e');
setState(() {
_paymentStatus = 'Error: ${e.message}';
});
}
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Flutter Stripe Payment Example'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text(
_paymentStatus,
style: TextStyle(fontSize: 24),
),
SizedBox(height: 20),
ElevatedButton(
onPressed: _initiatePayment,
child: Text('Pay \$10'),
),
],
),
),
);
}
}
这个示例代码展示了如何创建一个支付意图,并启动一个支付请求。支付请求的结果将更新到UI中。
请注意,为了完全集成Stripe支付,你还需要在你的服务器端处理支付意图的创建和确认,因为私钥不应该在客户端应用中使用。上面的示例仅用于展示如何在客户端启动支付流程。
此外,请确保你已经阅读并遵循了flutter_payments_stripe_sdk
的官方文档和Stripe的集成指南,以获取最新的配置和最佳实践。