String endpoint = "/api/v1/account"; // API endpoint
String secret_key = ""; // 생성한 api secret key
String queryString = ""; // API Query String
String nonce; // milliseconds 타임스탬프
// 사인키를 위한 String 생성
String strForSign = endpoint + "/" + nonce +"/" + queryString;
// HMAC SHA256
Mac sha256_HMAC = Mac.getInstance("HmacSHA256");
SecretKeySpec secretKeySpec = new SecretKeySpec(secret_key.getBytes("UTF-8"), "HmacSHA256");
sha256_HMAC.init(secretKeySpec);
// BS-API-SIGNATURE
String signatureResult = Base64.getEncoder().encodeToString(sha256_HMAC.doFinal(strForSign.getBytes("UTF-8")));
출처 : https://docs.bitsonic.co.kr/reference#api-info
위는 자바로 되어 있는데.. 계좌 잔고 조회하는거거든요
아래와 같이 파이썬으로 포팅하는데 안되네요..Signature값이 안맞다고 안되네요
endpoint = "/api/v1/account" # API endpoint secret_key = "" # 생성한 api secret key nonce =str(int(round(time.time() * 1000))) # milliseconds 타임스탬프 queryString = "?nonce=" + nonce + "&api_key="" # API Query String params = {'nonce': nonce, 'api_key': ""} # 사인키를 위한 String 생성 strForSign = endpoint + "/" + nonce +"/" + queryString key = base64.b64decode(secret_key) signature = hmac.new(key, str(strForSign).encode('utf-8'), hashlib.sha256) print("signature : " + str(signature)) # 그 결과물을 base64로 인코딩함 signature_b64 = base64.b64encode(signature.digest()) print("signature_b64 : " + str(signature_b64)) headers = {'BS-API-SIGNATURE':signature_b64} req = requests.get(url='https://open-api.bitsonic.co.kr/api/v1/my-balance', headers=headers, params=params) if req.ok: print(req.json()) else: print('비트소닉 요청 에러')
뭔가 쿼리 스트링에 들어가는 값 원래 비워져있는데.. 저거 비우고 해도 키값이 안맞다고 하고..
sha256변환하는게 잘못된건지.. 안되네요
퍼블릭은 키값필요없어서 바로바로 동작 잘하는데
아시는분 좀 알려주시면 감사하겠습니다.
[알림: 이 게시글은 땡글개발자에 의해 ''에서 '휴지통'로 이동되었습니다]
로그인후 API키 신청이 가능하다고 해서 직접 해보진 못했지만
signatureResult = base64.b64encode(hmac.new(bytes(secret_key, 'utf-8'), bytes(strForSign, 'utf-8'), digestmod=hashlib.sha256).digest())
위와같은 형태로 되어야 할 것 같습니다.