Coupang Partners API는 HMAC을 이용한 인증을 사용하고 있습니다. 모든 Coupang Partners API의 request header의 "Authorization" key에 생성한 HMAC signature를 넣어서 보내주셔야 합니다.
HMAC Signature 생성 예제
Java Example
package com.coupang.partners;
import org.apache.commons.codec.binary.Hex;
import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
import java.nio.charset.StandardCharsets;
import java.security.GeneralSecurityException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.TimeZone;
public class HmacGenerator {
//accessKey와 secretKey는 연동 초기에 쿠팡에서 전달해드립니다.
//generate method로 생성된 HMAC signature를 "Authorization" key에 매핑하여 보내주시면 됩니다.
public String generate(String method, String uri, String accessKey, String secretKey) {
String[] parts = uri.split("\\?");
if (parts.length > 2) {
throw new RuntimeException("incorrect uri format");
} else {
String path = parts[0];
String query = "";
if (parts.length == 2) {
query = parts[1];
}
SimpleDateFormat dateFormatUtc = new SimpleDateFormat("yyMMdd'T'HHmmss'Z'");
dateFormatUtc.setTimeZone(TimeZone.getTimeZone("UTC"));
String datetime = dateFormatUtc.format(new Date());
String message = datetime + method + path + query;
String signature;
try {
SecretKeySpec signingKey = new SecretKeySpec(secretKey.getBytes(StandardCharsets.UTF_8), "HmacSHA256");
Mac mac = Mac.getInstance("HmacSHA256");
mac.init(signingKey);
byte[] rawHmac = mac.doFinal(message.getBytes(StandardCharsets.UTF_8));
signature = Hex.encodeHexString(rawHmac);
} catch (GeneralSecurityException var14) {
throw new IllegalArgumentException("Unexpected error while creating hash: " + var14.getMessage(), var14);
}
return String.format("CEA algorithm=%s,access-key=%s,signed-date=%s,signature=%s", "HmacSHA256", accessKey, datetime, signature);
}
}
}