메뉴 바로가기 컨텐츠(본문) 바로가기 하단 바로가기


API연계

위해상품판매차단시스템 API에 대한 정보를 제공합니다.

연계가이드

위해상품판매차단시스템 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"
        }
        , ...
        ]
    , ...
    }]
}


TOP