업비트 api 를 사용할 때 인증토큰을 받아야 한다. 그렇지 않으면 api 서비스를 받을 수 없다. 인증토큰을 받기 위해 파라미터를 전달한느 경우들도 발생할 수 있는데 이것 또한 어렵지 않다. 그저 get 방식으로 url 을 만들어 전송하면 그만이다.
파라미터 존재할 때 인증 토큰 받기
인증토큰을 받기 위해 secret key 와 access key가 필요하다.
업비트 api는 보안토큰을 받기 위해 파라미터가 필요할 때와 필요하지 않을 때의 가이드를 제시하고 있다.
파라미터가 필요없는 경우는 이전 포스팅에 작성했다.
▶ 업비트 api 0001 파라미터 없는 경우 인증토큰 요청하고 받기
파라미터가 필요한 겨우도 똑같다.
가이드의 문서를 보고 그대로 따라하면 그 뿐이다.
가이드 문서의 샘플코드
여러가지 언어로 만들 수 있지만 자바를 기준으로 작성해 본다.
qurery string 에 필요한 url 문자열을 만들면 되며, 코드는 그대로 사용하면 된다.
query로써 전달할 url 파라미터 들은 get delete 등이나 post put 등 전송방식이나 파라미터의 상관없이 무조건 &키=값 의 형태를 가져야 한다.
물론 아래의 경우 파라미터가 없더라도 테스트로 전달해도 정상적으로 동작한다.
import com.auth0.jwt.JWT;
import com.auth0.jwt.algorithms.Algorithm;
import java.io.UnsupportedEncodingException;
import java.math.BigInteger;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.UUID;
public class OpenApiSample {
public static void main(String[] args) throws NoSuchAlgorithmException, UnsupportedEncodingException {
String accessKey = "발급받은 Access key";
String secretKey = "발급받은 Secret key";
String queryString = "query string 생성";
MessageDigest md = MessageDigest.getInstance("SHA-512");
md.update(queryString.getBytes("utf8"));
String queryHash = String.format("%0128x", new BigInteger(1, md.digest()));
Algorithm algorithm = Algorithm.HMAC256(secretKey);
String jwtToken = JWT.create()
.withClaim("access_key", accessKey)
.withClaim("nonce", UUID.randomUUID().toString())
.withClaim("query_hash", queryHash)
.withClaim("query_hash_alg", "SHA512")
.sign(algorithm);
String authenticationToken = "Bearer " + jwtToken;
}
}
자바 스프링으로 변경해 본다.
마찬가지로 자바 스프링의 컨트롤러에 그대로 붙여넣기 하고 access key와 secret key만 넣어주면 된다.
예외처리를 위한 throws 가 존재하는 것에 주의하자.
위의 코드와 비교를 함에 있어 특별히 달라진 것은 없다.
단지 자바의 main 메서드에 있던 소스가 자바 스프링의 컨트롤러에 그대로 이식된 것 뿐이다.
@RequestMapping(value = "/trwm", method = RequestMethod.GET)
public void TestRequestWithMarket(Locale locale, Model model) throws NoSuchAlgorithmException, UnsupportedEncodingException {
logger.info("Request Controller : TestRequestWithMarket.", locale);
String accessKey = "발급받은 Access key";
String secretKey = "발급받은 Secret key";
String serverUrl = "https://api.upbit.com";
String queryString = "query string 생성";
MessageDigest md = MessageDigest.getInstance("SHA-512");
md.update(queryString.getBytes("utf8"));
String queryHash = String.format("%0128x", new BigInteger(1, md.digest()));
Algorithm algorithm = Algorithm.HMAC256(secretKey);
String jwtToken = JWT.create()
.withClaim("access_key", accessKey)
.withClaim("nonce", UUID.randomUUID().toString())
.withClaim("query_hash", queryHash)
.withClaim("query_hash_alg", "SHA512")
.sign(algorithm);
String authenticationToken = "Bearer " + jwtToken;
logger.info("authenticationToken" + authenticationToken);
try {
HttpClient client = HttpClientBuilder.create().build();
HttpGet request = new HttpGet(serverUrl + "/v1/market/all?isDetails=false");
request.setHeader("Content-Type", "application/json");
request.addHeader("Authorization", authenticationToken);
HttpResponse response = client.execute(request);
HttpEntity entity = response.getEntity();
System.out.println(EntityUtils.toString(entity, "UTF-8"));
} catch (IOException e) {
e.printStackTrace();
}
}
결과를 보자
에러가 발생해야 정상이겠지만 정상적으로 동작하는 것을 알 수 있다.
물론, 가상화폐에 대한 컨텐츠를 개발하는 입장에서 가이드 문서의 초기 코드에서 이런 친철한 경우는 거의 드물기도 하다.
정상적으로 인증토큰을 받는 것을 확인 할 수 있다.
'programming > OpenApiDEV' 카테고리의 다른 글
업비트 api 0001 파라미터 없는 경우 인증토큰 요청하고 받기 (0) | 2021.06.21 |
---|---|
오픈 api 테스트 금융감독원 금융상품통합비교 금융상품한눈에 (0) | 2021.03.15 |
오픈 api 신청 금융감독원 금융상품통합비교 금융상품한눈에 (0) | 2021.03.09 |
댓글