게임에 스토어를 통합

관리자 페이지에서 상품(가상 아이템, 인게임 재화, 번들, 키)을 생성하고 구성한 후 게임에 인게임 스토어를 추가하기:

  1. 아이템 카탈로그 표시를 구현합니다.
  2. 아이템 판매 로직을 구현합니다.

아이템 카탈로그 표시

알림
엑솔라 API를 호출하기 위해 게임 엔진 및 플랫폼에 이미 만들어진 SDK 메소드를 사용할 수 있습니다.

인게임 스토어 및 직접 판매 API 호출을 통해 아이템 카탈로그 표시 구현:

작업API
스토어에 추가된 가상 아이템의 전체 목록 표시Get virtual items list
클라이언트 측에서 판매 가능한 가상 아이템 그룹 목록 표시Get item groups list
클라이언트 측 스토어에서 판매 가능한 인게임 재화 목록 가져오기Get virtual currency list
클라이언트 측 스토어에 추가된 인게임 재화 패키지의 전체 목록 표시Get virtual currency package list
스토어에 추가된 전체 세트 목록 표시Get list of bundles
알림
카탈로그 메소드 가져오기는 요청 시점에 스토어에 표시된 아이템을 반환합니다. 아직 표시 기간이 시작되지 않았거나 이미 만료된 아이템에 대한 정보를 가져오려면 카탈로그 요청 시 show_inactive_time_limited_items 매개 변수를 1 값으로 전달해야 합니다.

아이템 판매

다음과 같은 방식으로 아이템을 판매할 수 있습니다.

  1. 하나의 아이템을 빠르게 구매. 이 경우 하나의 SKU를 수량에 상관없이 판매할 수 있습니다(예: 동일한 물약100개 또는 인게임 재화 사용자 정의 수량).
  2. 장바구니 구매. 이 경우 플레이어가 장바구니를 미리 채울 수 있으며, 아이템을 추가 또는 제거하거나, 수량을 변경할 수 있습니다.

빠른 구매

  1. Create order with specified item API를 호출합니다. 결제 UI를 열기 위한 토큰이 응답으로 전달됩니다.
  2. 수신한 결제 토큰을 사용하여 결제 UI를 엽니다.
알림
할인 정보(개인 설정 또는 구매 관련)는 결재 UI에서만 사용자에게 제공됩니다. 프로모션 코드 사용은 제공되지 않습니다.
알림
엑솔라 API를 호출하기 위해 게임 엔진 및 플랫폼에 이미 만들어진 SDK 메소드를 사용할 수 있습니다.

장바구니 구매

로직 구현:
  1. 장바구니 설정 및 토큰 받기:
  2. 결제 UI를 엽니다.

클라이언트에서 장바구니 및 구매 설정

아이템을 추가하고 제거하는 논리를 직접 구현합니다. 또한, 장바구니 설정을 위해 API를 호출하기 전에 구매에 적용할 프로모션에 대한 정보가 없다는 점을 고려해야 합니다. 이는 추가된 보너스 아이템의 총 비용 및 세부 정보를 알 수 없음을 의미합니다.

  1. 플레이어가 장바구니를 채운 후 아이템 API로 Fill cart with items를 호출합니다. 선택한 아이템에 대한 현재 정보(할인 전후 가격, 보너스 아이템)가 응답으로 전달됩니다.
  2. Create order with all items from current cart API를 호출합니다. 주문 ID와 결제 토큰이 응답으로 전달됩니다. 생성된 주문이 새 주문 상태를 수신합니다.
  3. 결제 UI를 엽니다.
알림
엑솔라 API를 호출하기 위해 게임 엔진 및 플랫폼에 이미 만들어진 SDK 메소드를 사용할 수 있습니다.

서버에서 장바구니 및 구매 설정

이 변형은 장바구니에 대한 각 변경에 API 호출이 수반되어야 하기 때문에 장바구니 설정에 시간이 더 오래 걸릴 수 있습니다.

다음 단계 완료 필요.

  1. 장바구니 변경:

알림
장바구니의 현재 상태를 가져오려면 Get current user’s cart API를 호출하세요.
  1. Create order with all items from the current cart API를 호출합니다. 주문 ID 및 결제 토큰이 응답으로 전달됩니다. 생성된 주문은 주문 상태를 수신합니다.
  2. 결제 UI를 엽니다.

결제 인터페이스 열기

아이템 지불을 위해 결제 UI를 엽니다. 결제 UI를 열기 위한 토큰이 Create order with all items from current cart API에 대한 응답으로 전달됩니다.

다음 방법 중 하나로 결제 UI 열기를 구현합니다.

결제 처리 테스트

샌드박스 모드에서 결제 흐름을 테스트할 수 있습니다. 테스트 은행 카드와 모든 계좌를 사용할 수 있습니다.

알림

실제 첫 지불 이후, 엄격한 샌드박스 지불 정책이 적용됩니다. 샌드박스 모드에서의 지불은 관리자 페이지 > 회사 설정 > 사용자에서 지정된 사용자에 한해서만 가능합니다.

