Flutter调用Bricklink API时遇Invalid Signature错误求助
Bricklink API调用持续返回「Invalid Signature(无效签名)」错误求助
错误返回内容
{ "meta":{ "description":"SIGNATURE_INVALID: Invalid Signature", "message":"BAD_OAUTH_REQUEST", "code":401 } }
我的实现代码
String generateTimestamp(){ return (DateTime.now().millisecondsSinceEpoch ~/ 1000).toString(); } String generateNonce() { final random = Random.secure(); final values = List<int>.generate(20, (_) => random.nextInt(256)); return base64Url.encode(values); } void testAPI(id){ String consumerKey = "my_consumer_key"; String consumerSecret = "my_consumer_secret"; String accessToken = "my_access_token"; String tokenSecret = "my_token_secret"; String timestamp = generateTimestamp(); String nonce = generateNonce(); String signatureMethod = 'HMAC-SHA1'; String oauthVersion = '1.0'; String signatureURL = 'https://api.bricklink.com/api/store/v1/items/MINIFIG/$id/subsets'; String baseString = Uri.encodeComponent('GET&$signatureURL&oauth_consumer_key=$consumerKey&oauth_nonce=$nonce&oauth_signature_method=$signatureMethod&oauth_timestamp=$timestamp&oauth_token=$accessToken'); String key = '$consumerSecret&$tokenSecret'; var baseStringUTF = utf8.encode(baseString); var keyUTF = utf8.encode(key); var hmac = Hmac(sha1, keyUTF); var signatureBytes = hmac.convert(baseStringUTF).bytes; var signature = base64.encode(signatureBytes); var url = '$signatureURL?Authorization={"oauth_signature":"$signature","oauth_nonce":"$nonce","oauth_version":"$oauthVersion","oauth_consumer_key":"$consumerKey","oauth_signature_method":"$signatureMethod","oauth_token":"$accessToken","oauth_timestamp":"$timestamp"}'; print(Uri.parse(url)); }
问题说明
开发Flutter应用调用Bricklink API,尝试数小时仍持续收到「Invalid Signature」错误。已尝试以下方法:
- 使用ChatGPT排查问题
- 查阅Dart OAuth库示例
- 通过Postman发送请求并生成Dart代码
目前仅Postman生成的代码能成功请求,但仅对Postman中指定的ID有效。已知签名包含URL中的ID,但仍无法解决问题。本人有编程基础,但刚接触Dart和Flutter,恳请帮忙排查错误。
Postman生成的可运行代码
import 'package:http/http.dart' as http; void main() async { var headers = { 'Authorization': 'OAuth oauth_consumer_key="MY_CONSUMER_KEY",oauth_token="MY_ACCESS_TOKEN",oauth_signature_method="HMAC-SHA1",oauth_timestamp="1741362033",oauth_nonce="dzs01iGFPVs",oauth_version="1.0",oauth_signature="BV9e8ameHBLBOZLqsGL3b8loylw%3D"', 'Cookie': 'AWSALB=/awBeEwuV8Zy7pxAiM5oV96XCmvj4gKzQpY/Ve/5jCevFS+6vWk5NmU/KmkH+Hv6M0/0d9nSFRhIcDIsDjoSxE76x4ECGN40rturNk8m6S0amjhJM+Z1avqd+h+3; AWSALBCORS=/awBeEwuV8Zy7pxAiM5oV96XCmvj4gKzQpY/Ve/5jCevFS+6vWk5NmU/KmkH+Hv6M0/0d9nSFRhIcDIsDjoSxE76x4ECGN40rturNk8m6S0amjhJM+Z1avqd+h+3' }; var request = http.Request('GET', Uri.parse('https://api.bricklink.com/api/store/v1/items/MINIFIG/sw0181/subsets')); request.headers.addAll(headers); http.StreamedResponse response = await request.send(); if (response.statusCode == 200) { print(await response.stream.bytesToString()); } else { print(response.reasonPhrase); } }
内容的提问来源于stack exchange,提问作者no reply
相关产品推荐
相关产品推荐

