Http POST可在邮递员中使用,但不能在Flutter中使用

我正在尝试使用Http包在flutter应用程序上执行POST请求。我先在Api沙箱网站上测试了我的请求,然后在Postman中测试了我的请求。它在那里很好用,但是一旦进入Flutter,我总是收到400错误请求。

这是我在Flutter中的代码:

import 'package:http/http.dart';
import 'package:uuid/uuid.dart';
import 'package:wave_app/env/secrets.dart';
import 'package:wave_app/models/momo_token.dart';

    String url = "https://sandbox.momodeveloper.mtn.com/collection/v1_0/requesttopay";
    var uuid = Uuid();
    String requestId = uuid.v4();
    MomoToken token = await _createMomoNewTokenCollection();

    String auth = "Bearer " + token.accessToken;

    Map<String, String> headers = {
      "Authorization": auth,
      "X-Target-Environment": "sandbox",
      "X-Reference-Id": requestId,
      "Content-Type": "application/json",
      "Ocp-Apim-Subscription-Key": momoCollectionSubscriptionKey
    };

    String jsonBody = '{"amount": "5","currency": "EUR", "externalId": "123", "payer": {"partyIdType": "MSISDN","partyId": "46733123454"}, "payerMessage": "tripId-123456","payeeNote": "driverId-654321"}';

    Response response = await post(url, headers: headers, body: jsonBody);
    int statusCode = response.statusCode;

    print("STATUS CODE REQUEST TO PAY " + statusCode.toString());
    print(response.reasonPhrase.toString());
    print(response.body.toString());

    if (statusCode == 202) {
      return response.body.toString();
    } else {
      return null;
    }
  }

api文档在这里:https : //momodeveloper.mtn.com/docs/services/collection/operations/requesttopay-POST

这是我的邮递员请求卷曲的代码(使用requestId,auth,momoCollectionSubscriptionKey上方的相同变量)

curl --request POST \
  --url https://sandbox.momodeveloper.mtn.com/collection/v1_0/requesttopay \
  --header 'Accept: */*' \
  --header 'Accept-Encoding: gzip, deflate' \
  --header 'Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSMjU2In0.eyJjbGllbnRJZCI6IjFmY2MzMjBhLTM0NWQtMTFlYS04NTBkLTJlNzI4Y2U4ODEyNSIsImV4cGlyZXMiOiIyMDIwLTAxLTExVDE1OjU3OjE4Ljc3NyIsInNlc3Npb25JZCI6ImZmYzc1OGE2LTM2MWEtNDM4ZS1hYjE5LWQ1ZGQ4ZmU4ZjEyOSJ9.DeoJyU6Hb0he_or1XeBxW-6s-xwdtmi0cUrYjQe0Z796bIGvvT-VJ214JaZItG-CBQpgv7dHbLfXNqr8D05Q7U9XiOtpr8mtYWQlY-MseGIHAyxp1qBuQkwjmBYBlDxQOYYfzG9SZ8tGFUI1_k59LMNYIhDlXXKa68Ym1sylZ8wfWjGuHaKVzMEH25ubiBwCLev5IHPchuF3toVP99U-HC8t95E3zrEt9dHgzn0hnwvpB31wcsu_b3vb-YZ1idHgosPc2GmKFsDruX14VniKBicCsnGHqZAkSPXwaOR6SIn4JZEEwhAIj3Oe2H5dwxloiX5rzaApdkwEg6KSoBXk8A' \
  --header 'Cache-Control: no-cache' \
  --header 'Connection: keep-alive' \
  --header 'Content-Length: 194' \
  --header 'Content-Type: application/json' \
  --header 'Host: sandbox.momodeveloper.mtn.com' \
  --header 'Ocp-Apim-Subscription-Key: 281eb****************' \
  --header 'Postman-Token: ece19062-1f0b-4873-a3ed-1bd4ada8746a,528004b2-410d-4653-9909-5197a3dc95db' \
  --header 'User-Agent: PostmanRuntime/7.20.1' \
  --header 'X-Reference-Id: 062f8aad-f529-4d0a-804c-affb888c2b8b' \
  --header 'X-Target-Environment: sandbox' \
  --header 'cache-control: no-cache' \
  --data '{\r\n  "amount": "5",\r\n  "currency": "EUR",\r\n  "externalId": "123",\r\n  "payer": {\r\n    "partyIdType": "MSISDN",\r\n    "partyId": "46733123454"\r\n  },\r\n  "payerMessage": "hi",\r\n  "payeeNote": "hi"\r\n}'

在邮递员及其网站上,我总是收到202接受答复。我不确定,我在做什么错。任何帮助将不胜感激!

------------编辑-------------------

我也尝试使用HttpClient,这是代码,但仍然收到400错误的请求

HttpClient httpClient = new HttpClient();
    HttpClientRequest request = await httpClient.postUrl(Uri.parse(url));

    request.headers.set("Authorization", "Bearer " + token.accessToken);
    request.headers.set('content-type', 'application/json');
    request.headers.set("X-Target-Environment", "sandbox");
    request.headers.set("X-Reference-Id", requestId);
    request.headers.set("Ocp-Apim-Subscription-Key", momoCollectionSubscriptionKey);

    request.add(utf8.encode(jsonBody));
    HttpClientResponse response = await request.close();

    print("STATUS CODE " + response.statusCode.toString() + "   " + response.reasonPhrase);
    String reply = await response.transform(utf8.decoder).join();
    print("REPLY " + reply);
    httpClient.close();

理查德·希普

这绝对是服务器的问题。服务器对这两个标头X-Reference-IdX-Target-Environment进行区分大小写(即,它不符合RFC)。

