메뉴 건너뛰기

조회 수 663 추천 수 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에 에러 코드에 대한 설명이 있으니 참고 해보는게 좋겠다.


  1. 스프링, MySQL, MyBatis 연동 - 데이터 조회하기

    Date2021.05.06 Views869
    Read More
  2. 스프링, MySQL, MyBatis 연동

    Date2021.05.06 Views170
    Read More
  3. Java was started but returned exit code=13 - 이클립스 실행시 에러

    Date2021.03.31 Views236
    Read More
  4. 스프링 프로젝트 생성 후 샘플 코드 한글 깨짐 현상

    Date2021.03.31 Views234
    Read More
  5. 쿠팡 api 프로젝트 / 적용 테스트 (스프링 부트 / 자바 )

    Date2021.03.29 Views663
    Read More
  6. AJAX 통신시 컨트롤러에서 한글 문자열을 리턴해야하는 경우 인코딩 문제 처리

    Date2018.07.04 Views2663
    Read More
  7. 스프링에서 구글맵 연동하기

    Date2018.07.04 Views4700
    Read More
  8. 스프링과 안드로이드 연동1(Html 소스 가져오기)

    Date2018.07.04 Views2733
    Read More
  9. 스프링과 안드로이드 연동2 : 서버에서 안드로이드로 이미지 가져오기(다운)

    Date2018.07.04 Views3399
    Read More
  10. 스프링과 안드로이드 연동3 : ( 서버에서 XML로 반환해 가져오기 )

    Date2018.07.04 Views2950
    Read More
  11. 스프링과 안드로이드 연동4 : (JSON으로 가져오기)

    Date2018.07.04 Views5597
    Read More
  12. 스프링과 안드로이드 연동5 : (Javascript에서 Android 함수 호출하기)

    Date2018.07.04 Views3465
    Read More
  13. JAVA Crawling(크로울링) 기본([펌]http://partnerjun.tistory.com/guestbook)

    Date2018.07.04 Views5191
    Read More
  14. [펌]자바 Crawling(크로울링) 로그인 해 긁어오기

    Date2018.07.04 Views6106
    Read More
  15. [펌]자바 Crawling(크로울링) Ajax로 요청하는 것 긁어오기

    Date2018.07.04 Views2967
    Read More
  16. 쿠키와 세션을 이용한 자동 로그인 처리

    Date2018.07.04 Views9063
    Read More
  17. 스프링 외부 경로 폴더 지정하기

    Date2018.07.04 Views4689
    Read More
  18. play framework + 이클립스 초간단 개발환경 구축법

    Date2016.12.08 Views12605
    Read More
  19. 루씬 기본적인 검색 엔진 - 샘플 예제

    Date2016.12.08 Views7835
    Read More
  20. [패스트캣]1. 시작하기 - 설치

    Date2016.12.08 Views6044
    Read More
Board Pagination Prev 1 2 Next
/ 2

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

© k2s0o1d4e0s2i1g5n. All Rights Reserved