OpenAPI를 사용하기 위해서는 API Key(access key, secret key)를 발급받아야 합니다.
OpenAPI를 호출하기 위해선, 발급 받은 access key와 secret key로 jwt 형태의 토큰을 만듭니다.
생성한 jwt를 헤더에 실어 전송합니다.
authorization: Bearer {jwt}
jwt header
{
"alg": "HS256",
"typ": "JWT"
}
jwt payload
{
"access_key": "발급 받은 acccess key (필수)",
"nonce": "중복 되지 않는 UUID 문자열 (필수)",
"query_hash": "해싱된 query string (파라미터가 있을 경우 필수)",
"query_hash_alg": "query_hash를 생성하는 데에 사용한 알고리즘 (기본값 : SHA512)"
}
jwt verify signature
HMACSHA256(
base64UrlEncode(header) + "." +
base64UrlEncode(payload),
발급 받은 secret key(256-bit-secret)
)
예시) 파라미터가 없는 경우 (전체 종목 현재가 조회)
public class GetInexAccount {
public static void main(String[] args) {
final String accessKey = "발급 받은 access key";
final String secretKey = "발급 받은 secret key";
final String serverUrl = "https://api.inexcoin.com";
Key key = Keys.hmacShaKeyFor(secretKey.getBytes());
String jwtToken = Jwts.builder()
.addClaims(Map.of("access_key", accessKey, "nonce", UUID.randomUUID().toString()))
.signWith(key)
.compact();
try {
HttpClient client = HttpClientBuilder.create().build();
HttpGet request = new HttpGet(serverUrl + "/v1/tickers");
request.setHeader("Content-Type", "application/json");
request.addHeader("Authorization", String.format("%s %s", "Bearer", jwtToken));
String responseString = client.execute(request, new BasicHttpClientResponseHandler());
System.out.println("responseString = " + responseString);
} catch (IOException e) {
e.printStackTrace();
}
}
}
import requests
import jwt
import uuid
from datetime import datetime, timedelta
access_key = "발급 받은 access key"
secret_key = "발급 받은 secret key"
server_url = "https://api.inexcoin.com"
# Generate a JWT token
payload = {
'access_key': access_key,
'nonce': str(uuid.uuid4()),
}
token = jwt.encode(payload, secret_key, algorithm='HS256')
# Make the request
headers = {
'Content-Type': 'application/json',
'Authorization': f'Bearer {token}',
}
response = requests.get(f'{server_url}/v1/tickers', headers=headers)
# Print the response
print(f'responseString = {response.text}')
const axios = require('axios');
const jwt = require('jsonwebtoken');
const uuid = require('uuid');
const accessKey = "발급 받은 access key";
const secretKey = "발급 받은 secret key";
const serverUrl = "https://api.inexcoin.com";
// Generate a JWT token
const payload = {
access_key: accessKey,
nonce: uuid.v4(),
};
const token = jwt.sign(payload, secretKey, { algorithm: 'HS256' });
// Make the request
const headers = {
'Content-Type': 'application/json',
'Authorization': `Bearer ${token}`,
};
axios.get(`${serverUrl}/v1/tickers`, { headers })
.then(response => {
console.log(`responseString = ${response.data}`);
})
.catch(error => {
console.error(error);
});
예시) 파라미터가 있는 경우
public class GetInexAccount {
public static void main(String[] args) throws NoSuchAlgorithmException, UnsupportedEncodingException {
final String accessKey = "발급 받은 access key";
final String secretKey = "발급 받은 secret key";
final String serverUrl = "https://api.inexcoin.com?market=BTC&userId=1";
String queryString = "market=BTC&userId=1";
MessageDigest md = MessageDigest.getInstance("SHA-512");
md.update(queryString.getBytes("utf8"));
String queryHash = String.format("%0128x", new BigInteger(1, md.digest()));
Key key = Keys.hmacShaKeyFor(secretKey.getBytes());
String jwtToken = Jwts.builder()
.addClaims(Map.of("access_key", accessKey, "nonce", UUID.randomUUID().toString()
, "query_hash", queryHash, "query_hash_alg", "SHA512"))
.signWith(key)
.compact();
try {
HttpClient client = HttpClientBuilder.create().build();
HttpGet request = new HttpGet(serverUrl;
request.setHeader("Content-Type", "application/json");
request.addHeader("Authorization", String.format("%s %s", "Bearer", jwtToken));
String responseString = client.execute(request, new BasicHttpClientResponseHandler());
System.out.println("responseString = " + responseString);
} catch (IOException e) {
e.printStackTrace();
}
}
}
import hashlib
import jwt
import uuid
import requests
import base64
from jwt.contrib.algorithms.pycrypto import RSAAlgorithm
# Register the RSA algorithm for pyjwt
jwt.register_algorithm('RS512', RSAAlgorithm(RSAAlgorithm.SHA512))
access_key = "발급 받은 access key"
secret_key = "발급 받은 secret key"
server_url = "https://api.inexcoin.com?market=BTC&userId=1"
queryString = "market=BTC&userId=1"
# Generate SHA-512 hash of the query string
query_hash = hashlib.sha512(queryString.encode('utf-8')).hexdigest()
# Prepare the JWT token
payload = {
'access_key': access_key,
'nonce': str(uuid.uuid4()),
'query_hash': query_hash,
'query_hash_alg': 'SHA512'
}
# Note: This assumes HMAC SHA256 for signing. Adjust accordingly if using a different algorithm.
token = jwt.encode(payload, secret_key, algorithm='HS256')
headers = {
'Content-Type': 'application/json',
'Authorization': f'Bearer {token}',
}
try:
response = requests.get(f'{server_url}', headers=headers)
print(f'responseString = {response.text}')
except Exception as e:
print(e)
const axios = require('axios');
const jwt = require('jsonwebtoken');
const crypto = require('crypto');
const uuid = require('uuid');
const accessKey = "발급 받은 access key";
const secretKey = "발급 받은 secret key";
const serverUrl = "https://api.inexcoin.com?market=BTC&userId=1";
const queryString = "market=BTC&userId=1";
// Generate SHA-512 hash of the query string
const queryHash = crypto.createHash('sha512').update(queryString).digest('hex');
// Prepare the JWT token
const payload = {
access_key: accessKey,
nonce: uuid.v4(),
query_hash: queryHash,
query_hash_alg: 'SHA512',
};
const token = jwt.sign(payload, secretKey, { algorithm: 'HS256' });
const headers = {
'Content-Type': 'application/json',
'Authorization': `Bearer ${token}`,
};
axios.get(`${serverUrl}/v1/accounts`, { headers })
.then(response => {
console.log(`responseString = ${JSON.stringify(response.data)}`);
})
.catch(error => {
console.error(error);
});