DB/key_stock_api.php
<?php
/*
실전투자 계좌 : 44324749-01

KIS Developers
사용자 ID : @2977183

API그룹
[해외선물옵션] 주문/계좌
[해외주식] 기본시세
[국내선물옵션] 주문/계좌
[국내주식] 기본시세
[장내채권] 기본시세
OAuth인증
[국내주식] ELW 시세
[국내주식] 순위분석
[국내주식] 업종/기타
[국내주식] 시세분석
[해외선물옵션]실시간시세
[국내선물옵션] 기본시세
제휴사
[해외선물옵션] 기본시세
[국내주식] 종목정보
[국내주식] 주문/계좌
[국내주식] 실시간시세
[국내선물옵션] 실시간시세
[해외주식] 시세분석
[장내채권] 주문/계좌
[해외주식] 실시간시세
[해외주식] 주문/계좌
[장내채권] 실시간시세

API 키 발급 주소 : https://securities.koreainvestment.com/main/customer/systemdown/RestAPIService.jsp?cmd=TF04ea03130
*/

$STOCK_ACCESS_KEY = "PSU1Yh8yFTvIRV3KulPkC6lJwpCBjpqHaqDz";
$STOCK_SECRET_KEY = "u18MELe21zujSk9nc1qFJhbCE+YRXdnzlcCQmPWtpGLYL4EAPcU8NX30NZMIlen/fwgIHdnO0epm7BpTw7VCXzmXoWE8c1J0fgic/FTaIrtKzwbpac7eXy+mFD26rqJhOHUMA9DNXWuxp4+qgRRIQkgEFBszcxsenTFdm9AsfOwj2mBqh5U=";

// 토큰 발급 함수 (매 API 호출 전에 이걸로 토큰 받아서 쓰면 됨)
function get_access_token($appkey, $appsecret) {
    $token_file = '/tmp/kis_token.json';
    
    // 저장된 토큰 확인
    if (file_exists($token_file)) {
        $saved = json_decode(file_get_contents($token_file), true);
        if ($saved && $saved['expires'] > time() + 60) {
            return $saved['token']; // 유효하면 그냥 반환
        }
    }
    
    // 만료됐으면 재발급
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, "https://openapi.koreainvestment.com:9443/oauth2/tokenP");
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode([
        "grant_type" => "client_credentials",
        "appkey"     => $appkey,
        "appsecret"  => $appsecret
    ]));
    curl_setopt($ch, CURLOPT_HTTPHEADER, ["Content-Type: application/json"]);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    $res  = json_decode(curl_exec($ch), true);
    curl_close($ch);
    
    // 파일에 저장
    file_put_contents($token_file, json_encode([
        'token'   => $res['access_token'],
        'expires' => time() + 86400 - 300 // 24시간 - 5분 여유
    ]));
    
    return $res['access_token'];
}
?>