다이렉트 링크를 통해 실제 통화로 인게임 재화와 아이템을 구매하는 기능은 엑솔라와 라이선스 계약을 체결한 후에만 가능합니다. 이렇게 하려면 관리자 페이지에서 계약 및 세금 > 계약 섹션으로 이동하여 계약 양식을 작성한 후 확인을 기다립니다. 계약을 검토하는 데에는 영업일 기준 최대 3일이 소요될 수 있습니다.

샌드박스 모드를 활성화/비활성화하려면 빠른 구매장바구니 구매 요청에서 sandbox 매개변수의 값을 변경해야 합니다. 샌드박스 모드는 기본값으로 꺼져 있습니다.

사용자 주문 상태 가져오기

사용자 주문 상태를 가져오는 방법:

  1. 웹훅을 통해 서버 측에서.
  2. WebSocket API 또는 인게임 스토어 및 직접 판매 API를 통해 클라이언트 측에서.

웹훅을 통해 서버 측에서 사용자 주문 상태 가져오기

서버에서 웹훅을 구성한 후 이를 사용하여 주문 세부 정보 및 상태를 가져올 수 있습니다.

WebSocket API 또는 인게임 스토어 및 직접 판매 API를 통해 클라이언트 측에서 사용자 주문 상태 가져오기

서버가 없거나 클라이언트 측에서 구매 처리 로직을 구현하는 경우 사용할 수 있는 방법:
  1. WebSocket API.
  2. Short-polling.

WebSocket API를 사용하여 클라이언트 측에서 주문 상태 가져오기

이 솔루션은 websockets를 사용하여 주문 상태를 가져옵니다. 이때 주문에 대한 자세한 정보는 가져오지 않습니다. 이 메소드는 클라이언트(예: 웹사이트 또는 모바일 애플리케이션)와 엑솔라 서버 사이에 단 하나의 연결만 생성하므로 클라이언트나 서버에 추가 부하가 발생하지 않아 권장됩니다.

알림
웹훅을 처리할 자체 서버가 없거나 클라이언트 측 구매 처리 로직을 사용하는 경우, Centrifuge SDK를 사용하는 WebSocket API를 사용할 수 있습니다.

다음 단계를 완료해 주세요.

  1. 엑솔라 웹 소켓 서버와 클라이언트가 주문 상태 메시지를 식별할 수 있도록 연결을 생성합니다.

Copy
Full screen
Small screen
const client = new Centrifuge(
connectionURL,
{
data: {
  user_external_id: user_external_id,
  auth: auth,
  project_id: project_id
}
}
)
connectionURL - wss://ws-store.xsolla.com/connection/websocket
auth - user JWT token
  1. 주문 상태에 대한 새 메시지를 받으려면 client.on 함수를 사용하여 이벤트를 구독해 주세요.
Copy
Full screen
Small screen
client.on('publication', (ctx) => {
   //handle the status
});
  1. 실제 연결 설정 트리거:
Copy
Full screen
Small screen
client.connect()
  1. 주문 상태의 변경 사항 기록을 받으려면 API 기록 메소드를 연결합니다.
Copy
Full screen
Small screen
client.on('subscribed', function (ctx) {
   client.history(ctx.channel, { limit: -1, since: { offset: 0 }, reverse: false }).then(function (resp) {
resp.publications.forEach((ctx) => {
   /handle the status
});

   }, function (err) {
       //handle the status
   });
});

메시지 본문 예시:

Copy
Full screen
Small screen
{
order_id: 59614241,
status: 'new'
}

다음 주문 상태가 가능합니다.

  • New - 주문이 생성되었지만 지불되지 않음
  • Paid - 주문 지불 완료
  • Done - 주문 전달이 완료됨(모든 영수증 전송 완료, 엑솔라 및 외부 플랫폼 등에서 전달됨)
  • Canceled - 주문이 취소되었으며 사용자에게 환불이 완료됨

웹 소켓을 통한 응답에 필요한 시간은 5분입니다. 이후에 또는 웹 소켓에 문제가 있는 경우 쇼트 폴링을 사용하는 것이 좋습니다.

쇼트 폴링

상태로 전환한 후 주문 아이템에 대한 자세한 정보를 가져오려면 주문 가져오기 API를 호출하세요.
알림
정기 주문 상태 폴(주문 상태 및 주문 정보를 수신하는 간단한 HTTP 요청)을 사용합니다. 요청 사이에 권장되는 지연 시간은 3초입니다.
진행률
의견을 보내 주셔서 감사드립니다!
마지막 업데이트: 2024년 2월 21일

오자 또는 기타 텍스트 오류를 찾으셨나요? 텍스트를 선택하고 컨트롤+엔터를 누르세요.

문제 보고
콘텐츠를 항상 검토합니다. 여러분의 피드백은 콘텐츠를 개선에 도움이 됩니다.
후속 조치를 위해 이메일을 제공해 주세요
의견을 보내 주셔서 감사드립니다!