게임 키 판매 설정
다이텍트 링크, 스토어 UI 혹은 위젯을 통해 게임 키를 판매할 수 있습니다.
엑솔라와 라이선스 계약을 체결한 이후에만 게임 키를 실제 화폐로 판매할 수 있습니다. 이렇게 하려면 관리자 페이지에서 계약 및 세금 > 계약 > 라이선스 계약 섹션으로 이동하여 계약 양식을 작성한 후 승인을 기다리십시오. 계약 검토에는 영업일 기준 최대 3일이 소요될 수 있습니다.
| 아이템 | 판매 방식 |
|---|---|
| 게임(게임 키) 사본 1개. | 다이렉트 링크, 위젯 또는 스토어 인터페이스. 스토어 인터페이스를 통해 판매하는 경우에는 장바구니를 생성하지 않고 빠른 구매 메서드를 사용합니다. |
| 게임(게임 키) 또는 장바구니에 담긴 여러 게임의 사본 여러 개. | 스토어 인터페이스. 웹 사이트 빌더를 사용하거나 Shop Builder API를 연동합니다. |
인증된 사용자와 인증되지 않은 사용자에게 게임 키를 판매할 수 있습니다.
인증을 통해 할 수 있는 작업:
- 사용자에 대한 게임 키 판매 제한 설정
- 상품 카탈로그 및 프로모션 제안 개인 설정
- 자격 시스템 사용
- 엑솔라 결제 인터페이스에 사용자 데이터 저장
로그인 상품 또는 자체 인증 시스템을 사용하여 사용자를 인증할 수 있습니다. 자세한 설정 정보는 이 지침에서 확인할 수 있습니다.
다이렉트 링크로 판매
게임 키는 결제 UI를 여는 직접 링크를 통해 판매할 수 있으며, 형식은 다음과 같습니다:
1https://purchase.xsolla.com/pages/buy?type={YOUR-ITEM-TYPE}&project_id={YOUR_PROJECT_ID}&sku={YOUR-ITEM-SKU}
메인 쿼리 매개 변수외에, 결제 인터페이스 사용자 정의 및 인증 사용자에게 판매용으로 매개 변수를 전달할 수 있습니다.
필수 매개 변수
이 링크에 다음 데이터를 추가하십시오:
YOUR-ITEM-TYPE- 아이템 유형. 가능한 값:game- 게임 키 패키지.game_key- 특정 플랫폼용 게임 키 패키지.bundle- 게임 키 패키지와 번들.
YOUR-PROJECT-ID- 프로젝트 이름 바로 옆에 있는 관리자 페이지에서 찾을 수 있는 프로젝트 ID.YOUR-ITEM-SKU- 게임 키 패키지 SKU, 예:order456- 특정 플랫폼이 없는 SKU.pre.order123_steam- 특정 플랫폼이 있는 SKU.
플랫폼별 게임 키 패키지를 사용하는 것이 좋습니다. 이는 키 사용 또는 활성화 시 호환성 문제를 방지하는 데 도움이 됩니다. 모든 경우에 플랫폼별 접미사를 SKU에 추가해야 합니다. 키 패키지 생성 방식에 따라 자동 또는 수동으로 추가해야 합니다:
관리자 페이지에서 키 패키지를 생성하면 시스템이 자동으로 언더스코어(예:
_steam,_playstation)와 함께 플랫폼별 접미사를 입력한 SKU에 추가합니다.API 호출을 사용하여 플랫폼별 키 패키지를 생성할 경우, 플랫폼 접미사는 소문자와 대문자 라틴 알파벳 문자, 마침표, 대시, 밑줄만 포함하는 형식으로 지정할 수 있습니다.
지원되는 엑솔라 플랫폼 목록 및 해당 접미사 예시:
| Name | SKU 접미사 예시 |
|---|---|
| Steam | _steam |
| PlayStation | _playstation |
| Xbox | _xbox |
| Uplay | _uplay |
| Origin | _origin |
| DRM Free | _drmfree |
| GOG | _gog |
| Epic Games | _epicgames |
| Nintendo Switch eShop | _nintendo_eshop |
| Discord Game 스토어 | _discord_game_store |
| Oculus | _oculus |
| Viveport | _viveport |
| Google Stadia | _stadia |
| MY.GAMES 스토어 | _my_game |
링크가 정상적으로 작동하도록 보장하려면 게임 목록 가져오기 API 호출을 사용하여 정확한 SKU를 조회한 후, SKU 값으로 결제 링크에 포함시키면 됩니다. 아이템 SKU는 items.unit_items.sku 매개 변수로 반환됩니다(일반적으로 이 SKU는 game_key_sku_drm_sku 형식을 따릅니다.).
Steam에서 게임을 판매하기 위한 예시 URL:
1https://purchase.xsolla.com/pages/buy?type=game_key&project;_id=123456&sku;=pre.order123_steam
결제 UI 사용자 정의
결제 UI를 게임 스타일과 일치시키고, 페이 스테이션 맞춤화 방법 안내서에 설명된 바와 같이, 테마, 크기 및 기타 UI 매개 변수를 구성하십시오. ui_settings 매개 변수를 URL에 추가하고 값으로 Base64 인코딩을 사용하여 settings.ui JSON 개체를 전달하십시오.
사용자 정의 테마로 결제 UI를 열기 위한 예시 URL:
1https://purchase.xsolla.com/pages/buy?type={YOUR-ITEM-TYPE}&project_id={YOUR_PROJECT_ID}&sku={YOUR-ITEM-SKU}&ui_settings=ewoJCQkic2l6ZSI6ICJzbWFsbCIsCgkJCSJ0aGVtZSI6ICJkYXJrIgoJCX0=
인증 사용자에게 판매
인증된 사용자에게 키를 판매하려면 xsolla_login_token 매개 변수에 사용자 액세스 토큰을 전달하십시오. 이 토큰은 선택한 인증 메서드에 따라 달라집니다.
토큰으로 결제 UI를 열기 위한 예시 URL:
1https://purchase.xsolla.com/pages/buy?type={YOUR-ITEM-TYPE}&project_id={YOUR_PROJECT_ID}&sku={YOUR_ITEM_SKU}&xsolla_login_token={ACCESS_TOKEN}
결제 테스트
샌드박스 모드에서 결제 절차를 테스트하려면 mode=sandbox 매개 변수를 URL에 추가하십시오. 테스트 은행 카드를 사용하여 거래를 완료할 수 있습니다.
샌드박스 모드에서 결제 UI를 열기 위한 예시 URL:
1https://purchase.xsolla.com/pages/buy?type={YOUR-ITEM-TYPE}&project_id={YOUR_PROJECT_ID}&sku={YOUR-ITEM-SKU}&mode=sandbox
스토어 UI를 통해 판매
스토어 인터페이스를 통해 게임 키를 판매할 수 있습니다. 스토어 생성 방법:
- 웹 사이트 빌더.
- 를 사용하여 자체 스토어 버전을 생성하고 Shop Builder API를 통합합니다.
Shop Builder API를 사용하여 게임 키 패키지를 판매하는 방법:
- 카탈로그를 표시하려면 게임 목록 가져오기 메서드를 사용합니다.
게임 키 구매 구현 방법:
- 하나의 키만 빠르게 구매하는 경우 지정된 아이템으로 주문 생성 메서드를 사용합니다. 이 메서드에 대한 응답으로 결제 인터페이스를 여는 데 사용해야 하는 토큰을 받게 됩니다.
- 여러 개의 게임 키를 구매하는 경우 다음과 같은 관리 메서드를 사용합니다.
- 현재 장바구니의 장바구니 아이템 업데이트는 게임 키를 장바구니에 추가합니다.
- 현재 사용자의 장바구니 가져오기는 장바구니에서 게임 키 목록을 가져옵니다.
- 현재 장바구니의 모든 아이템으로 주문 생성은 장바구니에 있는 게임 키의 비용을 지불합니다.이 메서드에 대한 응답으로 결제 인터페이스를 여는 데 사용해야 하는 토큰을 받게 됩니다.
items.unit_items.sku 매개 변수 값을 게임 목록 가져오기로 전달합니다.위젯으로 판매
페이지에 위젯을 추가하여 게임 키를 판매하고 사용자 정의할 수 있습니다. 위젯 코드를 복사하려면 관리자 페이지에서 키 패키지 생성한 후 위젯 사용자 정의 섹션으로 이동합니다.
게임이 단일 플랫폼에서 판매되는 경우 해당 플랫폼에 맞는 게임 가격이 위젯에 표시됩니다.
예시: 지금 $10에 구매하세요.
게임이 여러 플랫폼에서 판매되는 경우 플랫폼 중에서 가장 낮은 가격이 위젯에 표시됩니다.
예시: 10달러부터 구입할 수 있어요.
주문 생성 창에서 사용자가 모든 플랫폼의 가격을 확인하고 선택할 수 있습니다.
또한 drm 매개 변수에서 플랫폼 SKU를 지정하여 위젯에 특정 플랫폼의 가격을 표시할 수도 있습니다.

