我在為 okex 簽名 api 時遇到問題,在 okex 的檔案中:
OK-ACCESS-SIGN 標頭生成如下:
創建一個時間戳 方法 請求路徑 主體的預哈希字串(其中 表示字串連接)。準備密鑰。使用 HMAC SHA256 使用 SecretKey 對預哈希字串進行簽名。以 Base64 格式對簽名進行編碼。示例:sign=CryptoJS.enc.Base64.stringify(CryptoJS.HmacSHA256(timestamp 'GET' '/users/self/verify', SecretKey))
時間戳值與 ISO 毫秒格式的 OK-ACCESS-TIMESTAMP 標頭相同,例如 2020-12-08T09:08:57.715Z。
請求方法應為大寫:例如 GET 和 POST。
requestPath 是請求端點的路徑。
示例:/api/v5/account/balance
body 指的是請求正文的 String。如果沒有請求正文,則可以省略它(通常是 GET 請求的情況)。我為簽名制作的方法是:
dynamic _getSign(String timestamp, String methodType, String url, String body) {
if (body.isEmpty) {
body = "";
}
String message = timestamp methodType.toUpperCase() url body;
var hmacSha256 = Hmac(sha256, utf8.encode(oKSecretKey));
var mac = hmacSha256.convert(utf8.encode(message));
// var a = mac.bytes;
var a = base64Url.encode(mac.bytes);
print(a);
return a;
}
Future<String> getAccountInfo() async {
try {
String timestamp = getServerTime();
String url = '/api/v5/account/balance';
Response response = await OKEXApi.dio.get(url,
queryParameters: {},
options: Options(headers: {
"OK-ACCESS-KEY": oKACCESSKEY,
"OK-ACCESS-PASSPHRASE": oKACCESSPASSPHRASE,
"OK-ACCESS-TIMESTAMP": timestamp,
"OK-ACCESS-SIGN": _getSign(timestamp, "GET", url, ""),
'Accept': 'application/json',
'Content-type': 'application/json',
}));
print(response.data);
return response.data;
} on DioError catch (e) {
return e.error;
}
}
和時間戳
String getServerTime() {
DateTime now = DateTime.now().toUtc();
String isoDate = now.toIso8601String();
return isoDate;
}
當我發送資料時,回應是:
{"msg":"無效符號","code":"50113"}
uj5u.com熱心網友回復:
規范說:
帶有ISO毫秒格式的OK-ACCESS-TIMESTAMP 標頭,例如 2020-12-08T09:08:57.715Z
像這樣截斷微秒:
final now = DateTime.now().toUtc();
final microlessNow = now.subtract(Duration(microseconds: now.microsecond));
final isoDate = microlessNow.toIso8601String();
print(isoDate);
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/387084.html
下一篇:使用按鈕激活文本欄位,getX
