0. Prerequisite
- Coupang CPI팀에서 제공하는 SDK는 현재 Java 만 지원합니다. 그 외 프로그래밍 언어를 사용하실 경우 Documentation을 참고하여 자체적으로 구현하셔야 합니다.
- SDK는 JAR 파일 형태로 별도로 전달해드립니다.
- SDK 지원 내용
- DTO classes (Coupang -> Vendor, Vendor -> Coupang)
- DTO class 이름은 문서 내 각 API에 명시되어 있습니다. (Request, Response)
- API Client class (Vendor -> Coupang)
- API 호출을 위한 메서드명은 문서 내 각 API에 명시되어 있습니다. (SDK method)
- HMAC 및 Request Header 생성
1. Plain Java 에 적용하기
- CoupangApiClient와 Request Message Header(Coupang-3PFL-MESSAGE-HEADER) 생성을 위한 Coupang3pflMessageHeaderGenerator 객체를 생성합니다.
- Coupang3pflMessageHeaderGenerator 생성자의 인자로 사전 협의된 벤더 이름을 String으로 넣습니다.
- baseUrl, accessKey, secretKey는 별도로 전달드린 값을 String으로 넣습니다.
- 호출할 메서드 내에서 전송할 DTO를 생성하고 데이터를 채워넣습니다.
- Documentation 상에 명시된 메서드를 호출합니다. (아래 예시는 입고 메서드 호출입니다.)
- 첫 번째 인자로는 Coupang3pflMessageHeaderGenerator를 이용해 생성된 Header를 넣습니다.
- 매 호출마다 Coupang3pflMessageHeader를 동적으로 생성해주셔야 합니다. (API 호출 시간을 포함하고 있음)
- 두 번째 인자로 DTO를 넣습니다.
- 인자값은 API 마다 다를 수 있습니다.
package com.tpfl.vendor;
import com.coupang.cpi.bifrost.sdk.external.ApiException;
import com.coupang.cpi.bifrost.sdk.external.apis.CoupangApiClient;
import com.coupang.cpi.bifrost.sdk.external.auth.Coupang3pflMessageHeaderGenerator;
import com.coupang.cpi.bifrost.sdk.external.models.ExternalApiResponseOfobject;
import com.coupang.cpi.bifrost.sdk.external.models.ExternalInboundReceiveDto;
import java.util.ArrayList;
import java.util.List;
public class VendorService {
private final CoupangApiClient coupangApiClient;
private Coupang3pflMessageHeaderGenerator messageHeaderGenerator;
private final String baseUrl = "전달받은 baseUrl을 넣어주세요";
private final String accessKey = "전달받은 HMAC accessKey를 넣어주세요";
private final String secretKey = "전달받은 HMAC secretKey를 넣어주세요";
public VendorService() {
coupangApiClient = new CoupangApiClient(baseUrl, accessKey, secretKey);
messageHeaderGenerator = new Coupang3pflMessageHeaderGenerator("사전협의된 벤더 이름을 넣어주세요");
}
public void doSomething() throws ApiException {
ExternalInboundReceiveDto dto = new ExternalInboundReceiveDto();
/*
* Populate data...
*/
List<ExternalInboundReceiveDto> dtoList = new ArrayList<>();
dtoList.add(dto);
ExternalApiResponseOfobject response = coupangApiClient.inbound1(messageHeaderGenerator.generate(), dtoList);
if (response.getCode().equals("0")) {
// API Success
} else {
// API Fail
}
}
}
2. Spring Framework 에 적용하기
1. Bean 생성
- CoupangApiClient와 Coupang3pflMessageHeaderGenerator Bean을 생성합니다.
- Coupang3pflMessageHeaderGenerator 생성자의 인자로 사전 협의된 벤더 이름을 넣습니다.
- baseUrl, accessKey, secretKey을 String으로 넣습니다.
package com.tpfl.vendor.configuration;
import com.coupang.cpi.bifrost.sdk.external.apis.CoupangApiClient;
import com.coupang.cpi.bifrost.sdk.external.auth.Coupang3pflMessageHeaderGenerator;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class CoupangConfig {
@Value("${coupang.baseUrl}")
private String baseUrl;
@Value("${coupang.hmac.accesskey}")
private String accessKey;
@Value("${coupang.hmac.secretkey}")
private String secretKey;
@Bean
public CoupangApiClient coupangApiClient() {
return new CoupangApiClient(baseUrl, accessKey, secretKey);
}
@Bean
public Coupang3pflMessageHeaderGenerator messageHeaderGenerator() {
return new Coupang3pflMessageHeaderGenerator("사전 협의된 벤더이름을 넣어주세요");
}
}
2. API 호출
- Bean으로 생성한 CoupangApiClient와 Coupang3pflMessageHeaderGenerator을 Autowired로 주입합니다.
- 호출할 메서드 내에서 전송할 DTO를 생성하고 데이터를 채워넣습니다.
- Documentation 상에 명시된 메서드를 호출합니다.
- 첫 번째 인자로는 Coupang3pflMessageHeaderGenerator를 이용해 생성된 Header를 넣습니다.
- 매 호출마다 Coupang3pflMessageHeader를 동적으로 생성해주셔야 합니다. (API 호출 시간을 포함하고 있음)
- 두 번째 인자로 DTO를 넣습니다.
- 인자값은 API 마다 다를 수 있습니다.
package com.tpfl.vendor;
import com.coupang.cpi.bifrost.sdk.external.ApiException;
import com.coupang.cpi.bifrost.sdk.external.apis.CoupangApiClient;
import com.coupang.cpi.bifrost.sdk.external.auth.Coupang3pflMessageHeaderGenerator;
import com.coupang.cpi.bifrost.sdk.external.models.ExternalApiResponseOfobject;
import com.coupang.cpi.bifrost.sdk.external.models.ExternalInboundReceiveDto;
import java.util.ArrayList;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@Component
public class VendorService {
@Autowired
private CoupangApiClient coupangApiClient;
@Autowired
private Coupang3pflMessageHeaderGenerator messageHeaderGenerator;
public void doSomething() throws ApiException {
ExternalInboundReceiveDto dto = new ExternalInboundReceiveDto();
/*
* Populate data...
*/
List<ExternalInboundReceiveDto> dtoList = new ArrayList<>();
dtoList.add(dto);
ExternalApiResponseOfobject response = coupangApiClient.inbound1(messageHeaderGenerator.generate(), dtoList);
if (response.getCode().equals("0")) {
// API Success
} else {
// API Fail
}
}
}