메뉴 건너뛰기

조회 수 578 추천 수 0 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄 첨부
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄 첨부

쿠팡 api spring boot java

 

스프링 부트 프로젝트를 생성하고 그 프로젝트에서 쿠팡 api를 사용해 만들 응용프로그램이 있어서 쿠팡 api 연동 테스트를 해봤다.

 

 

1. coupang_api 폴더(패키지)를 만들고 안에 쿠팡 api문서에서 제공하는 테스트 코드를 그대로 java파일로 만들어 준다.

 

 

HmacGenerator.java

package com.coupang_api.Coupang_api;
import org.apache.commons.codec.binary.Hex;



import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
import java.security.GeneralSecurityException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.TimeZone;


public class HmacGenerator {
    private static final String ALGORITHM = "HmacSHA256";
//    private static final Charset STANDARD_CHARSET = Charset.forName("UTF-8");
    private static final Charset STANDARD_CHARSET = StandardCharsets.UTF_8;

    /**
     * Generate HMAC signature
     * @param method
     * @param uri http request uri
     * @param secretKey secret key that Coupang partner granted for calling open api
     * @param accessKey access key that Coupang partner granted for calling open api
     * @return HMAC signature
     */
    public static String generate(String method, String uri, String secretKey, String accessKey) {
        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 dateFormatGmt = new SimpleDateFormat("yyMMdd'T'HHmmss'Z'");
            dateFormatGmt.setTimeZone(TimeZone.getTimeZone("GMT"));
            String datetime = dateFormatGmt.format(new Date());
            String message = datetime + method + path + query;

            String signature;
            try {
                SecretKeySpec signingKey = new SecretKeySpec(secretKey.getBytes(STANDARD_CHARSET), ALGORITHM);
                Mac mac = Mac.getInstance(ALGORITHM);
                mac.init(signingKey);
                byte[] rawHmac = mac.doFinal(message.getBytes(STANDARD_CHARSET));
                signature = Hex.encodeHexString(rawHmac);

            } catch (GeneralSecurityException e) {
                throw new IllegalArgumentException("Unexpected error while creating hash: " + e.getMessage(), e);
            }

            return String.format("CEA algorithm=%s, access-key=%s, signed-date=%s, signature=%s", "HmacSHA256", accessKey, datetime, signature);
        }
    }
}

 

OpenApiTestApplication.java

package com.coupang_api.Coupang_api;

import org.apache.http.entity.StringEntity;
import org.apache.http.util.EntityUtils;
import org.apache.http.HttpHost;
import org.apache.http.HttpRequest;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.RequestBuilder;
import org.apache.http.impl.client.HttpClientBuilder;

import java.io.IOException;

public class OpenApiTestApplication {    private final static String REQUEST_METHOD = "POST";
    private final static String DOMAIN = "https://api-gateway.coupang.com";
    private final static String URL = "/v2/providers/affiliate_open_api/apis/openapi/deeplink";
    // Replace with your own ACCESS_KEY and SECRET_KEY
    private final static String ACCESS_KEY = "YOUR_ACCESS_KEY";
    private final static String SECRET_KEY = "YOUR_SECRET_KEY";

    private final static String REQUEST_JSON = "{\"coupangUrls\": [\"https://www.coupang.com/np/search?component=&q=good&channel=user\",\"https://www.coupang.com/np/coupangglobal\"]}";

    public static void main(String[] args) throws IOException {
        // Generate HMAC string
        String authorization = HmacGenerator.generate(REQUEST_METHOD, URL, SECRET_KEY, ACCESS_KEY);

        // Send request
        StringEntity entity = new StringEntity(REQUEST_JSON, "UTF-8");
        entity.setContentEncoding("UTF-8");
        entity.setContentType("application/json");

        org.apache.http.HttpHost host = org.apache.http.HttpHost.create(DOMAIN);
        org.apache.http.HttpRequest request = org.apache.http.client.methods.RequestBuilder
                .post(URL).setEntity(entity)
                .addHeader("Authorization", authorization)
                .build();

        org.apache.http.HttpResponse httpResponse = org.apache.http.impl.client.HttpClientBuilder.create().build().execute(host, request);

        // verify
        System.out.println(EntityUtils.toString(httpResponse.getEntity()));
    }
}

 

 

