【问题标题】:Api call works via postman but, not in FlutterApi 调用通过邮递员工作,但不适用于 Flutter
【发布时间】:2020-05-06 22:51:11
【问题描述】:

我正在通过我的颤振应用程序对我的服务器进行 api 调用,但是我不断收到 503 错误,说我的令牌不正确。但是,我已经验证它是正确的。我也可以通过 Postman 进行 api 调用。

通过邮递员我可以下订单没问题:

但是当我通过我的应用程序进行相同的 api 调用时:

Future<dynamic> createOrder(
    String stripeToken, accessToken, restaurantId, address, order) async {
  var url = 'https://buddies-8269.herokuapp.com/api/customer/order/add/';

  // print(url);

  final Map<String, dynamic> createOrder = {
    'access_token': accessToken,
    'stripe_token': stripeToken,
    'restaurant_id': restaurantId,
    'address': address,
    'order_details': order,
  };

  print(json.encode(createOrder));

  http
      .post(url,
          headers: {"Content-Type": "application/json"},
          body: json.encode(createOrder))
      .then((http.Response response) {
    if (response.statusCode == 200) {
      final Map<String, dynamic> responseData = json.decode(response.body);
      print(responseData);
      print('Response body: ${response.body}');
      print(response.request);
    } else {
      print(response.statusCode);
    }
  });
}

调用中发送的数据是:

{"access_token":"ITgL7UElbR5GU7oeerVEr3UZKiG5AV","stripe_token":"tok_visa_debit","restaurant_id":10,"address":"55 Glenwood, brooklyn NY, 32133","order_details":[{"product_size":47,"quantity":2}]}

我在应用程序中收到此错误:

oauth2_provider.models.DoesNotExist: AccessToken matching query does not exist.
sock=backend at=error code=H18 desc="Server Request Interrupted" method=POST path="/api/customer/order/add/" host=buddies-8269.herokuapp.com 

我不明白为什么我可以通过邮递员拨打电话,但不能通过应用程序拨打电话。

【问题讨论】:

  • 删除内容类型标头,只使用 body: createOrder 。在邮递员中,您没有将表单编码为 JSON,因此在 Dart 中也这样做。
  • 我收到一个转换错误,上面写着“(类型转换中的类型'int'不是'String'类型的子类型)”
  • 将 'restaurant_id': restaurantId 更改为 'restaurant_id': restaurantId.toString()
  • 那行不通,因为 order_detail 是一个列表。那就有问题了
  • 您需要将其转换为邮递员屏幕截图中显示的字符串

标签: json api flutter dart


【解决方案1】:

相信你在使用表单数据的时候也需要加上"Content-Type": "application/x-www-form-urlencoded"这个标头。

【讨论】:

  • 尝试仅将地图作为正文发送而不对其进行编码。还要从上面添加内容类型标题。
  • 错误现在是一个字符串到 int。立即发布屏幕截图
  • "_CastError (type 'int' is not a subtype of type 'String' in type cast)" 现在是我删除所有内容后的错误
猜你喜欢
  • 2019-01-20
  • 1970-01-01
  • 2018-10-20
  • 2019-08-25
  • 1970-01-01
  • 2019-08-26
  • 2019-09-25
  • 2019-07-03
  • 1970-01-01
相关资源
最近更新 更多