์นด์นด์ค T ๋น์ฆ๋์ค API ๋ฅผ ์ด์ฉํ๊ธฐ ์ํด์๋ API ์ธ์ฆ ํ ํฐ์ด ํ์ํฉ๋๋ค.
์ค๋น
biz.cs@kakaomobility.com ์ผ๋ก ํ ํฐ ์์ฒญ ์ด๋ฉ์ผ์ ๋ณด๋ด์ฃผ์ธ์.
์นด์นด์ค T ๋น์ฆ๋์ค ์ด์์๊ฐ ์ ๋ฌํด ๋๋ฆฝ๋๋ค.
์ ๋ฌ๋ฐ์ผ์ ํ ํฐ์ผ๋ก API ํธ์ถ์ ์ฌ์ฉํ API ์ธ์ฆ ํ ํฐ์ ๋ง๋ค ์ ์์ต๋๋ค.
API ์ธ์ฆ ํ ํฐ ์์ฑ
API ์ธ์ฆ ํ ํฐ์ ํด์ฑ(HmacSHA1)์ ํตํด ์์ฑํฉ๋๋ค.
์นด์นด์ค T ๋น์ฆ๋์ค ์ด์์๋ก๋ถํฐ ์ ๋ฌ๋ฐ์ ํ ํฐ์ ํด์ฑ์ ํ์ํ Secret ์ผ๋ก ์ฌ์ฉ๋ฉ๋๋ค.
ํด์ฑ ๋ Message ๋ ๋ค์์ฒ๋ผ ๊ตฌ์ฑ๋ฉ๋๋ค.
Message ํฌ๋งท
โ{๋์}\n{์์ฒญ๋ API URL}\n{์์ฒญ๋ API HttpMethod}\n{๊ธฐ์
ID}\n{API์ธ์ฆํ ํฐ์ ์์ฑํ ์ ๋์ค์๊ฐ(์ด)}\n{๋์}โ
Message ์์
โ96292\nhttps://mob-b2b-dev.kakao.com/external/v2/orders\nGET\n00000000\n1698650510315\n96292โ
๊ธฐ์
ID ๋ ์นด์นด์ค T ๋น์ฆ๋์ค ๊ด๋ฆฌ์์คํ
> ์ค์ > ๊ณ์ ์ ๋ณด > T ๋น์ฆ ID ๋ฅผ ์ฐธ๊ณ ํ์ธ์.
API ์ธ์ฆ ํ ํฐ ์์ฑ ์์
Java
import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
import javax.xml.bind.DatatypeConverter;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.util.Date;
import java.util.Random;
public class ApiAuthTokenMaker {
/**
* ์นด์นด์ค T ๋น์ฆ๋์ค ๊ด๋ฆฌ์์คํ
> ์ค์ > ๊ณ์ ์ ๋ณด > T ๋น์ฆ ID ๊ธฐ์
*/
private static final String CORPORATION_ID = "";
/**
* ์นด์นด์ค T ๋น์ฆ ์ด์์๋ก๋ถํฐ ์ด๋ฉ์ผ๋ก ์ ๋ฌ๋ฐ์ ํ ํฐ ๊ธฐ์
*/
private static final String SECRET = "";
private static final String HASH_ALGORITHM = "HmacSHA1";
public String makeApiAuthToken() throws NoSuchAlgorithmException, InvalidKeyException {
Integer nonce = new Random().nextInt(100000);
String url = "https://mob-b2b-dev.kakao.com/external/v2/orders";
String httpMethod = "GET";
Long timestamp = new Date().getTime();
String message = String.format("%s\n%s\n%s\n%s\n%s\n%s", nonce, url, httpMethod, CORPORATION_ID, timestamp, nonce);
Mac sha1_HMAC = Mac.getInstance(HASH_ALGORITHM);
SecretKeySpec secret_key = new SecretKeySpec(SECRET.getBytes(), HASH_ALGORITHM);
sha1_HMAC.init(secret_key);
byte[] hash = sha1_HMAC.doFinal(message.getBytes());
return DatatypeConverter.printBase64Binary(hash);
}
}
Java
๋ณต์ฌ
C#
using System;
using System.Security.Cryptography;
using System.Text;
public class ApiAuthTokenMaker
{
private static readonly string CORPORATION_ID = ""; //์นด์นด์ค T ๋น์ฆ๋์ค ๊ด๋ฆฌ์์คํ
> ์ค์ > ๊ณ์ ์ ๋ณด > T ๋น์ฆ ID ๊ธฐ์
private static readonly string SECRET = ""; //์นด์นด์ค T ๋น์ฆ ์ด์์๋ก๋ถํฐ ์ด๋ฉ์ผ๋ก ์ ๋ฌ๋ฐ์ ํ ํฐ ๊ธฐ์
public string MakeApiAuthToken()
{
int nonce = new Random().Next();
string url = "https://mob-b2b-dev.kakao.com/external/v2/orders";
string httpMethod = "GET";
long timestamp = DateTimeOffset.Now.ToUnixTimeMilliseconds();
string message = string.Format("{0}\n{1}\n{2}\n{3}\n{4}\n{0}", nonce, url, httpMethod, CORPORATION_ID, timestamp);
byte[] key = Encoding.UTF8.GetBytes(SECRET);
HMACSHA1 hmacsha1 = new HMACSHA1(key);
byte[] resultValue = hmacsha1.ComputeHash(Encoding.UTF8.GetBytes(message));
return Convert.ToBase64String(resultValue);
}
}
C#
๋ณต์ฌ