Flutter Stripe
? flutter_stripe 仍处于测试阶段 – 如果您发现问题,请提供反馈(或贡献)?️
Stripe Flutter SDK 允许您使用 Flutter 在原生 Android 和 iOS 应用中构建出色的支付体验。我们提供功能强大且可自定义的 UI 屏幕和元素,开箱即可用于收集用户的支付详细信息。
功能
简化安全性:我们使您能够轻松收集信用卡号等敏感数据,并保持 PCI 合规性。这意味着敏感数据直接发送到 Stripe,而不是通过您的服务器。有关更多信息,请参阅我们的 集成安全指南。
Apple Pay:我们提供与 Apple Pay 的无缝集成。
Google Pay:该插件可以轻松地充当 Pay 插件的支付提供商,使您能够无缝集成 Google Pay 或 Apple Pay。您需要做的就是将您的 Stripe 可发布密钥添加到支付配置文件中。
支付方式:接受更多 支付方式有助于您的业务扩展全球业务范围并提高结账转化率。
SCA 就绪:SDK 会在需要时自动执行原生的 3D 安全身份验证,以符合欧洲的 强客户身份验证法规。
原生 UI:我们提供原生的屏幕和元素,可在 Android 和 iOS 上安全地收集支付详细信息。
预建支付 UI:了解如何集成 Payment Sheet,这是面向移动应用的新预建支付 UI。此预建 UI 可让您开箱即用地接受卡片、Apple Pay 和 Google Pay,并支持保存和重复使用卡片。
推荐用法
如果您在应用内销售数字产品或服务(例如订阅、游戏内货币、游戏关卡、访问高级内容或解锁完整版本),则必须使用应用商店的应用内购买 API。有关更多信息,请参阅 Apple 和 Google 的指南。对于所有其他场景,您可以使用此 SDK 通过 Stripe 处理付款。
安装
dart pub add flutter_stripe
要求
Android
- Android 5.0 (API 级别 21) 及更高版本
- Kotlin 版本 1.5.0 及更高版本:示例
- 使用
Theme.AppCompact的后代作为您的 Activity:示例,示例夜间主题 - 使用最新版本的 Android Gradle 构建工具:示例,并相应地使用最新版本的 Gradle:示例
- 在
MainActivity.kt中使用FlutterFragmentActivity而不是FlutterActivity:示例
这是因为 Stripe SDK 要求使用 AppCompact 主题作为其 UI 组件,并使用 Support Fragment Manager 进行 Payment Sheets
iOS
兼容以 iOS 11 或更高版本为目标的应用。
用法示例
// main.dart
import 'package:flutter_stripe/flutter_stripe.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
// set the publishable key for Stripe - this is mandatory
Stripe.publishableKey = stripePublishableKey;
runApp(PaymentScreen());
}
// payment_screen.dart
class PaymentScreen extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(),
body: Column(
children: [
CardField(
onCardChanged: (card) {
print(card);
},
),
TextButton(
onPressed: () async {
// create payment method
final paymentMethod =
await Stripe.instance.createPaymentMethod(PaymentMethodParams.card());
},
child: Text('pay'),
)
],
),
);
}
}
Stripe 初始化
要在您的 Flutter 应用中初始化 Stripe,请使用 Stripe 基类。
Stripe 提供 publishableKey、stripeAccountId、threeDSecureParams 和 merchantIdentifier。只有 publishableKey 是必需的。
Dart API
该库提供了几种处理与Stripe相关的操作的方法。
Future<PaymentMethod> createPaymentMethod(...);
Future<PaymentIntent> handleCardAction(...);
Future<PaymentIntent> confirmPaymentMethod(...);
Future<void> configure3dSecure(...);
Future<bool> isApplePaySupported();
Future<void> presentApplePay(...);
Future<void> confirmApplePayPayment(...);
Future<SetupIntent> confirmSetupIntent(...);
Future<PaymentIntent> retrievePaymentIntent(...);
Future<String> createTokenForCVCUpdate(...);
Future<void> initPaymentSheet(...);
Future<void> presentPaymentSheet(...);
Future<void> confirmPaymentSheetPayment()
示例应用提供了有关如何使用这些方法的示例。
Pay 插件支持
flutter_stripe 完全支持 Google Pay 团队的 Pay 插件。通过添加几行代码,您可以将 Stripe 集成作为 Google / Apple Pay 的支付处理器。
Future<void> onGooglePayResult(paymentResult) async {
final response = await fetchPaymentIntentClientSecret();
final clientSecret = response['clientSecret'];
final token = paymentResult['paymentMethodData']['tokenizationData']['token'];
final tokenJson = Map.castFrom(json.decode(token));
final params = PaymentMethodParams.cardFromToken(
token: tokenJson['id'],
);
// Confirm Google pay payment method
await Stripe.instance.confirmPaymentMethod(
clientSecret,
params,
);
}
运行示例应用
- 导航到示例文件夹
cd example - 安装依赖项
flutter pub get
- 为 flutter 应用和本地后端设置环境变量。
- 获取您的测试 Stripe API 密钥
cp lib/.env.example.dart lib/.env.dart并设置您的 Stripe 可发布密钥。cp server/.env.example server/.env并在您新创建的.env文件中设置变量值。
- 安装服务器依赖项:
yarn --cwd "server" - 启动示例
- 终端 1:
yarn --cwd "server" start - 终端 2:
flutter run
- 终端 1:
Webhook 转发的附加步骤
- 安装
stripe-cli - 运行
stripe listen --forward-to localhost:4242/webhook
已知问题
- Android 上的 Card 字段在旧版 Flutter 中存在焦点问题 – 该问题已在 Flutter 框架的
master 分支中修复。该问题正在 #14 #14 中跟踪。
贡献
您可以帮助我们改进这个项目,欢迎提出新的问题或提交拉取请求。
设置
本项目使用 melos 来管理此仓库内的所有软件包。
- 安装 melos:
dart pub global activate melos - 在您的本地文件夹中设置 melos:
melos bootstrap
常用命令
- 格式化
melos run format - 分析
melos run analyze - 测试
melos run test - Pub get
melos run get
发布
- 使用
melos version和melos publish来保持所有仓库的同步
