- 마지막 업데이트
쿠폰
이해하기
스토브 플랫폼의 쿠폰 서비스를 연동하면, 스토브 파트너스에서 쿠폰을 발행해 게임·웹에서 이용자에게 아이템 등 보상을 지급할 수 있어요.
쿠폰은 사전 등록·콜라보·이벤트 보상, 마케팅 유입·전환 트래킹, CS 수동 보상 등에 활용해 이용자 리텐션을 높이는 데 쓰여요.
쿠폰 팝업 지원 범위 및 노출 위치
ㆍ SDK 팝업 지원: 모바일 게임, 멀티플랫폼(PC+모바일) 게임 (PC 빌드 포함)
ㆍ iOS·PC 전용 게임: SDK 팝업 대신 스토브 웹사이트 쿠폰함·게임 홈페이지에서 등록
ㆍ 노출 위치: CP사(개발사)가 게임 UX에 맞춰 지정 (예: 메인 로비 > 설정 > 쿠폰 등록)
쿠폰 유형과 보상
쿠폰의 종류와 보상 구성을 함께 살펴보면 상황에 맞는 쿠폰을 고를 수 있어요.
상황에 맞는 쿠폰 유형을 먼저 골라보세요.
쿠폰 유형 선택 가이드
이용자가 코드를 직접 입력하나요?
├─ 예 · 1인당 고유 코드 1개 (사전등록·CS·개인 이벤트) → 일반 쿠폰
├─ 예 · 여러 명이 함께 쓰는 공용 코드 1개 (SNS·콜라보) → 대표(공용) 쿠폰
├─ 예 · 사전 등록된 대상만 코드 입력·사용 가능 (베타·등급 전용) → 대상 지정 쿠폰
├─ 아니오 · 특정 이용자 계정에 바로 지급 (VIP·CS·출석) → 계정 지급 쿠폰
└─ 아니오 · 다운로드 받은 이용자 계정에 바로 지급 (현재는 주로 스토어에서 사용) → 다운로드 쿠폰
쿠폰 유형에 따라 발급 방식과 이용자가 쿠폰을 받는 경험이 달라져요.
| 쿠폰 유형 | 구분 | 특징 | 주요 활용 |
|---|---|---|---|
| 일반 쿠폰 | 1 : 1 | 한 코드를 한 사람만 사용, 코드 직접 입력 | 사전 등록·개인 이벤트·CS 보상 |
| 대표(공용) 쿠폰 | 1 : N | 한 코드를 여러 사람이 사용, 공개 코드 입력 | 콜라보·SNS·시즌 이벤트 |
| 계정 지급 쿠폰 | 자동 지급 | 입력 없이 쿠폰함에 자동 적재 | VIP·오류·CS 수동 보상 |
| 대상 지정 쿠폰 | 지정 대상만 | 등록된 대상만 사용 가능 (대상 검증) | 베타 테스터·등급 전용 이벤트 |
| 다운로드 쿠폰 | 스토어 연동 | 스토어에서 다운로드 후 쿠폰함 적재 (추가 연동 필요) ※ CP사가 다운로드 쿠폰함을 직접 구축·연동하면 인게임에서도 사용 가능하나, 현재는 주로 "스토어"에서 사용해요 |
스토어 방문 유도 |
쿠폰 유형이 "누구에게 · 어떻게 나눠줄까"라면, 쿠폰 속성은 "무엇을 줄까"예요.
발행할 때는 유형을 먼저 정하고, 그다음 속성(보상)을 설정하는 순서예요.
| 보상 종류 | 무엇을 주나요 | 특징 / 제약 |
|---|---|---|
| 아이템 쿠폰 | 인게임 아이템·재화 | 회원번호 또는 캐릭터번호 기준으로 지급 |
| 할인 쿠폰 | 결제 시 할인 (정액/정률) | 인게임·스토어 모두 사용 ※ 인게임 할인 쿠폰은 결제창에서 사용 ※ 장바구니/꾸러미 할인 옵션은 스토어 전용 |
| 게임이용권 쿠폰 | 스토어 게임을 무료로 이용할 수 있는 이용권 | 스토어에서만 사용 가능 |
"이럴 땐 이렇게" — 실제로 자주 쓰이는 조합이에요.
이럴 땐 이 조합
· SNS·콜라보로 아이템 뿌리기 → 대표(공용) 쿠폰 + 아이템
· 개인별 아이템 지급 / 사전등록 / CS 보상 → 일반 쿠폰 + 아이템
· 특정 이용자에게 아이템 바로 지급 (VIP·오류 보상) → 계정 지급 쿠폰 + 아이템
· 인게임 결제 할인 이벤트 → 일반 또는 대표(공용) 쿠폰 + 할인 (이용자는 결제창에서 사용)
· 크리에이터·홍보 이용자에게 게임이용권 지급 (체험 제공) → 계정 지급 쿠폰 + 게임이용권
설정별 화면 예시
쿠폰 유형과 세부 설정에 따라 이용자가 인게임에서 보는 화면과 경험이 달라져요.
| 설정 조합 | 이용자 화면 |
|---|---|
| 일반 쿠폰 + 앞자리 고정(Prefix) 사용 | 코드 앞 4자리 고정 (예: FREEXXXXXX) → 브랜드 쿠폰 느낌으로 이벤트·콜라보에 적합 |
| 대표 쿠폰 + 난수 자동생성 | 공개 코드(예: 2350DWG06Z0009S5)를 인게임에 입력, 선착순·기간 제한 설정 가능 |
| 계정 지급 쿠폰 (입력 없음) | 입력 없이 쿠폰함에 자동 적재, 알림·쿠폰함에서 확인 |
쿠폰 발행 흐름
쿠폰을 발행하고 이용자에게 전달되기까지의 전체 흐름이에요.
1단계. 쿠폰 정보 설정
파트너스 [Billing > 쿠폰 관리 > 쿠폰 정보 설정]에서 쿠폰 유형·보상·대표 이미지 등을 입력해요.
ℹ️ 이 단계는 최초 1회만 설정하면 돼요. 한 번 설정해두면 이후 발행할 때마다 다시 할 필요가 없고, 유형·보상 등 설정을 바꾸고 싶을 때만 수정하면 돼요. 실제 쿠폰 발행은 2단계부터 반복돼요.
쿠폰 정보 설정 안내
ㆍ 사용할 쿠폰 유형·속성 설정 (발행 전 필수)
ㆍ 스토브 쿠폰함 사용 Y → 내정보 쿠폰함에 게임명 노출 (그룹별 오름차순)
ㆍ 게임이용권 속성은 스토어 전용
ㆍ 대표 이미지는 정보 설정 메뉴 값이 발행 이미지보다 우선
ㆍ 게임명을 스토브로 선택 시 쿠폰 점검 설정 가능

