【问题标题】:Flutter - Invalid array in payment_method_types of Stripe CheckoutFlutter - Stripe Checkout 的 payment_method_types 中的数组无效
【发布时间】:2021-10-19 23:06:14
【问题描述】:

我在做什么

我正在通过webview 以及下面提到的其他一些插件在颤振中使用条带结帐。我已经为另一个应用程序使用了相同的代码,并且它在那里完全可以正常工作。虽然它在我当前的应用中显示此错误

{"error":{"message":"Invalid array","param":"payment_method_types","type":"invalid_request_error"}}

我在此处传递的参考 Stripe 结帐文档的参数:

 final body = {
      'payment_method_types': ["card"],
      'line_items': [
        {
          'name': "$serviceName",
          'amount': price.round(),
          "currency": "usd",
          'quantity': 1,
        }
      ],
      'mode': 'payment',
      'success_url': 'https://success.com/{CHECKOUT_SESSION_ID}',
      'cancel_url': 'https://cancel.com/',
    };

插件:

  • webview_flutter: ^2.0.8
  • dio: ^4.0.0
  • js: ^0.6.3

完整代码

这段代码基本上是返回一个sessionId,然后我会进一步使用它。

class StripeServer {
  final String serviceName;
  final int price;

  StripeServer({this.serviceName, this.price});

  Future<String> createCheckout() async {
    final auth = "Basic " + base64Encode(utf8.encode(dotenv.env['secretKey']));
    final body = {
      'payment_method_types': ["card"],
      'line_items': [
        {
          'name': "$serviceName",
          'amount': price.round(),
          "currency": "usd",
          'quantity': 1,
        }
      ],
      'mode': 'payment',
      'success_url': 'https://success.com/{CHECKOUT_SESSION_ID}',
      'cancel_url': 'https://cancel.com/',
    };

    try {
      final result = await Dio().post(
        "https://api.stripe.com/v1/checkout/sessions",
        data: body,
        options: Options(
          headers: {HttpHeaders.authorizationHeader: auth},
          contentType: "application/x-www-form-urlencoded",
        ),
      );
      return result.data['id'];
    } on DioError catch (e) {
      print(e.response);
      throw e;
    }
  }
}

任何帮助将不胜感激,如果您需要更多详细信息,请告诉我,我会更新。

【问题讨论】:

  • 您确定您已在 Stripe 中激活了卡付款并使用了正确的测试凭证吗?要在生产中接受卡付款,您需要激活您的 Stripe 帐户。
  • 是的,我已激活所有内容并设置了所有内容。即使这个确切的代码也适用于另一个应用程序,这里它显示了这个错误,我被卡住了我检查了他们所有的文档
  • 似乎您的 HTTP 库可能正在以一种奇怪的方式解析有效负载。我会在dashboard.stripe.com/test/logs 的仪表板上查看你的 Stripe 日志,仪表板应该会显示你发送给 Stripe 的内容。
  • 感谢@PaulAsjes。日志显示我正在发送 'payment_method_types': "card", 虽然我的代码很清楚是 List 而不是字符串。有什么帮助吗?
  • @PaulAsjes 你可以检查一下stackoverflow.com/questions/67785824/…

标签: flutter stripe-payments


【解决方案1】:

您必须删除"payment_method_types": ["card"]。 几个月前,这个领域是强制性的,但现在似乎没有必要了。这是我的代码示例:

    var amountInt = (amount * 100.toDouble()).toInt();
    try {
      var data = {"amount": amountInt, "currency":"eur"}; //,"payment_method_types[]": ["card"]};
     
      Response response = await Dio().post("https://api.stripe.com/v1/payment_intents",
        data: data,
        options:
          Options(contentType:Headers.formUrlEncodedContentType,
            headers: {
              'Authorization': 'Bearer ${secret}',
            }
          ),
        );
      _currentSecret = response.data["client_secret"];
      return response.data["id"];
    } catch (err) {
      print('err charging user: ${err.toString()}');
    }

【讨论】:

  • 在 Flutter 中还是强制通过的。我在这里发布了解决方案:stackoverflow.com/questions/67785824/…
  • payment_method_types[]' : ['card'] 不适合我。
  • 检查你的飞镖和颤振版本。我正在使用flutter 2.2dart 2.13
【解决方案2】:

这对我有用。

final body = {
      'payment_method_types[]': "card",
}

【讨论】:

    猜你喜欢
    • 2021-07-20
    • 2019-09-29
    • 2023-04-11
    • 2023-01-14
    • 2021-03-10
    • 2022-11-18
    • 2021-02-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多