본문 바로가기
해외 오픈마켓 - API/Shopee

[API] Shopee - Create APP, Authorization

by Johnny's 2023. 4. 12.

 

1. App List  → Add New App 

App은 최대 10개까지 만들 수 있다.

2. Create App

App Category, App Name, App Description, App Logo를 작성한다.

TESTAPP이라는 APP이 생성되었고, 현재 Developing 상태이다. Go Live를 하기 위해서는 상품정보에 대한 내용을 간략히 작성해야한다. 비지니스 제품 URL, 테스트 사용자 이름, 테스트 비밀번호, 간략한 소개, 클라이언트 사용자 인터페이스 스크린샷 등 작성하는데 크게 어려운 부분은 없다. 작성하는 부분은 Skip 하겠다. (라이브 버전이 되면 DevelopingOnline 으로 상태가 변경된다.)

 

테스트를 할 수 있는 Test partner_id, Test Key 값이 주어진다. (SandBox)

좌측 메뉴에 Tools라고, Test Account를 생성하고, API Test 할수 있는 Tool을 제공하니, 참고하면 된다.

필자는 조회(GET 요청)에 대한 API만 사용할 것이기 때문에 라이브 버전으로 개발을 진행했다.

권한 부여 및 인증을 진행하기 위해서는 partner_idKey 값이 필요하다.

 

라이브 버전(Online)일 경우 화면

 

 

 

3. Authorization and Authentication  공식 문서

해당 링크를 들어가면 인증 & 권한 부여하는 방법에 대해서 자세히 설명이 나와있다.

 

우선, 권한부여 프로세스는 총 4단계가 필요하다.

1. Generating the authorization link

2. acquiring authorizations from shop(s)

3. using the authorization code

4. getting and refreshing the access_token.

 

 

sign이라는 매개변수는 API를 호출할 때마다 인증에 사용되는 매개변수이다. 인증 서명하는 방법에 대해서 나와 있다. Python, go, Java, PHP의 예시 코드들은 있지만, 아쉽게도 javascript 예시는 없다. 그렇다면, 예시를 확인해보자

권한부여 링크의 예를 보면 API 호출 시 sign 값이 필요하다는 것을 확인할 수 있다. 또한, timestamp 값은 5분동안만 유효하다는 것도 알 수 있다. 공식문서는 꼼꼼히 읽어 봐야한다.

 

예시코드 및 설명 방법을 참조해서 권한부여를 받는 링크를 생성해보자 (partner_id, key 값은 예시 값이므로 참고)

const crypto = require('crypto');

const signature = () => {

    const host = 'https://partner.shopeemobile.com';
    const path = '/api/v2/shop/auth_partner';
    const redirect = 'https://www.naver.com/';
    const partner_id = 2006566; //Live partner_id 입력
    const key = '1391fd986fe8ec7569bebed75b0c33ee35eb5a305bed7038657a5cd5f75b1c88'; //Live Key 입력

    const timestamp = new Date().getTime();
    const convert = Number((timestamp.toString()).substr(0, 10));
    let stringformat = `${partner_id}${path}${convert}`;

    stringformat = stringformat.toString();

    const hash = crypto.createHmac('sha256', key).update(stringformat).digest('hex');

    const url = `${host}${path}?partner_id=${partner_id}&timestamp=${convert}&sign=${hash}&redirect=${redirect}`;
    return url;

}

console.log(signature());

HMAC-SHA256을 사용하여 서명 기반 문자열을 해시하고, 파트너키를 암호화 키로 사용한다. (인증 서명하는 방법 참조) 

Signature 하는 부분은 따로 추가로 설명하겠다.

https://partner.shopeemobile.com/api/v2/shop/auth_partner?partner_id=2006566&timestamp=1681101835&sign=1391fd986fe8ec7569bebed75b0c33ee35eb5a305bed7038657a5cd5f75b1c88&redirect=https://www.naver.com/

권한 부여를 받는 방법이 2가지가 있는데, 필자는 2번 main account로 권한부여를 받는다. (통합계정 :main)

1. Authorizing from a shop account
2. Authorizing from a main account

 

해당 url로 접속을 하면 아래와 같은 화면이 나온다. 

 switch to Sub Account를 클릭해서 통합 아이디로 로그인 한다. (ID:main)

 

 

국가들을 선택 후, Auth Merchant에 체크한 후 Confirm Authorization 버튼을 클릭한다. 그럼 인증에 성공했다라는 알람창과 함께 redirect url로 code와 main_account_id 값을 받을 수 있다.

 

https://www.naver.com/?code=68516768774xxxxxxxxxxxxxxx&main_account_id=xxxxxx

 

아까 1번의 Authorizing from a shop account 으로 승인을 받으면 code, shop_id를 받을 수 있고, (이 경우, 각 국가별(계정별)로 각각 로그인을 해서 받아야 한다. 예를 들어 6개의 국가라고 하면 6번 로그인을 해서 각각 code, shop_id 값을 받아야 한다. ex) ID.mx, ID.my, ID.br, ID.sg .. 아이디.국가 형식임)

 

code 값은 만료시간이 존재하므로, 빠르게 access_token과 refresh_token을 발급해보자. (발급 방법은 다음글 참조)

main_acount_id 값은 변하지 않는 값이고, DB에 저장해서 관리하면 된다.

 

* 참고

- Shoppe API Guide

 

댓글