2단계. 쿠폰 발행
파트너스 [Billing > 쿠폰 관리 > 쿠폰 발행]에서 쿠폰 이름 등 기본 정보와 유형·속성을 설정해요.
쿠폰 정보 (쿠폰명·설명·보상 문구·주의사항)
ㆍ 다국어 제공, 인게임 노출 문구(아이템 보상 문구) 입력
ㆍ 쿠폰 정보 복사: 기존 쿠폰 ID 입력 시 대부분의 발행 정보를 자동으로 불러옴

쿠폰 유형 및 속성
ㆍ 사용 국가 기본값은 전체 (일부 국가만 원하면 별도 설정)
ㆍ 유형·속성은 정보 설정 메뉴 값을 불러옴 (다운로드 쿠폰은 스토어 전용, 속성은 보상 정보 연동 시 사용)
ㆍ 유형에 따라 직접 지정한 커스텀 코드(지정어) 또는 앞자리 고정(Prefix) 사용 선택

아이템 쿠폰 발행
ㆍ 아이템 선택 추가로 최대 50개까지 발행 (출석 보상 등 일괄 발행)
ㆍ 기본은 회원 번호 지급, 캐릭터번호 기준 발행 가능 (대표쿠폰 + 아이템 속성만)

할인 쿠폰 발행
ㆍ 정액·정률 설정 (정액=일부 아이템만, 정률=전체 아이템만)
ㆍ 정액은 달러 기준 자동 계산 (전월 말일 환율 반영)
ㆍ 장바구니·꾸러미 할인은 스토어 전용


할인 비용 분담
ㆍ 할인 비용·제휴사 수수료는 플랫폼·CP사 간 분담 설정 가능
ㆍ 정산에 영향을 주므로 담당자와 협의 필수

3단계. 이용자 전달
이벤트·SNS·CS 등으로 코드를 전달하고, 계정 지급·다운로드 쿠폰은 자동 적재돼요.
이벤트 참여 보상 수령


