์นด์นด์ค T ๋น์ฆ๋์ค API ๋ฅผ ์ด์ฉํ๊ธฐ ์ํด์๋ API ์ธ์ฆ ํ ํฐ์ด ํ์ํฉ๋๋ค.
์ค๋น
biz.cs@kakaomobility.com ์ผ๋ก ํ ํฐ ์์ฒญ ์ด๋ฉ์ผ์ ๋ณด๋ด์ฃผ์ธ์.
์นด์นด์ค T ๋น์ฆ๋์ค ์ด์์๊ฐ ์ ๋ฌํด ๋๋ฆฝ๋๋ค.
์ ๋ฌ๋ฐ์ผ์ ํ ํฐ์ผ๋ก API ํธ์ถ์ ์ฌ์ฉํ API ์ธ์ฆ ํ ํฐ์ ๋ง๋ค ์ ์์ต๋๋ค.
์์ฑ
API ์ธ์ฆ ํ ํฐ์ ํด์ฑ(HmacSHA1)์ ํตํด ์์ฑํฉ๋๋ค.
์นด์นด์ค T ๋น์ฆ๋์ค ์ด์์๋ก๋ถํฐ ์ ๋ฌ๋ฐ์ ํ ํฐ์ ํด์ฑ์ ํ์ํ Secret ์ผ๋ก ์ฌ์ฉ๋ฉ๋๋ค.
ํด์ฑ ๋ Message ๋ ๋ค์์ฒ๋ผ ๊ตฌ์ฑ๋ฉ๋๋ค.
Message ํฌ๋งท
โ{๋์}\n{ํธ์ถํ API URL}\n{ํธ์ถํ API HttpMethod}\n{๊ธฐ์
ID}\n{API ์ธ์ฆํ ํฐ์ ์์ฑํ ์ ๋์ค์๊ฐ(์ด)}\n{๋์}โ
๊ธฐ์
ID ๋ ์นด์นด์ค T ๋น์ฆ๋์ค ๊ด๋ฆฌ์์คํ
> ์ค์ > ๊ณ์ ์ ๋ณด > T ๋น์ฆ ID ๋ฅผ ์ฐธ๊ณ ํ์ธ์.
ํธ์ถํ API URL ๋ ์ฟผ๋ฆฌ์คํธ๋ง์ ํฌํจํ์ง ์์ต๋๋ค.
Message ์์
โ96292\nhttps://mob-b2b-dev.kakao.com/external/v2/orders\nGET\n00000000\n1698650510\n96292โ
์์
Python
import time
import random
import hmac
import hashlib
import base64
CORPORATION_ID = "" # T ๋น์ฆ ID
SECRET = "" # ์ด๋ฉ์ผ๋ก ์ ๋ฌ๋ฐ์ ํ ํฐ
nonce = random.randrange(100000)
url = "https://mob-b2b-dev.kakao.com/external/v2/orders"
http_method = "GET"
timestamp = int(time.time())
message = f"{nonce}\n{url}\n{http_method}\n{CORPORATION_ID}\n{timestamp}\n{nonce}"
api_auth_token = base64.b64encode(
hmac.new(SECRET.encode("utf-8"), message.encode("utf-8"), hashlib.sha1).digest()
).decode("utf-8")
print("Authorization: Token " + api_auth_token)
print("x-mob-b2b-corp-id:", CORPORATION_ID)
print("x-mob-b2b-nonce:", nonce)
print("x-mob-b2b-timestamp:", timestamp)
Python
๋ณต์ฌ
Java
import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
import java.nio.charset.StandardCharsets;
import java.time.Instant;
import java.util.Base64;
import java.util.Random;
public class ApiAuthTokenMaker {
public static void main(String[] args) throws Exception {
String corporationId = ""; // T ๋น์ฆ ID
String secret = ""; // ์ด๋ฉ์ผ๋ก ์ ๋ฌ๋ฐ์ ํ ํฐ
int nonce = new Random().nextInt(100000);
String url = "https://mob-b2b-dev.kakao.com/external/v2/orders";
String httpMethod = "GET";
long timestamp = Instant.now().getEpochSecond();
String message = nonce + "\n" + url + "\n" + httpMethod + "\n" + corporationId + "\n" + timestamp + "\n" + nonce;
Mac mac = Mac.getInstance("HmacSHA1");
mac.init(new SecretKeySpec(secret.getBytes(StandardCharsets.UTF_8), "HmacSHA1"));
String apiAuthToken = Base64.getEncoder().encodeToString(mac.doFinal(message.getBytes(StandardCharsets.UTF_8)));
System.out.println("Authorization: Token " + apiAuthToken);
System.out.println("x-mob-b2b-corp-id: " + corporationId);
System.out.println("x-mob-b2b-nonce: " + nonce);
System.out.println("x-mob-b2b-timestamp: " + timestamp);
}
}
Java
๋ณต์ฌ
C#
using System;
using System.Security.Cryptography;
using System.Text;
class ApiAuthTokenMaker
{
static void Main()
{
string corporationId = ""; // T ๋น์ฆ ID
string secret = ""; // ์ด๋ฉ์ผ๋ก ์ ๋ฌ๋ฐ์ ํ ํฐ
int nonce = new Random().Next(100000);
string url = "https://mob-b2b-dev.kakao.com/external/v2/orders";
string httpMethod = "GET";
long timestamp = DateTimeOffset.UtcNow.ToUnixTimeSeconds();
string message = $"{nonce}\n{url}\n{httpMethod}\n{corporationId}\n{timestamp}\n{nonce}";
using var hmac = new HMACSHA1(Encoding.UTF8.GetBytes(secret));
string apiAuthToken = Convert.ToBase64String(hmac.ComputeHash(Encoding.UTF8.GetBytes(message)));
Console.WriteLine("Authorization: Token " + apiAuthToken);
Console.WriteLine("x-mob-b2b-corp-id: " + corporationId);
Console.WriteLine("x-mob-b2b-nonce: " + nonce);
Console.WriteLine("x-mob-b2b-timestamp: " + timestamp);
}
}
C#
๋ณต์ฌ