위젯 코드 예시:
- html
1<div id="xsolla-buy-button-widget"></div>
2
3<script>
4 var options = {
5 project_id: "101010",
6 sku: "my_key",
7 user: {
8 auth: "9qs9VyCIQQXBlzJQcfETIKWZDvhi4Sz1"
9 },
10 drm: "steam",
11 item_type: "unit",
12 api_settings: {
13 sandbox: true
14 },
15 widget_ui: {
16 target_element: "#xsolla-buy-button-widget",
17 theme: {
18 foreground: "green",
19 background: "light"
20 }
21 },
22 payment_widget_ui: {
23 lightbox: {
24 height: "700px",
25 spinner: "round"
26 }
27 }
28 };
29
30 var s = document.createElement("script");
31 s.type = "text/javascript";
32 s.async = true;
33 s.src = "https://cdn.xsolla.net/embed/buy-button/3.1.8/widget.min.js";
34 s.addEventListener("load", function () {
35 var widgetInstance = XBuyButtonWidget.create(options);
36 });
37 document.getElementsByTagName("head")[0].appendChild(s);
38</script>
39
40<style>
41 #xsolla-buy-button-widget {
42 /* place code for button positioning here */
43 margin: 10px;
44 }
45
46 /* Styles the button itself */
47 .x-buy-button-widget.x-buy-button-widget__tiny .x-buy-button-widget-payment-button {
48 background-color: #ff005b;
49 color: black;
50 }
51</style>
위젯 매개 변수
| 매개 변수 | 유형 | 설명 |
|---|---|---|
project_id | integer | 게임 키 또는 게임 키가 포함된 번들, 인게임 아이템 또는 아이템이 포함된 번들이 업로드되는 프로젝트의 ID입니다. |
item_type | string | 아이템 유형. virtual_good, virtual_currency, game_key, unit 값을 사용할 수 있음. unit 유형은 게임을 배포할 플랫폼이 여러 개일 때 사용. |
sku | string | 고유한 아이템 ID. |
drm | string | 배포 플랫폼 SKU(예: steam). 특정 플랫폼의 가격 표시 허용. |
api_settings | object | 환경 및 호스트 구성 설정:
|
user | object | 사용자 데이터가 있는 개체입니다. |
user.auth | string | 사용자 인증 토큰: JSON 웹 토큰 또는 페이 스테이션 액세스 토큰. |
user.locale | string | 사용자 로케일. 버튼 텍스트 및 결제 인터페이스의 언어를 결정. ISO_639-1에 해당하는 두 글자 언어 코드 사용. |
widget_ui.theme | object | 위젯의 색상 테마로, 위젯의 모양을 결정. {foreground:[‘blue’,‘red’,‘green’,‘gold’], background:[’light’,‘dark’]}의 값을 사용할 수 있음 |
widget_ui.template | string | 템플릿. 사용 가능한 값:
|
widget_ui.target_element | string | 위젯이 렌더링되어야 하는 페이지의 구성 요소(jQuery 선택기를 사용해야 함, 예: #widget-example). 필수 |
결제 인터페이스의 모양을 결정하는 매개 변수
| 매개 변수 | 유형 | 설명 |
|---|---|---|
payment_ui | object | 결제 인터페이스 표시 매개 변수. |
payment_widget_ui | object | 결제 인터페이스의 모양을 결정하는 매개 변수가 있는 개체. |
payment_widget_ui.lightbox | object | 결제 인터페이스가 열리는 모달 창에 대한 옵션이 있는 개체. |
payment_widget_ui.lightbox.width | string | Lightbox 프레임 높이입니다. null인 경우, 페이 스테이션 높이에 따라 달라집니다. 기본값은 null입니다. |
payment_widget_ui.lightbox.height | string | Lightbox 프레임 높이입니다.null인 경우, 페이 스테이션 높이에 따라 달라집니다. 기본값은 100%입니다. |
payment_widget_ui.lightbox.zIndex | integer | 속성에 의해 수직 스태킹 순서가 제어됩니다. 기본값은 1000입니다. |
payment_widget_ui.lightbox.overlayOpacity | integer | 위젯 배경의 불투명도입니다(0 - 완전히 투명함, 1 - 완전히 불투명함). 기본값은 60%입니다(.6). |
payment_widget_ui.lightbox.overlayBackground | string | 오버레이의 배경입니다. 기본 값은 #000000입니다. |
payment_widget_ui.lightbox.contentBackground | string | 프레임 배경 색상. 기본값은 #ffffff입니다. 이러한 색상 변경은 이를 포함하는 라이트박스 설정에만 영향을 미치며 페이 스테이션 iframe 자체에는 영향을 미치지 않음에 유의하시기 바랍니다. |
payment_widget_ui.lightbox.spinner | string | 애니메이션 로딩 표시기의 유형입니다. xsolla 또는 round일 수 있습니다. 기본값은 xsolla입니다. |
payment_widget_ui.lightbox.spinnerColor | string | 회전자의 색상입니다. 기본값에 의해 설정되지 않습니다. |
payment_widget_ui.childWindow | object | 결제 인터페이스가 열리는 하위 창에 대한 설정. 모바일 버전에서 작동. |
payment_widget_ui.childWindow.target | string | 하위 창이 열릴 위치를 결정하는 속성. _blank, _self, _parent 값을 사용할 수 있음. 기본값 - _blank. |
위젯 메서드
var widgetInstance = XBuyButtonWidget.create(options)- 위젯 인스턴스를 생성하고 페이지에 렌더링합니다.widgetInstance.on(event, handler)- 이벤트에 대한 이벤트 핸들러 함수를 위젯에 첨부합니다.event (string)- 이벤트 유형입니다.handler (function)- 이벤트가 트리거될 때 실행하는 함수입니다.
widgetInstance.off(event, handler)- 이벤트 핸들러를 제거합니다.event (string)- 이벤트 유형입니다.handler (function)- 이벤트에 대해 이전에 첨부된 핸들러 함수입니다.
이벤트 목록:
| 매개 변수 | 설명 |
|---|---|
| init | 위젯 초기화 이벤트입니다. |
| open | 위젯 개시 이벤트입니다. |
| load | 결제 인터페이스(페이 스테이션)가 로딩된 후 이벤트입니다. |
| close | 결제 인터페이스(페이 스테이션)가 닫힌 후 이벤트입니다. |
| status | 게임유저가 상태 페이지에서 이동한 경우의 이벤트입니다. |
| status-invoice | 게임유저가 상태 페이지에서 이동했지만 결제가 완료되지 않은 경우의 이벤트입니다. |
| status-delivering | 게임유저가 상태 페이지에서 이동했고, 결제가 완료되었으며, 결제 알림을 보내는 중인 경우의 이벤트입니다. |
| status-done | 게임유저가 상태 페이지에서 이동했고 결제가 성공적으로 완료된 경우의 이벤트입니다. |
| status-troubled | 게임유저가 상태 페이지에서 이동했지만 결제에 실패한 경우의 이벤트입니다. |
XBuyButtonWidget.eventTypes 개체를 사용하여 이벤트 목록에 액세스할 수 있습니다.
버튼 사용자 정의
- 관리자 페이지에서 프로젝트를 열고 아이템 카탈로그 > 게임 키 섹션으로 이동합니다.
- 게임 키를 선택하고 위젯 사용자 정의 탭으로 이동합니다.
- 사용자 정의 블록에서 배경 색상을 선택합니다.
background 매개 변수가 값으로 빈 문자열을 갖도록 코드에서 theme 개체를 수정할 수 있습니다.- 페이지에 위젯 코드를 추가하면 상속한 스타일이 포함됩니다. 스타일을 다시 정의하려면 아래 스타일을 추가하세요.
script 태그 아래의 style 태그에 이 항목이 추가되었습니다.- css
1/* This should be used for button positioning but note this technically repositions the entire widget */
2#xsolla-buy-button-widget {
3 /* place code for button positioning here */
4}
5
6/* Styles the button itself */
7.x-buy-button-widget.x-buy-button-widget__tiny
8 .x-buy-button-widget-payment-button {
9 background-color: #ff005b;
10 color: black;
11}
12
13/* Button on hover */
14.x-buy-button-widget.x-buy-button-widget__tiny
15 .x-buy-button-widget-payment-button:hover {
16 background-color: #ff005b;
17}
18
19/* The following are style overrides to leave you with just the button */
20
21/* space immediately surrounding button */
22.x-buy-button-widget-button-block.x-buy-button-widget-button-block__light {
23 background-color: white;
24}
25
26/* space above button (including game title area) */
27.x-buy-button-widget.x-buy-button-widget__tiny
28 .x-buy-button-widget-game-logo {
29 height: 200px;
30 background-image: none !important;
31 background-color: white;
32}
33
34 /* Game title (located right above button) */
35.x-buy-button-widget-game-name.x-buy-button-widget-game-name__light {
36 display: none !important;
37}
- 위의 ID/클래스 이름과 코드 스니펫은 복사한 위젯 코드(5단계의 이미지)와 함께 사용됩니다. 따라서 복사한 위젯 코드를 구현하는 것이 중요합니다.
- 위의 코드를 그대로 사용하거나 시나리오에 따라 코드를 수정할 수 있습니다. 코드 주석(1, 3, 5, 11, 16, 18, 22, 29행)은 각 CSS 규칙의 대상을 결정하고 향후 스타일을 설정하는 데 도움이 됩니다. 예를 들어, 전체 위젯이 아니라 버튼만 변경하려는 경우 아래에서 색상 설정이
white인 20행과 27행의 페이지의 배경 색상 설정을 대체해야 합니다.
여러 버튼 또는 SKU를 생성하는 방법
Pay2Play 위젯을 사용하여 이를 수행하는 방법에 대한 예제 코드는 엑솔라 Pay2Play 위젯 간단 통합 4 버튼을 참조하세요.
구조는 직접 판매 위젯 코드와 유사합니다. 마이그레이션 예제:
- html
1<div id="xsolla-buy-button-widget"></div>
2<div id="xsolla-buy-button-widget-2"></div>
3
4<script>
5 var options = {
6 project_id: "191204",
7 sku: "789",
8 item_type: "unit",
9 api_settings: {
10 sandbox: false
11 },
12 widget_ui: {
13 target_element: "#xsolla-buy-button-widget",
14 theme: {
15 foreground: "gold",
16 background: ""
17 }
18 },
19 payment_widget_ui: {
20 lightbox: {
21 height: "700px",
22 spinner: "round"
23 }
24 }
25 };
26
27 // options for second buy button - note the different SKU and target_element
28 var options2 = {
29 project_id: "191204",
30 sku: "123",
31 item_type: "unit",
32 api_settings: {
33 sandbox: false
34 },
35 widget_ui: {
36 target_element: "#xsolla-buy-button-widget-2",
37 theme: {
38 foreground: "gold",
39 background: ""
40 }
41 },
42 payment_widget_ui: {
43 lightbox: {
44 height: "700px",
45 spinner: "round"
46 }
47 }
48 };
49
50 var s = document.createElement("script");
51 s.type = "text/javascript";
52 s.async = true;
53 s.src = "https://cdn.xsolla.net/embed/buy-button/3.1.4/widget.min.js";
54
55 // one event listener per widget instance. repeat for more buttons, passing in different SKUs
56 s.addEventListener("load", function () {
57 var widgetInstance = XBuyButtonWidget.create(options);
58 });
59 s.addEventListener("load", function () {
60 var widgetInstance2 = XBuyButtonWidget.create(options2);
61 });
62
63 document.getElementsByTagName("head")[0].appendChild(s);
64</script>
- 1행과 2행 - 버튼 당 하나의
div. 각각 고유한 ID 부여. - 26행부터 두 번째 버튼의 옵션 보유(
options2개체에서 레이아웃 설정됨). 각 구매 버튼에 대해 위의 버튼과 같은options세트가 필요합니다.sku(28행)와target_element(34행, 2행의div을 대상으로 함)의 차이점에 주의해야 합니다.
오자 또는 기타 텍스트 오류를 찾으셨나요? 텍스트를 선택하고 컨트롤+엔터를 누르세요.