You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Flutter中获取Stripe支付的Token?

Stripe支付获取Token问题解决

问题描述

我首次实现Stripe支付方式,API开发人员要求我提供Stripe支付的Token。我查阅了相关教程,但未找到获取Token的方法。目前我已完成支付功能的实现并成功完成支付,但仍需获取该Token。

以下是我的尝试代码,但运行报错:

Future<void> makePayment() async {
    try {
      paymentIntent = await createPaymentIntent("20", "USD");
      if (paymentIntent == null) {
        // handle the error
        print("Error creating payment intent");
        return;
      }
      await Stripe.instance
          .initPaymentSheet(
              paymentSheetParameters: SetupPaymentSheetParameters(
                  paymentIntentClientSecret: paymentIntent?['client_secret'],
                  // applePay: PaymentSheetApplePay(merchantCountryCode: "+971"),
                  // googlePay: PaymentSheetGooglePay(testEnv: true, currencyCode: "AE"),
                  style: ThemeMode.dark,
                  merchantDisplayName: "Marketingo"))
          .then((value) {});
      displayPaymentSheet();
      var tokenData = await Stripe.instance.createToken(params);
      if (tokenData.tokenId != null) {
        var token = tokenData.tokenId;
        // Use the token to complete the payment on your server.
      }
    } catch (e) {
      print("exception $e");
    }
  }

问题分析

你的代码直接调用createToken(params)但未定义params参数,这是报错的直接原因。另外,你用的是Stripe推荐的Payment Sheet支付流程,这个流程本身不会返回支付Token——因为Payment Sheet是直接通过Payment Intent完成支付,所有敏感卡片数据都由Stripe托管,前端不会接触到Token这类敏感信息。

解决方案

方案1:通过后端从Payment Intent关联数据中获取Token(推荐)

支付完成后,前端无法直接拿到Token,必须通过后端调用Stripe API获取:

  1. 支付成功后,前端把Payment Intent的ID传给后端
  2. 后端调用Stripe的「查询Payment Intent」接口,拿到关联的payment_method字段
  3. 再调用「查询Payment Method」接口,从返回的card对象中提取token字段

方案2:前端手动收集卡片生成Token(不推荐,需合规处理)

如果必须在前端生成Token,你需要自行收集用户卡片信息,再调用createToken方法,但这种方式需要你处理PCI合规问题,安全性远不如Payment Sheet:

// 示例:创建卡片Token
final tokenData = await Stripe.instance.createToken(
  const CreateTokenParams.card(
    card: CardParams(
      number: '4242424242424242',
      expMonth: 12,
      expYear: 2025,
      cvc: '123',
    ),
  ),
);
if (tokenData.tokenId != null) {
  // 拿到tokenId后进行后续处理
}

注意:这种方式不能和Payment Sheet流程混用,二者是两套独立的支付路径。

关键提示

  • Payment Sheet是Stripe官方推荐的集成方式,它全程托管敏感数据,无需你处理Token这类信息,合规性和安全性更高
  • 如果只是需要记录支付凭证,直接使用Payment Intent ID或Payment Method ID即可,不一定非要获取Token

内容的提问来源于stack exchange,提问作者Mansoor Malik

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 17:40:40