ゲームキーの販売をセットアップする
ゲームキーは、ダイレクトリンク、ストア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にはプラットフォーム固有のサフィックスを追加する必要があります。これはキーパッケージの作成方法に応じて、自動的または手動で行われます:
パブリッシャーアカウントでキーパッケージを作成する際、システムは入力されたSKUに自動的にアンダースコア付きのプラットフォーム固有のサフィックス(例:
_steam、_playstation)を追加します。APIコールを使用してプラットフォーム固有のキーパッケージを作成する場合、プラットフォームサフィックスは、小文字および大文字のラテン文字の英数字、ピリオド、ダッシュ、アンダースコアのみを含む任意の形式で指定できます。
サポートされているエクソーラプラットフォームと、そのサフィックスの例のリスト:
| 名称 | SKUサフィックスの例 |
|---|---|
| Steam | _steam |
| PlayStation | _playstation |
| Xbox | _xbox |
| Uplay | _uplay |
| Origin | _origin |
| DRM Free | _drmfree |
| GOG | _gog |
| Epic Games | _epicgames |
| Nintendo Switch eショップ | _nintendo_eshop |
| Discord ゲームストア | _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パラメータを設定してください。URLにui_settingsパラメータを追加し、値としてBase64エンコードされたsettings.uiJSONオブジェクトを渡します。
カスタムテーマで決済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}
支払いテスト
サンドボックスモードで支払いフローをテストするには、URLにmode=sandboxパラメータを追加します。トランザクションを完了するには、テスト銀行カードを使用できます。
サンドボックスモードで決済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を使用します:
- カタログを表示するには、ゲームリストを取得するメソッドを使用します。
ゲームキーの購入を実装します:
- 1つのキーを素早く購入する場合は、指定したアイテムで注文を作成するメソッドを使用します。このメソッドに応答して、決済インターフェイスを開くために使用する必要があるトークンを受け取ります。
- 複数のゲームキーを購入する場合は、以下のカートの管理方法をご利用ください:
- 現在のカートからカート項目を更新して、ゲームキーをカートに追加します。
- 現在のユーザーのカートを取得し、カート内のゲームキーのリストを取得します。
- カートにあるゲームキーの代金を支払うために、現在のカートのすべての商品で注文を作成します。このメソッドに応答して、決済インターフェイスを開くために使用する必要があるトークンを受け取ります。
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に基づいた2文字の言語コードが使用されます。 |
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 | 決済UIの外観パラメータ。 |
payment_widget_ui | object | 決済UIの外観を決定するパラメータを持つオブジェクト。 |
payment_widget_ui.lightbox | object | 決済インターフェイスが開かれるモーダルウィンドウのオプションを持つオブジェクト。 |
payment_widget_ui.lightbox.width | string | ライトボックスのフレームの高さ。nullの場合、ペイステーションの高さに依存します。既定はnullです。 |
payment_widget_ui.lightbox.height | string | ライトボックスのフレームの高さ。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 | 決済UI(ペイステーション)が読み込まれました。 |
| close | 決済UI(ペイステーション)が閉じられています。 |
| status | ユーザーはステータスページにいます。 |
| status-invoice | ユーザーはステータスページにいます。支払いが進行中です。 |
| status-delivering | ユーザーはステータスページにいます。支払いが完了しました。支払い通知が送信されました。 |
| status-done | ユーザーはステータスページにいます。支払いはユーザーのアカウントに振り込まれます。 |
| status-troubled | ユーザーはステータスページにいます。支払いに失敗しました。 |
XBuyButtonWidget.eventTypesオブジェクトを使用してイベントのリストにアクセスできます。
ボタンカスタマイズ
- パブリッシャーアカウントでプロジェクトを開き、アイテムカタログ > ゲームキーセクションに移動します。
- ゲームキーを選択してウィジェットカスタマイズタブに移動します。
- カスタマイズブロックで、背景色を選択します。
themeオブジェクトを修正し、パラメータbackgroundに空文字列を値として持たせることもできます。- ウィジェットコードをページに追加すると、ウィジェットには継承されたスタイルが含まれます。これらのスタイルを上書きするために、以下のスタイルを追加してください。
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/class名とコードスニペットは、コピーしたウィジェットのコード(ステップ5の画像)と組み合わせて使用します。このため、コピーしたウィジェットコードを実装することが重要です。
- 上記のコードをそのまま使用することもできますし、シナリオに応じてコードを変更することもできます。コードコメント(1、3、5、11、16、18、22、29行目)は、各CSSルールが何を対象としているかを判断し、今後のスタイリングに役立てるためのものです。例えば、ボタンだけ(ウィジェット全体ではなく)欲しい場合は、以下の
whiteの場所-20行目と27行目で、ページの背景色を代入する必要があります。
複数のボタンやSKUを作成する方法
Pay2Playウィジェットを使用してこれを実現する方法のコード例については、Xsolla 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行目 — ボタンごとに1つの
divがあり、それぞれに一意のIDがあります。 - 26行目から始まるのは、2番目のボタンのオプションです(
options2オブジェクトにレイアウトされます)。各購入ボタンには、上記のようなoptionsのセットが必要です。sku28行目)とtarget_element(34行目、2行目のdivを対象)が異なることに注意してください。
誤字脱字などのテキストエラーを見つけましたか? テキストを選択し、Ctrl+Enterを押します。