使用 http post 在 Flutter Web for Razorpay API 调用中获取 XMLHttpRequest 错误
Getting XMLHttpRequest error in Flutter Web for Razorpay API call using http post
我在 Flutter Web for Razorpay API 调用中收到一个 XMLHttpRequest 错误,过去 4 天我在整个互联网上进行了搜索,但没有解决方案适用于我的情况。
下面是我的Post请求代码使用http:^0.13.4 package:
Future<String> postRequest(String amount) async {
var url = Uri.parse('https://api.razorpay.com/v1/orders');
var key = 'rzp_test_Xx7Zw7hLfzozf6';
var secret = '7PgbvLaODVzRbb9oRcaqCZMi';
var auth = 'Basic ' + base64Encode(utf8.encode('$key:$secret'));
print(auth);
var body = json
.encode({"amount": 50000, "currency": "INR", "receipt": "rcptid_11"});
var id = DateTime.now().millisecondsSinceEpoch.remainder(100000).toString();
var client = http.Client();
var response = await client.post(
url,
headers: {
'Content-Type': 'application/json',
'Authorization': auth,
},
body: body,
);
print(json.decode(response.body));
return json.decode(response.body);
}
Curl 命令:
curl -X POST https://api.razorpay.com/v1/orders-u <YOUR_KEY_ID>:<YOUR_SECRET>-H 'content-type:application/json'-d '{ "amount": 50000, "currency": "INR", "receipt": "rcptid_11"}'
完整错误:
Error: XMLHttpRequest error.
C:/b/s/w/ir/cache/builder/src/out/host_debug/dart-sdk/lib/_internal/js_dev_runtime/patch/core_patch.dart 906:28 get current
packages/http/src/browser_client.dart 69:22 <fn>
C:/b/s/w/ir/cache/builder/src/out/host_debug/dart-sdk/lib/async/zone.dart 1687:54 runUnary
C:/b/s/w/ir/cache/builder/src/out/host_debug/dart-sdk/lib/async/future_impl.dart 160:18 handleValue
C:/b/s/w/ir/cache/builder/src/out/host_debug/dart-sdk/lib/async/future_impl.dart 767:44 handleValueCallback
C:/b/s/w/ir/cache/builder/src/out/host_debug/dart-sdk/lib/async/future_impl.dart 796:13 _propagateToListeners
C:/b/s/w/ir/cache/builder/src/out/host_debug/dart-sdk/lib/async/future_impl.dart 593:7 [_complete]
C:/b/s/w/ir/cache/builder/src/out/host_debug/dart-sdk/lib/async/stream_pipe.dart 61:11 _cancelAndValue
C:/b/s/w/ir/cache/builder/src/out/host_debug/dart-sdk/lib/async/stream.dart 1288:7 <fn>
C:/b/s/w/ir/cache/builder/src/out/host_debug/dart-sdk/lib/_internal/js_dev_runtime/private/ddc_runtime/operations.dart 334:14 _checkAndCall
C:/b/s/w/ir/cache/builder/src/out/host_debug/dart-sdk/lib/_internal/js_dev_runtime/private/ddc_runtime/operations.dart 339:39 dcall
C:/b/s/w/ir/cache/builder/src/out/host_debug/dart-sdk/lib/html/dart2js/html_dart2js.dart 37254:58 <fn>
at Object.createErrorWithStack (http://localhost:62444/dart_sdk.js:5076:12)
at Object._rethrow (http://localhost:62444/dart_sdk.js:40477:16)
at async._AsyncCallbackEntry.new.callback (http://localhost:62444/dart_sdk.js:40473:13)
at Object._microtaskLoop (http://localhost:62444/dart_sdk.js:40330:13)
at _startMicrotaskLoop (http://localhost:62444/dart_sdk.js:40336:13)
at http://localhost:62444/dart_sdk.js:35811:9
我已经尝试了互联网上的所有解决方案,但没有任何效果。
这有点像 CORS 错误,所以我只是将您的代码粘贴到 Dartpad 中,打开 Chrome 控制台并点击 运行。正如预期的那样,这是一个 CORS 错误。
下一步是搜索 api razorpay cors
,它会产生一堆结果,所有结果都抱怨相同的错误(都没有解决方案 - 这不是好兆头 - 通常意味着没有解决方案)。
下一步是要注意没有体面的支付 API 会让您将凭据包含到客户端应用程序中,尤其是浏览器应用程序。对 Chrome 控制台中的 headers 进行简单检查会发现您的 username/password 凭据。这意味着您使用的 API 不正确。
通过查看 Razorpay website 可以很快确认这一点,它确认 order
api 是 Server-Server api。另一个线索是这个 api 的所有示例代码都是用 PHP、Java、Node.js 等语言编写的——即后端。
回答:您不能从 Flutter 应用中调用此 API。它必须从您的后端调用。
我在 Flutter Web for Razorpay API 调用中收到一个 XMLHttpRequest 错误,过去 4 天我在整个互联网上进行了搜索,但没有解决方案适用于我的情况。
下面是我的Post请求代码使用http:^0.13.4 package:
Future<String> postRequest(String amount) async {
var url = Uri.parse('https://api.razorpay.com/v1/orders');
var key = 'rzp_test_Xx7Zw7hLfzozf6';
var secret = '7PgbvLaODVzRbb9oRcaqCZMi';
var auth = 'Basic ' + base64Encode(utf8.encode('$key:$secret'));
print(auth);
var body = json
.encode({"amount": 50000, "currency": "INR", "receipt": "rcptid_11"});
var id = DateTime.now().millisecondsSinceEpoch.remainder(100000).toString();
var client = http.Client();
var response = await client.post(
url,
headers: {
'Content-Type': 'application/json',
'Authorization': auth,
},
body: body,
);
print(json.decode(response.body));
return json.decode(response.body);
}
Curl 命令:
curl -X POST https://api.razorpay.com/v1/orders-u <YOUR_KEY_ID>:<YOUR_SECRET>-H 'content-type:application/json'-d '{ "amount": 50000, "currency": "INR", "receipt": "rcptid_11"}'
完整错误:
Error: XMLHttpRequest error.
C:/b/s/w/ir/cache/builder/src/out/host_debug/dart-sdk/lib/_internal/js_dev_runtime/patch/core_patch.dart 906:28 get current
packages/http/src/browser_client.dart 69:22 <fn>
C:/b/s/w/ir/cache/builder/src/out/host_debug/dart-sdk/lib/async/zone.dart 1687:54 runUnary
C:/b/s/w/ir/cache/builder/src/out/host_debug/dart-sdk/lib/async/future_impl.dart 160:18 handleValue
C:/b/s/w/ir/cache/builder/src/out/host_debug/dart-sdk/lib/async/future_impl.dart 767:44 handleValueCallback
C:/b/s/w/ir/cache/builder/src/out/host_debug/dart-sdk/lib/async/future_impl.dart 796:13 _propagateToListeners
C:/b/s/w/ir/cache/builder/src/out/host_debug/dart-sdk/lib/async/future_impl.dart 593:7 [_complete]
C:/b/s/w/ir/cache/builder/src/out/host_debug/dart-sdk/lib/async/stream_pipe.dart 61:11 _cancelAndValue
C:/b/s/w/ir/cache/builder/src/out/host_debug/dart-sdk/lib/async/stream.dart 1288:7 <fn>
C:/b/s/w/ir/cache/builder/src/out/host_debug/dart-sdk/lib/_internal/js_dev_runtime/private/ddc_runtime/operations.dart 334:14 _checkAndCall
C:/b/s/w/ir/cache/builder/src/out/host_debug/dart-sdk/lib/_internal/js_dev_runtime/private/ddc_runtime/operations.dart 339:39 dcall
C:/b/s/w/ir/cache/builder/src/out/host_debug/dart-sdk/lib/html/dart2js/html_dart2js.dart 37254:58 <fn>
at Object.createErrorWithStack (http://localhost:62444/dart_sdk.js:5076:12)
at Object._rethrow (http://localhost:62444/dart_sdk.js:40477:16)
at async._AsyncCallbackEntry.new.callback (http://localhost:62444/dart_sdk.js:40473:13)
at Object._microtaskLoop (http://localhost:62444/dart_sdk.js:40330:13)
at _startMicrotaskLoop (http://localhost:62444/dart_sdk.js:40336:13)
at http://localhost:62444/dart_sdk.js:35811:9
我已经尝试了互联网上的所有解决方案,但没有任何效果。
这有点像 CORS 错误,所以我只是将您的代码粘贴到 Dartpad 中,打开 Chrome 控制台并点击 运行。正如预期的那样,这是一个 CORS 错误。
下一步是搜索 api razorpay cors
,它会产生一堆结果,所有结果都抱怨相同的错误(都没有解决方案 - 这不是好兆头 - 通常意味着没有解决方案)。
下一步是要注意没有体面的支付 API 会让您将凭据包含到客户端应用程序中,尤其是浏览器应用程序。对 Chrome 控制台中的 headers 进行简单检查会发现您的 username/password 凭据。这意味着您使用的 API 不正确。
通过查看 Razorpay website 可以很快确认这一点,它确认 order
api 是 Server-Server api。另一个线索是这个 api 的所有示例代码都是用 PHP、Java、Node.js 等语言编写的——即后端。
回答:您不能从 Flutter 应用中调用此 API。它必须从您的后端调用。