非更新のサブスクリプション

どのように動作するか

非更新サブスクリプションは、1回限りの購入であるプレミアムボーナスです。したがって、ユーザーは期限切れになったときに再度購入する必要があります。

主な特徴:

  • サブスクリプションは無限の回数で販売できます。
  • ユーザーがサブスクリプションを再度購入しても、インベントリー内のアイテムの数は変化しませんが、サブスクリプションの有効期限が切れるまでの時間が増加します。
  • パブリッシャーアカウントでサブスクリプションの有効期限を設定できます。

制限:

  • 非更新サブスクリプションは、ゲームが提供される側からのみ管理できます。

使用に適した方

  • ゲーム内ストアを統合し、新しいアイテムタイプ–サブスクリプションをセットアップしたいパートナー。
  • Season PassBattle Pass、または限定期間でユーザーに有益点または追加コンテンツ(ゲーム内アイテムやタスクなど)を提供するさまざまな種類のアイテムを販売したいパートナー。

入手方法

前提条件

エクソラストアをまだ統合していない場合は、次の手順を実行します:

  1. エクソラストアパブリッシャーアカウントを作成します。
  2. プロジェクトに移動し、プロジェクトを作成するボタンをクリックします。
  3. プロジェクト名を追加し、作成するをクリックします。
  4. ストアをプロジェクトに接続します。
  5. 仮想アイテムモジュールを接続します。

統合フロー

  1. アイテムのグループを作成します。
  2. アイテムを作成します:
    1. 新しいアイテムを作成するときは、アイテムプロパティメニューで非更新サブスクリプションを選択します。
    2. 有効期限を指定します。

  1. カタログでサブスクリプションの取得を実装します。
  2. インベントリでサブスクリプションの取得をを実装します。
  3. サブスクリプションを購入するためのメソッドを実装します。

カタログでサブスクリプションを取得する

ストアに追加された仮想アイテムの完全リストを表示するには、Get virtual items listAPIメソッドを実装します。

Copy
Full screen
Small screen
var data = null;

var xhr = new XMLHttpRequest();
xhr.withCredentials = true;

xhr.addEventListener("readystatechange", function () {
  if (this.readyState === this.DONE) {
    console.log(this.responseText);
  }
});

xhr.open("GET", "https://store.xsolla.com/api/v2/project/44056/items/virtual_items?locale=en");

xhr.send(data);

//RESPONSE

