Flutter Stripe

pub package build

? flutter_stripe 处于测试阶段 – 如果您发现问题,请提供反馈(和/或贡献)?️

Stripe Flutter SDK 允许您使用 Flutter 在原生 Android 和 iOS 应用中构建令人愉悦的支付体验。我们提供强大且可定制的 UI 屏幕和元素,这些屏幕和元素可开箱即用地用于收集用户的支付详细信息。

stripe-flutter_cover

功能

简化安全性:我们使您能够轻松收集信用卡号等敏感数据,并保持 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。有关更多信息,请参阅 AppleGoogle 的指南。对于所有其他场景,您可以使用此 SDK 通过 Stripe 处理付款。

安装

dart pub add flutter_stripe

要求

Android

  • Android 5.0 (API 级别 21) 及更高版本
  • Kotlin 版本 1.5.0 及更高版本:示例
  • 为您的 Activity 使用 Theme.AppCompact 的后代:示例示例夜间主题
  • 使用最新的 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 提供 publishableKeystripeAccountIdthreeDSecureParamsmerchantIdentifier。只需要 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
Webhook 转发的附加步骤

已知问题

  • 旧版 Flutter 版本上的 Android 卡片字段存在焦点问题 – 此问题已在 Flutter 的 master 分支中修复。问题正在 #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 versionmelos publish 来保持所有仓库的同步。

GitHub

查看 Github