웹스쿨

업비트(UPBIT) API - 나의 자산 호출하기 본문

개인 프로젝트/업비트 자동매매 일지

업비트(UPBIT) API - 나의 자산 호출하기

마스터욱 2023. 3. 30. 02:18
반응형

업비트에서 드디어 개발 API 가 오픈했습니다.

뭐 API 가 딱히 없어도, 여태껏 시세정보는 몰래 가져오고 있었는데, 매수/매도가 가능한 API가 오픈한 것은 참으로 고마운 일입니다.

업비트 API는 JWT를 이용한 데이터전송을 사용하고 있습니다.

저도 이번 기회에 JWT 처음 알게 되었네요~

개발은 PHP를 이용해서 개발할 계획이기 때문에, 구글링으로 PHP 의 JWT 라이브러리를 검색해서 github 에서 다운받았습니다.

 

다운로드 주소

https://github.com/firebase/php-jwt 

 

php JWT 사용방법

https://coderwall.com/p/8wrxfw/goodbye-php-sessions-hello-json-web-tokens

 

아래 소스코드는 제가 만든 업비트 내 계좌정보 가져오기 입니다.

삽질좀 했습니다.

JWT 사용방법과 CURL 의 header 에 토큰을 싫어서 전송하는 건 처음이라서 저도 조금 헤맸습니다~

 

  1. function get_my_account()
  2. {
  3.     include_once "_JWT.php";
  4.     $JWT = new JWT();
  5.  
  6.     $payload = array();
  7.     $payload['access_key'] = UPBIT_ACCESS_KEY;
  8.     $payload['nonce'] = time() * 1000;
  9.     $token = $JWT->encode($payload, UPBIT_SECRET_KEY);
  10.  
  11.     $string = get_curl(array(
  12.         "url"       => $url,
  13.         "header"    => array(
  14.             "Authorization: Bearer {$token}"
  15.         )
  16.     ));
  17.     $data = json_decode($stringtrue);
  18.  
  19.     return $data;
  20. }
  21.  
  22. function get_curl($param){
  23.     //print_r($param);exit;
  24.  
  25.     $ch = curl_init();
  26.  
  27.     #접속할 URL 주소
  28.     curl_setopt($ch, CURLOPT_URL, $param['url']);
  29.  
  30.     #FALSE 를 설정하면 cURL는 서버 인증서의 유효성을 검사하지 않습니다.#다른 인증를 CURLOPT_CAINFO 옵션 지정하거나 CURLOPT_CAPATH 옵션 증명서 디렉토리를 지정합니다.
  31.     curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
  32.  
  33.     #SSL 버젼 지정. 기본값은 2
  34.     #curl_setopt ($ch, CURLOPT_SSLVERSION,1);
  35.  
  36.     #TRUE 를 설정하면 헤더의 내용을 출력합니다.
  37.     #curl_setopt($ch, CURLOPT_HEADER, 1);
  38.  
  39.     #HTTP 요청에서 사용되는 "User - Agent :" 헤더의 내용.
  40.     curl_setopt($ch, CURLOPT_USERAGENT, CURL_AGENT);
  41.  
  42.     if($param['cookie']){
  43.         #curl_close 호출 될 때 쿠키를 파일 이름으로 저장.
  44.         curl_setopt($ch, CURLOPT_COOKIEJAR, CURL_COOKIE);
  45.  
  46.         #쿠키의 데이터를 http 헤더를 통해 보낸다.
  47.         curl_setopt($ch, CURLOPT_COOKIEFILE, CURL_COOKIE);
  48.     }
  49.  
  50.     #POST 로 데이터 전송.
  51.     #TRUE 를 설정하면 HTTP POST를 수행합니다. POST는 application / x - www - form - urlencoded 식으로 이루어집니다. 이것은 일반적인 HTML 양식과 같은 형식입니다.
  52.     if($param['post_data']){
  53.         curl_setopt($ch, CURLOPT_POST, 1);
  54.         curl_setopt($ch, CURLOPT_POSTFIELDS, $param['post_data']);
  55.     }
  56.  
  57.     if($param['header']){
  58.         curl_setopt($ch, CURLOPT_HTTPHEADER, $param['header']);
  59.     }
  60.  
  61.     #최대 실행 시간(초)
  62.     curl_setopt($ch, CURLOPT_TIMEOUT, 30);
  63.  
  64.     #TRUE 를 설정하면 curl_exec () 의 반환 값을 문자열로 반환합니다. 일반적으로 데이터를 직접 출력합니다.
  65.     curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  66.  
  67.     $result = curl_exec($ch);
  68.     curl_close($ch);
  69.  
  70.     return $result;
  71. }

 

 

아래는 결과입니다.

원화로 10만원 넣어둔게 나오는군요~ 헤헤

Array
(
    [0] => Array
        (
            [currency] => KRW
            [balance] => 100000.19014065
            [locked] => 0.0
            [avg_krw_buy_price] => 0
            [modified] => 
        )
)

 

 

이건 매수중일때~ locked 값이 생성되어있네요~(비트코인 8만원치 매수걸어둔 상태입니다.)

Array
(
    [0] => Array
        (
            [currency] => KRW
            [balance] => 19932.17614065
            [locked] => 80068.014
            [avg_krw_buy_price] => 0
            [modified] => 
        )

)

 

이건 비트코인 매수후의 데이터입니다.

데이터가 2개 리턴되네요.

Array
(
    [0] => Array
        (
            [currency] => KRW
            [balance] => 19932.17614065
            [locked] => 63854.241165
            [avg_krw_buy_price] => 0
            [modified] => 
        )

    [1] => Array
        (
            [currency] => BTC
            [balance] => 0.00243
            [locked] => 0.0
            [avg_krw_buy_price] => 6669000
            [modified] => 
        )

)

이 게시글은
https://webschool.kr/?v=board_view&board_key=38&idx=540
에서 작성한 글입니다. 소스코드의 경우 해당 블로그에서 이뿌게 노출이 되지 않을 수 있사오니, 위 링크로 들어오셔서 보시길 바랍니다.

반응형