4단계. 이용자 수령
인게임 쿠폰 입력창에서 등록하거나 쿠폰함에서 자동 확인하면 보상(아이템·할인)이 지급돼요.
인게임 쿠폰 등록 예시


인게임 할인 쿠폰 사용 예시
ㆍ 인게임 할인 쿠폰은 스토어 할인 쿠폰과 달리 결제창에서 사용해요.

플랫폼·채널별 노출 위치
| 플랫폼/채널 | 노출 위치 | 비고 |
|---|---|---|
| 모바일 (Android) | 게임 내 [쿠폰 등록] 버튼 → SDK 쿠폰 팝업 | Android 권장 |
| 모바일 (iOS) | 앱 내 노출 비권장 | 앱 내 입력 UI·외부 웹 연결 시 리젝 사유 가능 (Apple 가이드라인) |
| PC (Windows) | 게임 내 [쿠폰 등록] 버튼 → SDK 팝업 또는 스토브·게임 공홈 | 멀티플랫폼 게임만 SDK 팝업 |
| 스토브 공식 웹사이트 | 내 정보 > 쿠폰함 | 통합 쿠폰 입력, 로그인 필요 |
| 게임 공식 홈페이지 | 자체 UI에서 스토브 쿠폰 API 연동 | API 호출 필요, 디자인 커스터마이징 가능 |
개발하기
모바일 (SDK) - 쿠폰 사용
쿠폰 사용은 SDK가 제공하는 View.useCoupon 한 번의 호출로 끝나요.
SDK가 STOVE ItemBox 서버에 사용 처리를 요청하고, 이후 게임 서버 콜백(아이템 지급)까지 이어지는 흐름을 처리해요.
쿠폰박스 리스트 검색·상세 조회·쿠폰박스 쿠폰 사용은 SDK가 아닌 서버 REST API 영역이라 서버 연동 - 아이템박스(Itembox) 섹션을 참고하세요.
iOS 적용 시 주의
Apple 가이드라인 상 앱 내부 쿠폰 입력 UI 노출은 리젝 사유가 될 수 있어요.
iOS 빌드에서는 인게임 쿠폰 입력 화면을 노출하지 마세요.
사전 준비
- 이용자 로그인이 완료된 상태여야 해요.
- 파트너스에 팝업 정보가 등록되어 있어야 정상 동작해요. (직접 호출 페이지 방식 제외)
알림
파트너스 설정은 퍼블리싱 기술 담당자를 통해 진행해요.
개발 흐름
- 쿠폰 번호 수집 : 게임 내 쿠폰 입력 화면에서 이용자가 입력한 쿠폰 번호를 받아요.
- 쿠폰 사용 호출
:
View.useCoupon(context, code, callback)을 호출하면 SDK가 ItemBox 서버에 사용 처리를 진행해요. - 결과 처리
: 콜백으로 전달된
Result로 성공/실패를 분기해요. : 실패 시OperationUI.HandleResult(result, ...)에 위임하면 SDK 공통 안내 화면이 노출돼요.
트러블슈팅
- ErrorCodes
Domain ErrorCode Description 조치 com.stove.server 100 PC방에서만 사용 가능한 쿠폰 사용 환경 안내 메시지를 노출하고 입력 화면을 유지하세요. com.stove.server 997 Not Verify AccessToken Auth.accessToken을 다시 조회해 재호출하세요. 동일 오류가 지속되면 로그인 흐름으로 유도해 토큰을 재발급받게 하세요.com.stove.server 998 Expired AccessToken 로그인 흐름으로 유도해 토큰을 재발급받게 하세요. com.stove.server 999 System Error — com.stove.server 2605 해당 멤버쉽 계정은 사용할 수 없습니다. — com.stove.server 5031 일일 인증 횟수를 초과하였습니다. 안내 메시지를 노출하고 일정 시간 후 재시도하도록 유도하세요. com.stove.server 5105 잘못된 쿠폰 번호입니다. 쿠폰 번호 재확인 메시지를 노출하고 입력 화면을 초기화하세요. com.stove.server 5125 이미 사용한 쿠폰입니다. 입력 화면을 초기화하고 사용 완료 안내를 노출하세요. com.stove.server 5130 사용 중지된 쿠폰입니다. — com.stove.server 5135 유효기간이 만료된 쿠폰입니다. 입력 화면을 초기화하고 만료 안내를 노출하세요. com.stove.server 5155 해당 쿠폰의 사용 가능 횟수를 초과하였습니다. 입력 화면을 초기화하고 안내 메시지를 노출하세요. com.stove.server 5161 등록 기간이 만료된 쿠폰입니다. — com.stove.server 5162 해당 국가에서 사용할 수 없는 쿠폰입니다. — com.stove.server 5164 해당 월드에서는 사용할 수 없는 쿠폰입니다. — com.stove.server 5165 쿠폰함에서만 사용 가능한 쿠폰입니다. — com.stove.server 5169 해당 쿠폰의 사용 기간이 아닙니다. — com.stove.server 5200 해당 쿠폰에 대한 사용 대상이 아닙니다. — com.stove.server 5202 이미 쿠폰함에 등록된 쿠폰입니다. — com.stove.server 6002 해당 쿠폰번호를 더 이상 사용하실 수 없습니다. — com.stove.server 6026 사용 횟수가 초과 되었습니다. 입력 화면을 초기화하고 안내 메시지를 노출하세요.
이용자 안내가 명확한 케이스
잘못된 쿠폰 번호(5105), 이미 사용한 쿠폰(5125), 만료된 쿠폰(5135), 사용 횟수 초과(5155 / 6026) 등은 인게임 안내 메시지로 노출하세요.
이미 만료/사용 처리된 쿠폰은 재시도가 무의미하니 입력 화면을 초기화하세요.
샘플 코드
public void UseCoupon()
{
/**
* code : 쿠폰 입력 (string)
**/
View.UseCoupon("code", (Result result) =>
{
if (result.IsSuccessful)
{
}
else
{
OperationUI.HandleResult(result, (Result operationResult) =>
{
/** ex) 현재 화면 유지 **/
});
}
});
}
Android는 SDK 제공 입력 UI도 사용 가능해요ViewUI.coupon을 호출하면 스토브 표준 쿠폰 입력 화면이 그대로 뜨고, 이용자가 코드를 입력하면 사용 처리·아이템 지급까지 SDK가 이어서 진행해요.
(Android 전용, iOS 미지원) 자세한 사용법과 샘플 코드는 인게임 기능 — 쿠폰 사용 (Android만 가능)을 참고하세요.
PC (PCSDK) - 쿠폰 팝업
PCSDK ViewSDK가 제공하는 쿠폰 팝업 API를 사용하면 게임 클라이언트 안에서 스토브 쿠폰 입력 화면을 띄울 수 있어요. 이용자가 팝업에서 직접 쿠폰 번호를 입력하면 스토브가 사용 처리·아이템 지급 흐름을 진행해요.
PC SDK 쿠폰 팝업은 멀티플랫폼(PC + 모바일) 게임에서만 사용 가능해요.
파트너스 > Launching > 서비스 연동에서 모바일 게임으로 등록 및 멀티플랫폼 사용으로 지정된 게임이어야 호출이 정상 동작해요.
단일 플랫폼(PC 전용) 게임이라면 게임에서 자체 쿠폰 입력 UI를 만들고 쿠폰 등록 API를 직접 호출하는 흐름으로 대체해야 해요.
사전 준비
- BaseSDK 초기화(
Base_Initialize또는Base_InitializeEx)가 완료된 후 ViewSDK를 초기화(View_Initialize)하면 쿠폰 팝업 API를 사용할 수 있어요. - 게임 루프에서
Base_RunCallback()이 주기적으로 호출돼야 비동기 콜백이 동작해요. - 내장 WebView(
WebViewMode::INTERNAL) 팝업을 사용한다면View_Initialize대신View_InitializeWithWndInfo(mainWndHandle)에 게임 메인HWND를 전달해 초기화해요.
개발 흐름
- 초기화
:
Base_Initialize(또는Base_InitializeEx)로 BaseSDK 초기화를 완료한 뒤View_Initialize()를 호출해요. 내장 WebView 팝업을 사용한다면View_Initialize대신View_InitializeWithWndInfo(mainWndHandle)에 게임 메인HWND를 전달해 초기화해요. - 쿠폰 팝업 호출
: 이용자가 쿠폰 입력 UI를 요청한 시점에
View_CouponPopup또는View_CouponPopupEx를 호출해요.- C/C++ :
View_CouponPopup(mode, onFinished)를 호출해요. 팝업 종료 이벤트까지 받으려면View_CouponPopupEx(mode, onFinished, onDestroy)를 사용해요.mode는WebViewMode값이에요. - C# :
View_CouponPopup(mode, onFinished)또는View_CouponPopupEx(mode, onFinished, onDestroy)를 호출해요. onFinished는 팝업 표시 완료 시점,onDestroy는 팝업의 네이티브 리소스가 완전히 정리된 시점에 호출돼요.
- C/C++ :
- WebViewMode 선택
:
mode에WebViewMode::EXTERNAL(외부 브라우저) 또는WebViewMode::INTERNAL(SDK 내장 WebView) 중 게임 환경에 맞는 모드를 설정해요. : Exclusive fullscreen 모드 게임은 반드시WebViewMode::EXTERNAL을 사용해야 해요. - 종료 처리
:
onDestroy콜백을 받아 게임 흐름을 재개해요. 쿠폰 사용 후 인벤토리 새로고침이 필요하면 이 콜백 이후에 수행해요. - 정리
: 쿠폰 팝업 사용을 마치면
View_UnInitialize()로 ViewSDK를 정리하고, 게임 종료 직전Base_UnInitialize()를 호출해요.
트러블슈팅
| 상황 | 원인 | 해결 방법 |
|---|---|---|
| 쿠폰 팝업을 호출했는데 아무 반응이 없어요 | 쿠폰 팝업은 멀티플랫폼(PC + 모바일) 게임 전용 기능이에요. 파트너스에 단일 플랫폼으로 등록된 게임에서 호출하면 동작하지 않아요. | 파트너스에서 게임이 멀티플랫폼으로 등록돼 있는지 확인해야 해요. 단일 플랫폼 게임이라면 게임 자체 쿠폰 입력 화면을 띄우는 흐름으로 대체하면 문제없어요. |
| 쿠폰 팝업이 게임 창 뒤에 가려져 보이지 않아요 | View_Initialize로 부모 창 핸들 없이 초기화하면 팝업이 별도 윈도우로 떠서 게임 창보다 뒤로 갈 수 있어요. Exclusive fullscreen 모드에서는 내장 WebView(WebViewMode::INTERNAL) 모드 팝업이 Windows API 한계로 게임 창 위로 올라오지 못해요. | View_InitializeWithWndInfo(mainWndHandle)에 게임의 메인 HWND를 전달해 초기화해야 해요. Exclusive fullscreen 모드 게임이라면 팝업을 반드시 외부 브라우저(WebViewMode::EXTERNAL) 모드로 호출하면 문제없어요. |
| 팝업 결과 콜백이 호출되지 않아요 | 메인 루프에서 Base_RunCallback()을 호출하지 않으면 SDK가 결과를 게임에 전달할 시점을 잡지 못해요. | 메인 루프에서 매 프레임 또는 일정 주기로 Base_RunCallback()을 호출해야 해요. |
샘플 코드
#include "ViewSDK.h"
using namespace Stove::PCSDK;
using namespace Stove::PCSDK::Base;
using namespace Stove::PCSDK::View;
// 1) ViewSDK 초기화 (Base_Initialize 완료 이후)
auto initResult = View_Initialize();
if (!initResult.IsSuccessful())
{
return;
}
// 2) 쿠폰 팝업 (Ex 버전: 종료 이벤트 수신)
View_CouponPopupEx(
WebViewMode::EXTERNAL,
[](CallbackResult openResult)
{
if (openResult.GetResult().IsSuccessful())
{
// 팝업 열림 처리
}
},
[](CallbackResult destroyResult)
{
// 팝업 종료 시 게임 흐름 재개
}
);
// 3) 종료 시 정리
View_UnInitialize();
서버 연동 - 아이템박스(Itembox)
이용자가 이벤트에 참여한 경우, 게임 서버는 보상 지급 요청을 수신하고 처리할 수 있도록 연동되어야 해요. 보상 지급 요청은 스토브의 아이템박스(ItemBox) 서버로부터 실시간 Callback 형태의 알림(Notification)으로 전달되며, 게임 서버는 해당 요청을 수신하여 적절한 지급 보상을 처리해주세요.
사전 준비
아래 항목이 사전에 파트너스를 통해 등록되어야 해요
- 아이템박스 연동타입 선택:
"Stove 서버에서 게임서버로 호출 (Transaction Id 포함)" 선택.
위치:
파트너스 > Launching > 서비스 연동 > SDK 실행 환경 설정
- 기본 월드 등록:
월드가 필요없는 게임이라도 기본 월드를 지정해야 해요. (예: world_kr 등).
위치:
파트너스 > Launching > SDK 실행 환경(MO) > 월드/채널 정보 탭
- 콜백 서버 URL 등록:
아이템 지급 요청을 수신할 콜백 서버 URL을 등록해요.
위치:
파트너스 > GM > 서비스 연동 > 아이템박스 연동 환경(mo)
Loop back URL 설정 방법
콜백 서버(URL)는 CP사에서 준비되어야 하지만, 준비 전이고 파트너스 테스트가 필요하면 아래 Loop back URL 설정으로 가능해요.
Sandbox:http://i-api.gate8.com/itembox/v2/item/inboundReward
ItemBox와 통신을 위해 ACL 작업이 필요해요. 스토브 플랫폼은 별도 서비스 오픈 정책이 필요하지 않으며, 게임서버만 필시 Inbound 오픈 작업을 해주세요.
아이템지급 API
CP사에서 제공되어야 하는 API 연동 규격에 대해 설명해요.
API 연동 정보
POST {파트너스 등록 URL 정보}
Content-Type: application/json
Request
- Body
| Name | Type | Required | Example | Description |
|---|---|---|---|---|
| msg_id | String | Y | baf84a85-abcc-49fc-ba85-54b7c38331e9 | msg ID는 아이템박스에서 게임서버로 발송될 때 마다 생성 (발송 건 별로 유니크) |
| msg | String | Y | "aWLoj83ZxAICnRfjA+ayhd7nn1V/Fh/3I....3Of7N0s45uDN6DJjAjwqc=" | 암호화 전달 복호화 필요함 |
| timestamp | Long | Y | 1480512039 | Msg의 Timestamp (1970년 1월1일 부터 현재 시간까지의 초) |
- 암호화 전 msg payload
| Name | Type | Required | Example | Description |
|---|---|---|---|---|
| game_id | String | Y | 스토브_GAME | 게임 아이디 |
| world_id | String | Y | world_global | 월드 아이디 |
| member_no | Long | Y | 503510 | 플랫폼 이용자의 guid (레거시 게임의 경우 member_no) |
| nickname_no | Long | Y | 1603829809 | 플랫폼 이용자의 nickname_no |
| item_id | String | Y | ITEM_K001 | 게임 아이템 아이디 |
| transaction_id | String | Y | 6b384ab9d65f422db0abf186a7f79311 | transaction id(트랜젝션 키 값, 게임서버에서 중복 지급 판단 여부) |
| service_type | String | Y | COUPON | 서비스타입 "COUPON" : 쿠폰 사용으로 발송 "EVENT" : 이벤트를 통한 발송 |
| item_amt | Integer | Y | 3 | 아이템 수량 |
| reward_msg | String | N | 사전등록 이벤트 참여 보상입니다 | 아이템 지급 시 이용자에게 보여줄 메시지 (Coupon 생성 시, 등록하는 내용) |
| end_dt | String | N | 20150116 | 아이템 지급 만료일 (DateFormat: "yyyyMMdd", Default: 요청 시간으로부터 1달 뒤) |
| payload | Object | N | { "item_period" : 0 } | 아이템박스에서는 CP사에서 필요로 하는 데이터를 해당 json object로 전달 (예를 들어 : 기간제 아이템인 경우 영구, 7일, 30일, 60일이 있다고 하면 |
Response
게임서버는 ItemBox Call API에 대한 처리 결과를 하단에 명시된 return code를 활용하여 응답(application/json 형식)해야 해요.
Content-Type : application/json
- Body
| Name | Type | Required | Example | Description |
|---|---|---|---|---|
| return_code | Integer | Y | 0 | 처리 결과 코드 |
| return_message | String | Y | OK | 처리 결과 메시지 - 50자 이내 결과 식별 가능한 메세지 전달 |
- Return Code
| Return code | HTTP Status Code | Description | 아이템박스 동작 및 재처리 여부 |
|---|---|---|---|
| 0 | 200 ok | 지급 성공 (이미 지급한 transaction_id일 경우도 동일) | 지급 성공 |
| 40001 | 200 ok | 서버 내부 오류 (API 재호출 시 아이템지급 가능한 케이스의 경우 사용) | 지급 실패 - 재처리 진행 |
| 40002 | 200 ok | 요청한 아이템 없음 | 지급 실패 - 재처리 미진행 |
| 40003 | 200 ok | 이용자 정보 불일치 | 지급 실패 - 재처리 미진행 |
| 40004 | 200 ok | 메세지 복호화 실패 | 지급 실패 - 재처리 미진행 |
Sample
- Request
- 암호화하지 않은 상태의 Request Body입니다. 실제 게임 서버로 전달 시 "msg" json value 부분이 암호화되어 전송됩니다.
- 복호화 순서는 전달받은 msg data를 BASE64 Decoding 처리를 하고 AES256 Decryption처리를 하셔야 합니다.
json{ "msg_id": "baf84a85-abcc-49fc-ba85-54b7c38331e9", "msg" : { "game_id":"STOVE_GAME", "world_id":"world_global", "member_no": 503510, "nickname_no": 1603829809, "item_id": "ITEM_K001", "transaction_id":"6b384ab9d65f422db0abf186a7f79311", "service_type":"COUPON", "item_amt":3, "reward_msg":"사전등록 이벤트 참여 보상입니다", "end_dt":"20150116", "payload": { "item_period":0 } }, "timestamp": 1480512039 } - 암호화하지 않은 상태의 Request Body입니다. 실제 게임 서버로 전달 시 "msg" json value 부분이 암호화되어 전송됩니다.
- Responsejson
- Content-Type : application/json { "return_code": 0, "return_message": "성공했습니다." }
복호화(decrypt) 과정
- 아이템박스 시스템과 게임 서버 간 요청에 대한 안정성과 유효성 검증을 위해 전송 시 일부 데이터(Json Data - msg values)를 암호화(Encrypted)하여 전송해요. 메시지 본문을 확인하기 위해서는 복호화(decrypt) 작업이 필요해요.
- 암호화(encrypt) 방식: AES256
- 복호화(decrypt) 키: Client Secret Key
- Transformation: AES/CBC/PKCS5Padding
- IV Spec: 'Client Secret Key' 값의 앞에서 16 자리
- 복호화 순서: 전달받은 msg data를 BASE64 Decoding 처리를 하고 AES256 Decryption 처리해야 해요.
- Secret Key 위치:
파트너스 > Launching > 서비스 연동 > 플랫폼 연동 키 > 모바일 서비스 연동 키 > 클라이언트 Secret Key
중복 지급 방어 처리
transaction_id는 지급 요청이 발생하면 자동 생성되는 유니크한 값으로 게임 서버와 ItemBox 간의 아이템의 지급 누락 및
중복 지급 방지 목적에 사용돼요.- 게임 서버에서는 보상 지급에 성공한 경우
transaction_id를 게임 내 저장하여 중복 지급이 되지 않도록 관리해야 해요. - 만약 ItemBox 서버에서 지급 완료된
transaction_id가 요청되면 게임 서버에서는 response Data "return_code"를 "0"으로 보내주면 돼요.
실패건에 대한 자동 재요청 발생
- STOVE ItemBox 서비스는 네트워크 장애/서버 오류 등으로 게임 서버 전송이 실패되면 실패 건에 대한 재전송(retry)을
매 10분당 1번씩 최대 5회 수행해요. 이 경우 "msg" json의 "transaction_id"는 실패 건에 대한 구분키로 사용되므로 게임 서버에서
"transaction_id"로 지급이 성공하여 처리한 건에 대해서는 저장하고 있어야 해요. - 만약 게임 서버에서 지급 처리되었으나 회신 누락이나, 네트워크 오류로 인해 아이템박스 플랫폼에서 실패 처리된 경우,
재 지급 요청이 발생할 수 있어요.
트러블슈팅
| 상황 | 원인 | 해결 방법 |
|---|---|---|
| 아이템 지급 API가 미호출돼요 | 모든 사전 준비단계가 정상적으로 수행되지 않으면 발생해요 | 파트너스를 통해 사전 준비 설정이 올바르게 수행되었는지 확인하세요. CP사 서버 인프라단에서 외부로부터의 API 호출이 차단되진 않았는지도 확인하세요. |
| 메세지 복호화를 실패해요 | 복호화 과정이 정상적으로 수행되지 않으면 발생해요. | 가이드, 복호화 과정 챕터를 확인하여 정상적인 복호화 key를 사용하여 연동하세요 |