연계가이드
위해상품판매차단시스템 API 연계를 위한 가이드
서비스 이용방법
- 1. API 연계 > 연계신청 > API 서비스 신청하기 버튼을 클릭합니다.
- 2. API 신청서에 * 표시된 부분은 필수 입력이므로 기재하셔야됩니다.
- ※ 신청업체 > POS 업체 여부 - 체인유통매장일 경우, '아니오' 선택 / 단독유통매장일 경우, '예' 선택
- 업무(신청)담당자 > 이메일 - API 신청 후, 승인(API 인증키 및 기간) 및 반려(반려사유) 정보를 발송하오니, 옳바르게 기재하여주시기 바랍니다.
- 수신기관 - 위해상품 정보를 수신 할 검사기관 선택
- 개인정보 수집 및 이용에 동의 후, '신청' 버튼을 클릭합니다.
- 3. 승인 후, 아래 해당하는 유통매장 "API 가이드" 버튼을 클릭하여 다운로드합니다.
API 가이드(체인유통매장용) API 가이드(단독유통매장용)
예시 - JAVA
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLEncoder;
import java.util.HashMap;
import java.util.Map;
public class ApiSample {
public static void main(String[] args) {
// API 가이드(체인유통매장용) 위해상품 통보 정보에 필요한 코드 정보 불러오기 예시입니다.
String apiURL = "https://upss.gs1kr.org/api/v1/code"; // 요청 URL
String serviceCrtfcKey = "40a17174fb3343b6a1b942b6dc85c419"; // API 신청으로 발급받은 서비스 인증 키
Map<String, String> requestHeaders = new HashMap<>(); // Reqeust Header Data 부분
requestHeaders.put("serviceCrtfcKey", serviceCrtfcKey);
Map<String, String> requestBodies = new HashMap<>(); // Reqeust Body Data 부분
//requestBodies.put("reqDocDt", "20211122000000");
String responseBody = post(apiURL, requestHeaders, requestBodies);
System.out.println(responseBody);
}
private static String post(String apiUrl, Map<String, String> requestHeaders, Map<String, String> requestBodies){
HttpURLConnection con = connect(apiUrl);
try {
con.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
con.setRequestMethod("POST");
con.setDoOutput(true);
for(Map.Entry<String, String> header :requestHeaders.entrySet()) {
con.setRequestProperty(header.getKey(), header.getValue());
}
DataOutputStream dataOutputstr = new DataOutputStream(con.getOutputStream());
dataOutputstr.writeBytes(getDataString(requestBodies));
dataOutputstr.flush();
dataOutputstr.close();
int responseCode = con.getResponseCode();
if (responseCode == HttpURLConnection.HTTP_OK) { // 정상 호출
return readBody(con.getInputStream());
} else { // 에러 발생
return readBody(con.getErrorStream());
}
} catch (IOException e) {
throw new RuntimeException("API 요청과 응답 실패", e);
} finally {
con.disconnect();
}
}
private static String getDataString(Map<String, String> params) {
StringBuilder result = new StringBuilder();
boolean first = true;
for(Map.Entry<String, String> entry : params.entrySet()){
if(first) {
first = false;
} else {
result.append("&");
}
try {
result.append(URLEncoder.encode(entry.getKey(), "UTF-8"));
result.append("=");
result.append(URLEncoder.encode(entry.getValue(), "UTF-8"));
} catch (UnsupportedEncodingException e) {
throw new RuntimeException("인코딩이 실패했습니다. : ", e);
}
}
return result.toString();
}
private static HttpURLConnection connect(String apiUrl){
try {
URL url = new URL(apiUrl);
return (HttpURLConnection)url.openConnection();
} catch (MalformedURLException e) {
throw new RuntimeException("API URL이 잘못되었습니다. : " + apiUrl, e);
} catch (IOException e) {
throw new RuntimeException("연결이 실패했습니다. : " + apiUrl, e);
}
}
private static String readBody(InputStream body){
InputStreamReader streamReader = new InputStreamReader(body);
try (BufferedReader lineReader = new BufferedReader(streamReader)) {
StringBuilder responseBody = new StringBuilder();
String line;
while ((line = lineReader.readLine()) != null) {
responseBody.append(line);
}
return responseBody.toString();
} catch (IOException e) {
throw new RuntimeException("API 응답을 읽는데 실패했습니다.", e);
}
}
}
예시 - curl
curl -X POST "https://upss.gs1kr.org/api/v1/code" \
-H "serviceCrtfcKey:40a17174fb3343b6a1b942b6dc85c419" \
-d "reqDocDt=20211122000000"
'-H' 문서가이드 URL Request Header 부분
'-d' 문서가이드 URL Request Body 부분
요청
> POST /api/v1/code HTTP/1.1
> User-Agent: curl/7.19.7
> Host: upss.gs1kr.org
> Accept: */*
> serviceCrtfcKey:40a17174fb3343b6a1b942b6dc85c419
>
응답
< HTTP/1.1 200 200
< Date: Fri, 19 Nov 2021 08:29:22 GMT
< Server: Apache/2.4.25 (Unix) OpenSSL/1.0.1e-fips mod_jk/1.2.42
< Transfer-Encoding: chunked
< Content-Type: application/json;charset=UTF-8
<
{
"resultCd": "200",
"resultMsg": "정상 처리되었습니다.",
"resultProcDt": "20211119173331",
"data": [{
"clsCd": "006",
"clsNm": "조치결과 코드",
"dtl": [{
"dtlCd": "1",
"dtlNm": "판매차단완료",
"useYn": "Y"
}
, ...
]
, ...
}]
}