두 java 파일 모두 테스트 코드 그대로이다. 

 

2. gradle 의존성 추가

(maven을 사용하는 사람은 구글링으로 찾아보시고)

gradle에 apache commons-codec 라이브러리와 httpclient 라이브러리를 추가해줘야 한다.

 

build.gradle 의존성 추가해준다.

implementation 'commons-codec:commons-codec:1.14'
implementation 'org.apache.httpcomponents:httpclient:4.5.11'

 

 

 

3. OpenApiTestApplication 클래스 메인 메소드 실행.

클래스 옆 실행 버튼으로 실행해준다.

 

 

EntityUtils.toString(httpResponse.getEntity()) 값이 json으로 잘 도착하면, 잘 실행이 된것이다.

 

 

결과 값 : 

{"rCode":"0","rMessage":"","data":[{"originalUrl":"https://www.coupang.com/np/search?component=&q=good&channel=user","shortenUrl":"https://coupa.ng/bnSB0O","landingUrl":"https://link.coupang.com/re/AFFSRP?lptag=AF5139617&pageKey=good&traceid=V0-183-c890f6fb18804fe8"},{"originalUrl":"https://www.coupang.com/np/coupangglobal","shortenUrl":"https://coupa.ng/bnSB0P","landingUrl":"https://link.coupang.com/re/AFFJIKGU?lptag=AF5139617&traceid=V0-183-50c6c2b97fba9aee"}]}

 

 

결과값이 잘안나온다면 쿠팡 api에 에러 코드에 대한 설명이 있으니 참고 해보는게 좋겠다.


List of Articles
번호 제목 날짜 조회 수
38 AJAX 통신시 컨트롤러에서 한글 문자열을 리턴해야하는 경우 인코딩 문제 처리 2018.07.04 2599
37 JAVA Crawling(크로울링) 기본([펌]http://partnerjun.tistory.com/guestbook) file 2018.07.04 5111
36 Java was started but returned exit code=13 - 이클립스 실행시 에러 file 2021.03.31 152
35 Nutch 0.9 를 이용하여 한글 검색하기 2016.12.08 5934
34 play framework + 이클립스 초간단 개발환경 구축법 2016.12.08 12461
33 solr적용시 사용법 2016.12.08 5582
32 Spring AOP(Aspect Oriented Programming) 에서의 용어 file 2016.12.08 5176
31 Spring Framework 개요 2016.12.08 5339
30 Spring Security Basic 인증 비활성화 설정 file 2016.08.18 5556
29 Spring 개발을 위한 Eclipse 개발 환경 구성하기 file 2016.12.06 5432
28 [패스트캣]1. 시작하기 - 설치 file 2016.12.08 5982
27 [펌]자바 Crawling(크로울링) Ajax로 요청하는 것 긁어오기 file 2018.07.04 2898
26 [펌]자바 Crawling(크로울링) 로그인 해 긁어오기 file 2018.07.04 6016
25 검색엔진 (1) - 검색엔진의 이해 2016.12.08 6032
24 검색엔진 (2) - 라이브러리: Lucene, Solr, Elasticsearch 2016.12.08 6228
23 루씬 기본적인 검색 엔진 - 샘플 예제 file 2016.12.08 7769
22 스프링 2.5.2 설치및 HelloWorld 출력하기 file 2016.12.06 5836
21 스프링 AOP의 주요 용어 file 2016.08.18 5829
20 스프링 Bean 객체의 초기화 및 소멸시 호출 메서드 file 2016.08.18 4996
19 스프링 XML 설정에서 자바 설정 Import하기 file 2016.08.18 5071
Board Pagination Prev 1 2 Next
/ 2

하단 정보를 입력할 수 있습니다

© k2s0o1d4e0s2i1g5n. All Rights Reserved