"items": [
    {
      "attributes": [],
      "description": "Conquer your foes with vindication using the Basic Blaster! ",
      "groups": [
        "all",
        "featured",
        "Xsolla",
        "weapons"
      ],
      "image_url": "https://cdn.xsolla.net/img/misc/images/0c59a7698d4f66c1008b27ee752089b7.png",
      "is_free": false,
      "name": "Xsolla Basic Blaster 1",
      "order": 1,
      "price": {
        "amount": "0.9950000000000000",
        "amount_without_discount": "1.9900000000000000",
        "currency": "USD"
      },
      "sku": "gun_1",
      "type": "virtual_good"

インベントリでサブスクリプションを取得する

ユーザーインベントリにGet the current user’s subscriptionsメソッドを利用して、ユーザーに追加機能へのアクセスを許可します。

サブスクリプションを購入する

最初の購入後、サブスクリプションがインベントリに追加されます。

2回目以降と将来の購入:

  1. サブスクリプションがアクティブな場合、サブスクリプションの有効期限は残りの時間と合計されます。
  2. サブスクリプションがアクティブでない場合、サブスクリプションの有効期限がデフォルトです。

サブスクリプションを購入するには、次のメソッドを実装します。

Get cart

仮想アイテムの購入には、Get cart by IDまたはGet current user’s cart APIメソッドを実装します。Cart IDはアイテムの追加/削除に使用されます。

Copy
Full screen
Small screen
var data = null;

var xhr = new XMLHttpRequest();
xhr.withCredentials = true;

xhr.addEventListener("readystatechange", function () {
  if (this.readyState === this.DONE) {
    console.log(this.responseText);
  }
});

xhr.open("GET", "https://store.xsolla.com/api/v2/project/44056/cart/custom_id?locale=en&currency=USD");
xhr.setRequestHeader("authorization", "Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE5NjIyMzQwNDgsImlzcyI6Imh0dHBzOi8vbG9naW4ueHNvbGxhLmNvbSIsImlhdCI6MTU2MjE0NzY0OCwidXNlcm5hbWUiOiJ4c29sbGEiLCJ4c29sbGFfbG9naW5fYWNjZXNzX2tleSI6IjA2SWF2ZHpDeEVHbm5aMTlpLUc5TmMxVWFfTWFZOXhTR3ZEVEY4OFE3RnMiLCJzdWIiOiJkMzQyZGFkMi05ZDU5LTExZTktYTM4NC00MjAxMGFhODAwM2YiLCJlbWFpbCI6InN1cHBvcnRAeHNvbGxhLmNvbSIsInR5cGUiOiJ4c29sbGFfbG9naW4iLCJ4c29sbGFfbG9naW5fcHJvamVjdF9pZCI6ImU2ZGZhYWM2LTc4YTgtMTFlOS05MjQ0LTQyMDEwYWE4MDAwNCIsInB1Ymxpc2hlcl9pZCI6MTU5MjR9.GCrW42OguZbLZTaoixCZgAeNLGH2xCeJHxl8u8Xn2aI");

xhr.send(data);

//RESPONSE

{
  "cart_id": "custom_id",
  "is_free": true,
  "items": [],
  "price": null
}

Note
(カートを作成しないで)クイックアイテム購入を有効にする場合には、Create order with specified itemAPIメソッドを使用します。

Create order with all items

  1. APIメソッドの1つを実装します:
    1. カートをIDで取得する場合には、Create order with all items from particular cart
    2. 現在のカートを取得する場合には、Create order with all items from current cart

作成された注文はNewオーダーステータスを受取ります。

  1. 新しいウィンドウで決済UIを開くには、次のリンクを使用してください:https://secure.xsolla.com/paystation3/?access_token=ACCESS_TOKENACCESS_TOKENは注文が作成されたときに受け取ったトークンです。
  2. 決済プロセスをテストするには:
    1. このURLを使用します:https://sandbox-secure.xsolla.com/paystation3/?access_token=ACCESS_TOKEN
    2. リクエストでサンドボックスパラメータをtrueに設定します。
    3. テストのための銀行のカードのリストを使います。

Copy
Full screen
Small screen
var data = JSON.stringify({
  "currency": "USD",
  "locale": "en",
  "sandbox": false
});

var xhr = new XMLHttpRequest();
xhr.withCredentials = true;

xhr.addEventListener("readystatechange", function () {
  if (this.readyState === this.DONE) {
    console.log(this.responseText);
  }
});

xhr.open("POST", "https://store.xsolla.com/api/v2/project/44056/payment/cart/custom_id");
xhr.setRequestHeader("content-type", "application/json");
xhr.setRequestHeader("authorization", "Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE5NjIyMzQwNDgsImlzcyI6Imh0dHBzOi8vbG9naW4ueHNvbGxhLmNvbSIsImlhdCI6MTU2MjE0NzY0OCwidXNlcm5hbWUiOiJ4c29sbGEiLCJ4c29sbGFfbG9naW5fYWNjZXNzX2tleSI6IjA2SWF2ZHpDeEVHbm5aMTlpLUc5TmMxVWFfTWFZOXhTR3ZEVEY4OFE3RnMiLCJzdWIiOiJkMzQyZGFkMi05ZDU5LTExZTktYTM4NC00MjAxMGFhODAwM2YiLCJlbWFpbCI6InN1cHBvcnRAeHNvbGxhLmNvbSIsInR5cGUiOiJ4c29sbGFfbG9naW4iLCJ4c29sbGFfbG9naW5fcHJvamVjdF9pZCI6ImU2ZGZhYWM2LTc4YTgtMTFlOS05MjQ0LTQyMDEwYWE4MDAwNCIsInB1Ymxpc2hlcl9pZCI6MTU5MjR9.GCrW42OguZbLZTaoixCZgAeNLGH2xCeJHxl8u8Xn2aI");

xhr.send(data);

//RESPONSE  

{
  "order_id": 641,
  "token": "f4puMEFFDZcx9nv5HoNHIkPe9qghvBQo"
}

Get order

購入が既に処理されたかを判断するにはGet orderAPIメソッドを実装します。以下の注文ステータスが利用できます。

  • New — 注文が作成されたものの、支払いはされていない。
  • Paid — 注文に対する支払い済み。
  • Cancelled — 注文はキャンセル済み。
  • Done — 注文は支払いが完了し、アイテムはインベントリに追加されました。

Note
ステータスの確認は一定の頻度で実行されるべきです。1度だけの確認だと、注文に新しいステータスが付与される前に確認される可能性があるためです。

Copy
Full screen
Small screen
var data = null;

var xhr = new XMLHttpRequest();
xhr.withCredentials = true;

xhr.addEventListener("readystatechange", function () {
  if (this.readyState === this.DONE) {
    console.log(this.responseText);
  }
});

xhr.open("GET", "https://store.xsolla.com/api/v2/project/44056/order/656");
xhr.setRequestHeader("authorization", "Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE5NjIyMzQwNDgsImlzcyI6Imh0dHBzOi8vbG9naW4ueHNvbGxhLmNvbSIsImlhdCI6MTU2MjE0NzY0OCwidXNlcm5hbWUiOiJ4c29sbGEiLCJ4c29sbGFfbG9naW5fYWNjZXNzX2tleSI6IjA2SWF2ZHpDeEVHbm5aMTlpLUc5TmMxVWFfTWFZOXhTR3ZEVEY4OFE3RnMiLCJzdWIiOiJkMzQyZGFkMi05ZDU5LTExZTktYTM4NC00MjAxMGFhODAwM2YiLCJlbWFpbCI6InN1cHBvcnRAeHNvbGxhLmNvbSIsInR5cGUiOiJ4c29sbGFfbG9naW4iLCJ4c29sbGFfbG9naW5fcHJvamVjdF9pZCI6ImU2ZGZhYWM2LTc4YTgtMTFlOS05MjQ0LTQyMDEwYWE4MDAwNCIsInB1Ymxpc2hlcl9pZCI6MTU5MjR9.GCrW42OguZbLZTaoixCZgAeNLGH2xCeJHxl8u8Xn2aI");

xhr.send(data);

//RESPONSE

{
  "content": {
    "is_free": false,
    "items": [
      {
        "is_free": false,
        "price": {
          "amount": "0.9950",
          "amount_without_discount": "1.9900",
          "currency": "USD"
        },
        "quantity": 123,
        "sku": "gun_1"
      }
    ],
    "price": {
      "amount": "122.3850",
      "amount_without_discount": "122.3850",
      "currency": "USD"
    }
  },
  "order_id": 656,
  "status": "new"
}

サーバー側のサブスクリプション管理

付与

ゲームサーバーは、付与メソッドを介してユーザーにサブスクリプションアイテムを付与できます。

サブスクリプションの有効期限は、サブスクリプション購入時と同じ方法で計算されます。

取り消し

ゲームサーバーは取り消しメソッドを介してユーザーからアイテムを取り消すことができます。アイテムを取り消すと、ユーザーインベントリから完全に削除されます。

この記事は役に立ちましたか?
ありがとうございます!
改善できることはありますか? メッセージ
申し訳ありません
この記事が参考にならなかった理由を説明してください。 メッセージ
ご意見ありがとうございました!
あなたのメッセージを確認し、体験を向上させるために利用させていただきます。
このページを評価する
このページを評価する
改善できることはありますか?

答えたくない

ご意見ありがとうございました!
最終更新日: 2021年6月25日

誤字脱字などのテキストエラーを見つけましたか? テキストを選択し、Ctrl+Enterを押します。

問題を報告する
当社は常にコンテンツを見直しています。お客様のご意見は改善に役立ちます。
フォローアップ用のメールをご提供してください
ご意見ありがとうございました!