Inventaire. Objets à durée limitée

Comment ça marche

Un objet à durée limitée est un bonus premium qui ne peut être acheté qu’une seule fois. Par conséquent, l’utilisateur doit l’acheter à nouveau lorsque l’objet arrive à expiration.

Principales caractéristiques :

  • L’objet à durée limitée peut être vendu un nombre illimité de fois.
  • Lorsque l’utilisateur achète à nouveau l’objet, le nombre d’objets dans l’inventaire ne change pas, mais le temps avant l’expiration de l’objet augmente.
  • Vous pouvez configurer le délai d’expiration de l’objet dans le Compte éditeur.

Restrictions :

  • Vous pouvez gérer les objets à durée limitée uniquement côté serveur du jeu.

Note
Si vous souhaitez limiter la durée d’affichage d’un objet dans le magasin, utilisez les instructions Comment configurer une limite de durée d’affichage des objets dans le magasin.

Qui peut l'utiliser

  • Les partenaires qui ont intégré In-Game Store et qui souhaitent configurer nouveau type d'objet : les objets à durée limitée.
  • Les partenaires qui souhaitent vendre des Season Pass, Battle Pass ou différents types d'objets offrant aux utilisateurs un avantage ou un contenu supplémentaire (par exemple, des objets ou des tâches dans le jeu) pour une durée limitée.

Comment configurer

Prérequis

Si vous n’avez pas encore intégré Xsolla Store, procédez comme suit :

  1. Créez un Compte éditeur Xsolla.
  2. Accédez à Projects et cliquez sur le bouton Create project.
  3. Ajoutez Project name et cliquez sur Create.
  4. Connectez Store à votre projet.
  5. Connectez le module Virtual Items.

Flux d'intégration

  1. Créez un groupe des objets.
  2. Créez des objets :
    1. Lors de la création d'un nouvel objet, choisissez Time-limited items dans le menu Item property.
    2. Spécifiez le délai d'expiration.

  1. Mettre en œuvre l'obtention d'articles à durée limitée dans le catalogue.
  2. Mettre en œuvre les méthodes d'achat d'articles à durée limitée.

Récupération des objets à durée limitée du catalogue

Implémentez la méthode API Get virtual items list pour afficher la liste complète des objets virtuels ajoutés à votre magasin.

EXEMPLE

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"

Achat des objets à durée limitée

Après le premier achat, l’objet à durée limitée est ajouté à l’inventaire.

Après le deuxième achat et les achats ultérieurs :

  1. Si l’objet à durée limitée est actif, le délai d’expiration de l’objet s’additionne au temps restant.
  2. Si l’objet à durée limitée n’est pas actif, le délai d’expiration de l’objet est celui par défaut.

Implémentez les méthodes suivantes pour l’achat des objets à durée limitée.

Get cart

Implémentez la méthode API Get cart by ID ou Get current user’s cart pour l’achat des objets virtuels. Card ID sera utilisé pour ajouter/supprimer des objets.

EXEMPLE

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
Pour activer l’achat rapide des objets (sans créer de panier), utilisez la méthode API Create order with specified item.

Créer une commande avec tous les objets

  1. Implémentez l'une des méthodes API :
    1. Create order with all items from particular cart si vous avez récupéré le panier par ID ;
    2. Create order with all items from current cart si vous avez récupéré le panier actuel.

La commande créée aura le statut New.

  1. Pour ouvrir l'interface de paiement dans une nouvelle fenêtre, utilisez le lien suivant : https://secure.xsolla.com/paystation3/?access_token=ACCESS_TOKEN, où ACCESS_TOKEN est le jeton reçu lors de la création de la commande.
  2. Pour tester le processus de paiement :
    1. Utilisez l'URL suivante : https://sandbox-secure.xsolla.com/paystation3/?access_token=ACCESS_TOKEN ;
    2. Définissez le paramètre sandbox sur true dans la requête ;
    3. Utilisez la liste des cartes bancaires pour le test.

EXEMPLE

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

Implémentez la méthode API Get order pour déterminer si l’achat a déjà été traité. Les statuts de commande possibles sont les suivants :
  • New — la commande a été créée, mais n’est pas encore payée ;
  • Paid — la commande est payée ;
  • Canceled — la commande a été annulée ;
  • Done — la commande a été payée et les biens ont été ajoutés à l’inventaire.
Note
Le contrôle de l’état doit être effectué périodiquement, car une seule vérification peut être insuffisante, surtout si elle est effectuée avant que la commande ne soit mise à jour avec son nouveau statut.
EXEMPLE
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"
}
Cet article vous a été utile ?
Merci !
Que pouvons-nous améliorer ? Message
Nous sommes désolés de l'apprendre
Dites-nous pourquoi vous n'avez pas trouvé cet article utile. Message
Merci pour votre commentaire !
Nous examinerons votre message et l'utiliserons pour améliorer votre expérience.
Dernière mise à jour: 3 Octobre 2024

Faute de frappe ou autre erreur dans le texte ? Sélectionnez le texte concerné et appuyez sur Ctrl+Entée.

Signaler un problème
Nous améliorons continuellement notre contenu grâce à vos commentaires.
Indiquez votre adresse e-mail pour un suivi
Merci pour votre commentaire !