--- title: "Server to Server 설정" slug: "game-gamepotserver" tags: ["GAMEPOT", "GAMEPOT 2.0"] updated: 2026-09-17T09:07:47Z published: 2026-09-17T09:07:47Z canonical: "guide.ncloud-docs.com/game-gamepotserver" stale: true --- > ## Documentation Index > Fetch the complete documentation index at: https://guide.ncloud-docs.com/llms.txt > Use this file to discover all available pages before exploring further. # Server to Server 설정 Classic/VPC 환경에서 이용 가능합니다. 아이템 지급, 로그인 검증을 위해 서버에서 서버로 요청을 발송하도록 설정하는 방법을 설명합니다. ## 결제 아이템 지급 요청 웹훅을 통해 HTTP 요청을 발송하여 결제 또는 쿠폰 사용에 따른 아이템 지급을 진행하도록 설정할 수 있습니다. 아이템 지급을 위해 웹훅으로 HTTP 요청을 발송하도록 설정하는 방법은 아래와 같습니다. 1. 관리자 계정으로 대시보드에 로그인해 주십시오. 2. **프로젝트 설정 > 일반** 메뉴를 차례대로 클릭해 주십시오. 3. **Webhook** 영역의 **결제 아이템 (서비스)** 또는 **쿠폰 아이템 (서비스)** 입력란에 아래 가이드를 참조하여 HTTP/ HTTPS URL 를 입력해 주십시오. - 결제 후 아이템 지급은 [결제 후 요청 및 응답](/docs/game-gamepotserver#%EA%B2%B0%EC%A0%9C%ED%9B%84%EC%9A%94%EC%B2%AD%EB%B0%8F%EC%9D%91%EB%8B%B5)을 참조해 주십시오. - 쿠폰 사용 후 아이템 지급은 [쿠폰 사용 후 요청 및 응답](/docs/game-gamepotserver#%EC%BF%A0%ED%8F%B0%EC%82%AC%EC%9A%A9%ED%9B%84%EC%9A%94%EC%B2%AD%EB%B0%8F%EC%9D%91%EB%8B%B5)을 참조해 주십시오. - 테스트 사용자에게 아이템을 지급하는 경우 **(테스트사용자)** 표시가 있는 입력란에 요청을 입력해 주십시오. 4. **[수정]** 버튼을 클릭해 주십시오. ### 결제 후 요청 및 응답 아래 표 및 코드를 참조하여 HTTP 요청 및 응답을 설정해 주십시오. - **요청** ``` https://{domain}? userId={uuid}&orderId={orderId}&projectId={projectId}&platform={platform}&productId={productId}&store={store}&payment={payment}&transactionId={transactionId}&gamepotOrderId={gamepotOrderId}&uniqueId={uniqueId}&tp={tp} ``` | 속성 | 타입 | 최대 길이 | 설명 | | --- | --- | --- | --- | | `userId` | `String` | 128 | 사용자 ID | | `transactionId` | `String` | 512 | 주문번호(GPA-xxxx-xxxx-) | | `store` | `String` | 64 | 스토어 정보(`apple`, `google`, `one`) | | `projectId` | `String` | 128 | 프로젝트ID | | `productId` | `String` | 256 | 구글/애플/원스토어에 등록된 상품 ID | | `platform` | `String` | 128 | 운영 Platform 정보 (`android`, `ios`) | | `payment` | `String` | 64 | 결제 방식 | | `uniqueId` | `String` | 512 | Unique id (purchase api 호출 시 입력한 `uniqueId`) | | `gamepotOrderId` | `String` | 512 | GAMEPOT Order ID | | `serverId` | `String` | - | serverId (purchase api 호출 시 입력한 `serverId`) | | `playerId` | `String` | - | playerId (purchase api 호출 시 입력한 `playerId`) | | `tp` | `Integer` | - | 1: 테스트 결제 0: 일반 결제 | | `etc` | `String` | - | etc (purchase api 호출 시 입력한 `etc`) | - **응답** ``` { "status": 1, "message" : "" } ``` | 속성 | 타입 | 설명 | | --- | --- | --- | | `status` | `Integer` | 결과값 `0`: 실패, `1`: 성공 | | `message` | `String` | 오류 내용 | ### 선물하기 및 쿠폰 사용 후 요청 및 응답 아래 표 및 코드를 참조하여 HTTP 요청 및 응답을 설정해 주십시오. - **요청** ``` https://{domain}? userId={userId}&projectId={projectId}&platform={platform}&store={store}&userData={userData}&itemId=[{itemData}, {itemData}, ...] ``` | 속성 | 타입 | 최대 길이 | 설명 | | --- | --- | --- | --- | | `userId` | `String` | 128 | 사용자 ID (대시보드에서 **게임 > 선물하기 > 대상** 값이 전체인 경우 `all` ) | | `projectId` | `String` | 128 | 프로젝트 ID | | `platform` | `String` | 128 | 운영 Platform 정보 (`android`, `ios`) | | `store` | `String` | 64 | 스토어 정보(`apple`, `google`, `one`) | | `title` | `String` | - | **대시보드 > 게임 > 선물하기 > 제목**에 입력한 값 | | `content` | `String` | - | **대시보드 > 게임 > 선물하기 > 설명**에 입력한 값 | | `target` | `String` | - | 게임팟 대시보드 > 게임 > 선물하기 > 대상 값 - 전체 : all / 사용자ID : user | | `expireMs` | `String` | - | **대시보드 > 게임 > 선물하기 > 만료일**에 입력한 값 Timestamp ( GMT+9 ) | | `userData` | `String` | - | 클라이언트 SDK 쿠폰 API 호출 시 두 번째 파라미터에 입력한 값 또는 **대시보드 > 게임 > 선물하기 > UserData**에 입력한 값 | | `itemId` | `Array` | - | itemData Array - `itemData(JSON) {"item_id" : String, "store_item_id" : String, "count" : Number}` `item_id`: 대시보드 **게임 > 아이템**에서 생성한 아이템 항목의 고유 ID `store_item_id`: 지급할 아이템 ID `count`: 지급할 아이템 수 | - **응답** ``` { "status": 1, "message" : "" } ``` | 속성 | 타입 | 설명 | | --- | --- | --- | | `status` | `Integer` | 결과값 `0`: 실패, `1`: 성공 | | `message` | `String` | 오류 내용 | ## 로그인 검증 요청 (선택) 회원이 로그인을 완료할 때 얻은 정보로 GAMEPOT 서버에 로그인 검증을 요청할 수 있습니다. 로그인 검증은 1단계 GAMEPOT 토큰 검증, 그리고 2단계 소셜 미디어 계정 검증 순서로 진행됩니다. 2단계 검증 절차에서 검증에 실패한 경우 GAMEPOT 이용 정지 기능이 동작하여 해당 계정이 이용 정지 처리됩니다. 주의 1단계 GAMEPOT 토큰 검증 기능을 동기 처리하지 마십시오. 1단계 토큰 검증 기능을 동기 처리할 경우 네트워크 통신이 원활하게 이루어지지 않을 가능성이 매우 높으며, 이로 인해 회원이 정상적으로 게임을 이용하지 못할 수 있습니다. 따라서 1단계 토큰 검증 기능을 비동기로 처리한 후, 그 이후 과정에서 이용 정지 기능이 적용되도록 구현해 주십시오. 1. 관리자 계정으로 대시보드에 로그인해 주십시오. 2. **프로젝트 설정 > 일반** 메뉴를 차례대로 클릭한 후 **Auth Key** 영역에 각 개발 콘솔에서 획득한 ID와 키 값을 입력해 주십시오. - 2단계 검증 절차 및 이용 정지 기능을 사용하지 않고자 할 경우 이 절차를 생략해 주십시오. 3. 아래 요청, 응답 및 오류 코드를 참조하여 로그인 검증을 요청해 주십시오. ### 요청, 응답 및 오류 코드 아래 표 및 코드를 참조하여 로그인 검증 요청, 응답 및 오류 코드를 설정해 주십시오. - **요청** ``` POST url : https://gamepot.apigw.ntruss.com/gpapps/v1/loginauth Header : 'content-type: application/json' data: { "projectId": {GamePot SDK의 projectId}, "memberId": {GamePot SDK의 memberid(사용자ID)}, "token": {GamePot SDK의 Token}, "remoteip": {로그인한 계정의 아이피 정보}, "platform": "" } ``` | 속성 | 타입 | 최대 길이 | 설명 | | --- | --- | --- | --- | | `projectId` | `String` | 128 | GAMEPOT SDK의 프로젝트 ID | | `memberId` | `String` | 128 | GAMEPOT SDK의 사용자 ID | | `token` | `String` | 2048 | GAMEPOT SDK의 Token | | `remoteip` | `String` | - | 로그인한 계정의 아이피 정보 ( ex) XXX.XXX.XXX.XXX ) | | `platform` | `String` | - | pc 플랫폼 사용하는 경우에만 pc로 설정 | - **응답** ``` { "status": 1, "message" : "" } ``` | 속성 | 타입 | 설명 | | --- | --- | --- | | `status` | `Integer` | 결과값 `1`: 성공 실패는 아래 오류 코드 참조 | | `message` | `String` | 오류 내용 | - **오류 코드** | 코드 | 설명 | | --- | --- | | `0` | body에 누락된 데이터가 있는 경우. HTTP 요청 시 `projectId`, `memberId`, `token`을 모두 입력하였는지 확인 | | `-1` | Token 검증 실패. Token이 조작된 경우 | | `-2` | MemberId 검증 실패. Token의 사용자 ID 정보와 body의 사용자 ID가 일치하지 않은 경우 | | `-3` | Token 만료. SDK login api가 성공한 시각과 해당 Authentication check를 요청한 시각에 60분 이상 차이가 있는 경우 | ## 외부 결제 외부 결제 연동을 위해 서버 간 요청을 설정할 수 있습니다. 해당 기능을 사용하기 전 반드시 네이버 클라우드 플랫폼에 자세한 사용법에 관해 문의해 주십시오. - [문의하기](https://www.ncloud.com/support/question) ### 요청, 응답 및 오류 코드 - **요청** ``` POST url : https://gamepot.apigw.ntruss.com/gpapps/v2/thirdparty/purchase Header : 'content-type: application/json' Header : 'x-api-key: xxxxxxxxxxx' data: { "projectId": "e948e5bc-dccd-4729-b9b0-b547ae34b85d", "store": "tpay", "productId": "purchase_001", "transactionId": "t-123412812-sadl-2384-75847", "memberId":"89a907ed-0e1d-42fb-ae4d-75e95581220d", "currency": "KRW", "price":1000, "paymentId": "prepaid", "uniqueId": "" } ``` | 헤더 | 타입 | 필수 여부 | 설명 | | --- | --- | --- | --- | | `x-api-key` | `String` | 필수 | GAMEPOT에서 발급하는 인증 키 | | 속성 | 타입 | 최대 길이 | 설명 | | --- | --- | --- | --- | | `projectId` | `String` | 128 | GAMEPOT SDK의 프로젝트 ID | | `store` | `String` | 64 | 결제 스토어 | | `productId` | `String` | 256 | 결제한 아이템 ID | | `transactionId` | `String` | 512 | 결제 고유 ID | | `memberId` | `String` | 128 | GAMEPOT SDK의 사용자 ID | | `currency` | `String` | 64 | 결제 통화 | | `price` | `Number` | - | 결제 금액 | | `paymentId` | `String` | 64 | 결제 수단 | | `uniqueId` | `String` | 512 | 게임 내 결제 고유 ID | - **응답** ``` { "status": 1, "message" : "" } ``` | 속성 | 타입 | 설명 | | --- | --- | --- | | `status` | `Integer` | 결과값 `1`: 성공 실패는 아래 오류 코드 참조 | | `message` | `String` | 오류 내용 | - **오류 코드** | 코드 | 설명 | | --- | --- | | `-1` | body에 누락된 데이터가 있는 경우. HTTP 요청 시 `projectId`, `transactionId`, `productId`, `store`, `memberId`를 모두 입력하였는지 확인 | | `-2` | `price`의 값이 `number`타입이 아닌 경우 | | `-3` | `projectId`가 없는 경우 | | `-4` | 프로젝트가 해당 API를 지원하지 않는 경우. GAMEPOT에 문의 | | `-5` | `transactionId`가 이미 존재하는 경우 | | `-6` | DB 오류. GAMEPOT에 문의 |