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

Flutter集成Stripe Payment Sheet时Afterpay无法使用:支付方式不支持错误

解决Flutter Stripe集成Afterpay时支付表单报错的问题

核心问题分析

报错None of the requested payment methods (afterpay_clearpay) are supported.主要由参数传递错误、支付方式支持条件不满足或客户端配置缺失导致。


解决方案1:修复Payment Intent参数传递错误

你的代码中创建Payment Intent时,使用Map<String, String>传递payment_method_types[]参数,由于Map的key具有唯一性,后一个值会覆盖前一个,导致实际仅传递了afterpay_clearpay,不符合Stripe的多参数传递要求。

修改_createPaymentIntent方法中的参数构建逻辑,改用List<MapEntry<String, String>>传递多值参数:

Future<String?> _createPaymentIntent(int amount, String currency) async {
  try {
    // 改用List传递多值参数,避免key覆盖
    final data = [
      MapEntry('amount', _calculateAmount(amount)),
      MapEntry('currency', currency),
      MapEntry('payment_method_types[]', 'card'),
      MapEntry('payment_method_types[]', 'afterpay_clearpay'),
    ];

    final response = await http.post(
      Uri.parse('https://api.stripe.com/v1/payment_intents'),
      body: data, // 传递List而非Map
      headers: {
        'Authorization': 'Bearer $_stripeSecretKey',
        'Content-Type': 'application/x-www-form-urlencoded',
      },
    );

    // 剩余逻辑保持不变
    if (response.statusCode == 200) {
      final responseData = jsonDecode(response.body);
      print(responseData);
      return responseData['client_secret'];
    } else {
      print('Failed to create payment intent: ${response.reasonPhrase}');
    }
  } catch (e) {
    print(e);
  }
  return null;
}

解决方案2:验证Afterpay支持条件

  1. 金额范围检查:Afterpay对订单金额有地区性限制(如美国地区通常要求$35-$2000),确认你的测试金额(180USD)符合目标地区的规则。
  2. 设备地区设置:Afterpay仅在特定地区可用(美、澳、新等),将测试设备的系统地区切换至对应支持区域。
  3. Stripe账号配置:确认你的Stripe账号已启用对应地区的Afterpay支付方式,且完成了相关合规配置。

解决方案3:确认客户端配置完整性

确保Android和iOS项目已完成Afterpay的基础配置:

  • iOS:在Info.plist中添加Stripe URL Scheme,格式为stripe_你的发布密钥(去掉pk_前缀),例如:
    <key>CFBundleURLTypes</key>
    <array>
      <dict>
        <key>CFBundleURLSchemes</key>
        <array>
          <string>stripe_abc123xyz</string>
        </array>
      </dict>
    </array>
    
  • Android:在AndroidManifest.xml中添加intent-filter以处理Stripe链接:
    <activity android:name="com.stripe.android.PaymentAuthWebViewActivity">
      <intent-filter>
        <action android:name="android.intent.action.VIEW" />
        <category android:name="android.intent.category.DEFAULT" />
        <category android:name="android.intent.category.BROWSABLE" />
        <data android:scheme="stripe_你的发布密钥(去掉pk_前缀)" />
      </intent-filter>
    </activity>
    

解决方案4:确认Payment Sheet配置正确性

你已设置allowsDelayedPaymentMethods: true(必须开启,Afterpay属于延迟支付方式),需确保Payment Intent的payment_method_types同时包含card和afterpay_clearpay,否则Payment Sheet无法正确加载对应支付方式。


内容的提问来源于stack exchange,提问作者Firass Aguech

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 21:41:20