Automatisch endendes Abo

So funktioniert's

Ein automatisch endendes Abo ist ein Premium-Bonus und Einmalkauf. Der Benutzer muss es also nach Ablauf erneut erwerben.

Hauptmerkmale:

  • Das Abonnement kann beliebig oft erworben werden.
  • Wenn der Benutzer das Abonnement erneut kauft, bleibt die Anzahl der Gegenstände im Inventar unverändert, jedoch verlängert sich die Zeit bis zum Ablauf des Abonnements.
  • Das Ablaufdatum des Abonnements lässt sich im Kundenportal konfigurieren.

Einschränkungen:

  • Sie können das automatisch endende Abo nur vonseiten des Spielservers verwalten.

Für wen ist es

  • Partner, die den Ingame-Online-Shop integriert haben und einen neuen Gegenstandstyp (Abonnments) einrichten möchten.
  • Partner, die Season Pass, Battle Pass oder sonstige Typen von Gegenständen verkaufen möchten, mit denen Benutzer Vorteile oder weitere Inhalte für eine begrenzte Dauer erhalten.

Wie komme ich dazu

Voraussetzungen

Wenn Sie Xsolla-Online-Shop noch nicht integriert haben, gehen Sie wie folgt vor:

  1. Registrieren Sie sich im Xsolla-Kundenportal.
  2. Navigieren Sie zu Projekte, und klicken Sie auf die Schaltfläche Projekt erstellen.
  3. Geben Sie einen Projektnamen an, und klicken Sie auf Erstellen.
  4. Navigieren Sie zu Projekteinstellungen > Integrationseinstellungen, und prüfen Sie, ob Neue Online-Shop-Managementmethoden integrieren aktiviert ist.

  1. Verknüpfen Sie den Online-Shop mit Ihrem Projekt.
  2. Verknüpfen Sie das Modul Virtuelle Gegenstände.

Integrationsablauf

  1. Erstellen Sie eine Gegenstandsgruppe.
  2. Erstellen Sie Gegenstände:
    1. Wählen Sie beim Erstellen eines neuen Gegenstands unter Gegenstandseigenschaften die Option Automatisch endendes Abo.
    2. Geben Sie das Ablaufdatum an.

  1. Implementieren Sie den Abruf von Abonnements aus dem Katalog.
  2. Implementieren Sie den Abruf von Abonnements aus dem Inventar.
  3. Implementieren Sie die Methoden für den Kauf eines Abonnements.

Abonnements des Katalogs abrufen

Implementieren Sie die API-Methode Get virtual items list, um sich die komplette Liste der zu Ihrem Online-Shop hinzugefügten virtuellen Gegenstände anzeigen zu lassen.

BEISPIEL

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"

Abonnements des Inventars abrufen

Implementieren Sie die Methode Get the current user's subscriptions in das Inventar von Benutzern, um ihnen Zugriff auf weitere Funktionen zu gewähren.

Abonnements kaufen

Nach dem ersten Kauf wird das Abonnement dem Inventar hinzugefügt.

Nach dem zweiten und weiteren Käufen gilt Folgendes:

  1. Bei aktivem Abonnement wird die Abodauer zur Restlaufzeit addiert.
  2. Bei inaktivem Abonnement läuft das Abonnement wie voreingestellt aus.

Implementieren Sie folgende Methoden, um ein Abonnement kaufen zu können.

Warenkorb abrufen

Implementieren Sie für den Kauf von virtuellen Gegenständen die API-Methode Get cart by ID oder Get current user’s cart. Die Cart ID wird genutzt, um Gegenstände hinzuzufügen bzw. zu entfernen.

BEISPIEL

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: Um den Schnellkauf von Gegenständen (d. h. ohne einen Warenkorb anzulegen) zu aktivieren, nutzen Sie die API-Methode Create order with specified item.

Bestellung mit allen Gegenständen erstellen

  1. Implementieren Sie eine der folgenden API-Methoden:
    1. Create order with all items from particular cart, wenn Sie den Warenkorb mittels ID abgerufen haben.
    2. Create order with all items from current cart, wenn Sie den aktuellen Warenkorb abgerufen haben.

Die angelegte Bestellung erhält den Status New.

  1. Um das Zahlungsportal in einem neuen Fenster zu öffnen, nutzen Sie folgenden Link: https://secure.xsolla.com/paystation2/?access_token=ACCESS_TOKEN, wobei ACCESS_TOKEN der Token ist, den Sie beim Anlegen der Bestellung erhalten haben.
  2. So testen Sie den Zahlungsvorgang:
    1. Nutzen Sie folgende URL: https://sandbox-secure.xsolla.com/paystation2/?access_token=ACCESS_TOKEN.
    2. Legen Sie in der Anfrage für den Parameter sandbox die Option true fest.
    3. Werfen Sie einen Blick in die Liste der Bankkarten, die für Testzwecke verwendet werden können.

BEISPIEL

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"
}

Bestellung abrufen

Implementieren Sie die API-Methode Get order, um festzustellen, ob der Kauf bereits abgewickelt wurde. Folgende Bestellungsstatus sind möglich:

  • New: Bestellung ist angelegt, wurde aber nicht bezahlt
  • Paid: Bestellung wurde bezahlt
  • Cancelled: Bestellung ist storniert
  • Done: Bestellung wurde bezahlt und der Gegenstand dem Inventar hinzugefügt

Note: Die Statusprüfung sollte in regelmäßigen Abständen erfolgen, da eine einmalige Prüfung jederzeit erfolgen kann, bevor einer Bestellung der Status "Neu" zugeordnet wird.

BEISPIEL

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"
}

Serverseitige Abonnementverwaltung

Gewähren

Der Spielserver kann den Abogegenstand den Benutzern über die Methode Grant gewähren.

Die Berechnung des Ablaufdatums des Abos erfolgt genauso wie beim Kauf von Abonnements.

Widerrufen

Der Spielserver kann den Gegenstand eines Benutzers über die Methode Revoke widerrufen. Das Widerrufen des Gegenstands hat zur Folge, dass er vollständig aus dem Benutzerinventar gelöscht wird.