Dartio.HttpClient强制将标头转换为小写,因此这会影响package:http并且package:dio都依赖它。有一个请求,允许客户端保留标题的大小写,但是由于这是一个重大更改,它的执行速度很慢。

同时,请尝试使用客户端的此分叉,以保留标头大小写。https://pub.dev/packages/alt_http/

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

JavaScript提取代码可在邮递员中使用,但不能在Google脚本编辑器中使用

来自分类Dev

呼叫只能在邮递员中使用,而不能在C#中使用

来自分类Dev

简单的POST请求可在Postman中使用,但不能在浏览器中使用

来自分类Dev

在邮递员中使用集合变量

来自分类Dev

无法在邮递员中使用服务

来自分类Dev

在Deno中使用HTTP POST的Http Client

来自分类Dev

不能在 Laravel 中使用 Illuminate\Http\UploadedFile 类型的对象作为数组

来自分类Dev

HTTP GET Jwt请求与邮递员一起使用,但与axios返回相同401未经授权

来自分类Dev

错误:“无法连接到 *** - getaddrinfo ENOTFOUND”使用带有“http://localhost:9000/Product”的 get 语句的邮递员

来自分类Dev

jQuery函数可在控制台中使用,但不能在代码中使用

来自分类Dev

JavaScript上的SOAP服务调用可在Safari中使用,但不能在Chrome或Firefox中使用

来自分类Dev

XPath可在浏览器中使用,但不能在简单的HTML DOM中使用

来自分类Dev

WebRTC可在Chrome中使用,但不能在Firefox中使用

来自分类Dev

javascript新日期可在chrome中使用,但不能在Firefox中使用

来自分类Dev

Javascript代码可在Safari中使用,但不能在Firefox中使用。为什么?

来自分类Dev

向量查找功能可在Visual Studio中使用,但不能在GCC中使用

来自分类Dev

Autofac RegisterGeneric可在单元测试中使用,但不能在应用程序中使用

来自分类Dev

CSS动画可在Chrome中使用,但不能在FireFox中使用

来自分类Dev

“ LIKE”运算符可在MS Access中使用,但不能在ADO中使用

来自分类Dev

Shell代码可在控制台中使用,但不能在脚本中使用

来自分类Dev

JS功能可在Chrome中使用,但不能在Firefox中使用

来自分类Dev

jQuery代码可在chrome和IE中使用,但不能在Firefox中使用

来自分类Dev

简单的AddListener,可在代码笔中使用,但不能在Chrome浏览器中使用

来自分类Dev

Gatsby查询可在graphql编辑器中使用,但不能在React代码中使用

来自分类Dev

RegEx筛选器可在RegExr中使用,但不能在Logstash Grok中使用

来自分类Dev

MapsActivity可在调试中使用,但不能在+ android版本中使用

来自分类Dev

正则表达式可在终端中使用,但不能在Perl脚本中使用

来自分类Dev

工具提示可在Firefox中使用,但不能在Chrome中使用

来自分类Dev

python exec命令可在控制台中使用,但不能在程序中使用

Related 相关文章

  1. 1

    JavaScript提取代码可在邮递员中使用,但不能在Google脚本编辑器中使用

  2. 2

    呼叫只能在邮递员中使用,而不能在C#中使用

  3. 3

    简单的POST请求可在Postman中使用,但不能在浏览器中使用

  4. 4

    在邮递员中使用集合变量

  5. 5

    无法在邮递员中使用服务

  6. 6

    在Deno中使用HTTP POST的Http Client

  7. 7

    不能在 Laravel 中使用 Illuminate\Http\UploadedFile 类型的对象作为数组

  8. 8

    HTTP GET Jwt请求与邮递员一起使用,但与axios返回相同401未经授权

  9. 9

    错误:“无法连接到 *** - getaddrinfo ENOTFOUND”使用带有“http://localhost:9000/Product”的 get 语句的邮递员

  10. 10

    jQuery函数可在控制台中使用,但不能在代码中使用

  11. 11

    JavaScript上的SOAP服务调用可在Safari中使用,但不能在Chrome或Firefox中使用

  12. 12

    XPath可在浏览器中使用,但不能在简单的HTML DOM中使用

  13. 13

    WebRTC可在Chrome中使用,但不能在Firefox中使用

  14. 14

    javascript新日期可在chrome中使用,但不能在Firefox中使用

  15. 15

    Javascript代码可在Safari中使用,但不能在Firefox中使用。为什么?

  16. 16

    向量查找功能可在Visual Studio中使用,但不能在GCC中使用

  17. 17

    Autofac RegisterGeneric可在单元测试中使用,但不能在应用程序中使用

  18. 18

    CSS动画可在Chrome中使用,但不能在FireFox中使用

  19. 19

    “ LIKE”运算符可在MS Access中使用,但不能在ADO中使用

  20. 20

    Shell代码可在控制台中使用,但不能在脚本中使用

  21. 21

    JS功能可在Chrome中使用,但不能在Firefox中使用

  22. 22

    jQuery代码可在chrome和IE中使用,但不能在Firefox中使用

  23. 23

    简单的AddListener,可在代码笔中使用,但不能在Chrome浏览器中使用

  24. 24

    Gatsby查询可在graphql编辑器中使用,但不能在React代码中使用

  25. 25

    RegEx筛选器可在RegExr中使用,但不能在Logstash Grok中使用

  26. 26

    MapsActivity可在调试中使用,但不能在+ android版本中使用

  27. 27

    正则表达式可在终端中使用,但不能在Perl脚本中使用

  28. 28

    工具提示可在Firefox中使用,但不能在Chrome中使用

  29. 29

    python exec命令可在控制台中使用,但不能在程序中使用

热门标签

归档