Mise à jour automatique du catalogue via API

Utilisez les appels In-Game Store API pour automatiser la création et la mise à jour du catalogue. Grâce à l’automatisation, vous pouvez maintenir votre catalogue à jour sans y consacrer beaucoup de temps. L’automatisation du catalogue vous permet de créer et de mettre à jour des objets et des promotions et d’importer des données à partir de systèmes externes.

Cela permet de réduire le temps nécessaire à la maintenance et à la mise à jour :

  • des catalogues contenant un grand nombre d’objets ;
  • des promotions de tout type ;
  • des prix par pays.

Avis

Pour maintenir l’engagement des utilisateurs, il est crucial de garder le catalogue des objets à jour côté Xsolla après sa création. Nous recommandons de procéder à ces mises à jour pour refléter chaque modification apportée de votre côté, comme l’ajout de nouveaux produits ou la modification des prix.

Vous pouvez :

Une autorisation de base est requise pour utiliser les appels API de création et de mise à jour des objets et des promotions. Passez le code Authorization:Basic <your_authorization_basic_key>, où <your_authorization_basic_key> est la paire merchant ID:API key encodée conformément à la norme Base64. Accédez au Compte éditeur pour trouver les paramètres suivants :

  • Merchant ID est affiché :
    • Dans la section Company settings > Company ;
    • Dans l'URL de la barre d'adresse du navigateur sur n'importe quelle page du Compte éditeur. L'URL est au format suivant : https:​//publisher.xsolla.com/<merchant ID>/<Publisher Account section>.

  • L'API key ne s'affiche dans le Compte éditeur qu'une seule fois lors de sa création, vous devez donc la conserver de votre côté. Vous pouvez créer une nouvelle clé dans les sections suivantes :
    • Company settings > API keys ;
    • Project settings > API keys.

Créer et mettre à jour des biens

Pour créer de nombreux objets, créez un script qui appelle la méthode API du type d’objet requis le nombre de fois nécessaire.

Avis

La liste des paramètres renvoyés en réponse à la demande des objets diffère de la liste des paramètres que vous devez passer lors de la mise à jour du catalogue. Outre les paramètres requis et mis à jour, passez dans la méthode de mise à jour des objets les paramètres renvoyés en réponse à la demande des objets.

Exemple :

Dans la méthode Lire un objet virtuel, un objet limits contenant les données de limite est retourné. Si vous souhaitez mettre à jour uniquement le prix ou le nom du bien, passez les données actuelles de limits dans la méthode Mettre à jour un objet virtuel. Si vous ne passez pas limits, les données de limite seront supprimées lorsque le bien est mis à jour par la méthode Mettre à jour un objet virtuel.

Objets virtuels

Pour mettre à jour le catalogue :

  1. Récupérez les données du catalogue avec la méthode API Lire une liste d’objets virtuels ou Lire la liste de tous les objets virtuels.
  2. Passez de nouvelles valeurs de paramètres avec la méthode API Mettre à jour un objet virtuel.

Pour créer un objet virtuel, utilisez la méthode API Créer un objet virtuel.

Lots

Pour mettre à jour le catalogue :

  1. Récupérez les données du catalogue avec la méthode API Lire une liste de lots.
  2. Passez de nouvelles valeurs de paramètres avec la méthode API Mettre à jour un lot.

Pour créer un lot, utilisez la méthode API Créer un lot.
Si vous souhaitez ajouter des clés de jeu, des restrictions régionales ou des prix par pays aux lots, utilisez les instructions.

Créer et mettre à jour des promotions

Avis
La liste des paramètres renvoyés par les méthodes API d’obtention est différente des paramètres passés dans les méthodes de mise à jour des promotions. Outre les paramètres requis et mis à jour, passez les paramètres de la méthode de mise à jour qui sont renvoyés dans la réponse à la requête à la méthode que vous utilisez pour obtenir la liste des promotions.

Coupons

Note
Pour vous assurer du bon fonctionnement des promotions par coupon, vous devez d’abord créer une promotion, puis générer des codes pour cette promotion.

Pour mettre à jour la promotion :

  1. Récupérez les données du catalogue avec la méthode API Get coupon promotion ou Lire la liste des promotions par coupon.
  2. Passez les nouvelles valeurs des paramètres à l’aide de la méthode API Mettre à jour une promotion par coupon.
  3. Activez la promotion à l’aide de la méthode API Activer une promotion par coupon.

Pour créer une promotion, utilisez les méthodes API Créer une promotion par coupon, puis Créer un code de coupon pour créer des codes de coupon personnalisés ou Générer des codes de coupon pour générer des codes de coupon aléatoires.
Pour désactiver une promotion, utilisez la méthode API Désactiver une promotion par coupon.

Codes promo

Note
Pour vous assurer du bon fonctionnement des promotions par code promo, vous devez d’abord créer une promotion, puis générer des codes pour cette promotion.

Pour mettre à jour la promotion :

  1. Récupérez les données du catalogue avec la méthode API Lire une promotion par code promo ou Lire la liste des promotions par code promo.
  2. Passez les nouvelles valeurs des paramètres à l’aide de la méthode API Mettre à jour une promotion par code promo.
  3. Activez la promotion à l’aide de la méthode API Activer une promotion par code promo.

Pour créer une promotion, utilisez les méthodes API Créer une promotion par code promo, puis Créer un code pour une promotion par code promo pour créer des codes promotionnels personnalisés ou Générer des codes pour une promotion par code promo pour générer des codes promotionnels aléatoires.
Pour désactiver une promotion, utilisez la méthode API Désactiver une promotion par code promo.

Réductions

Pour mettre à jour la promotion :

  1. Récupérez les données du catalogue avec la méthode API Lire une promotion sur les objets ou Lire la liste des promotions sur des objets.
  2. Passez les nouvelles valeurs des paramètres à l’aide de la méthode API Mettre à jour une promotion sur les objets.
  3. Activez la promotion à l’aide de la méthode API Activer une promotion.

Pour créer une promotion, utilisez la méthode API Créer une promotion par réduction pour un objet.
Pour désactiver une promotion, utilisez la méthode API Désactiver une promotion.

Bonus

Pour mettre à jour la promotion :

  1. Récupérez les données du catalogue avec la méthode API Lire une promotion par bonus ou Lire la liste des promotions par bonus.
  2. Passez les nouvelles valeurs des paramètres à l’aide de la méthode API Mettre à jour une promotion par bonus.
  3. Activez la promotion à l’aide de la méthode API Activer une promotion.

Pour créer une promotion, utilisez la méthode API Créer une promotion par bonus.
Pour désactiver une promotion, utilisez la méthode API Désactiver une promotion.

Création automatique des biens via API

Pour créer de nombreux objets sur la base de données de votre système, vous pouvez utiliser l’automatisation à l’aide de l’API.

Vous devez :

Si vous souhaitez utiliser des groupes d’objets, créez-les à l’avance via l’interface du Compte éditeur.

Si vous souhaitez utiliser plusieurs types d’objets, créez-les dans l’ordre suivant :

  1. Groupes d’objets dans le Compte éditeur.
  2. Monnaies virtuelles.
  3. Objets virtuels.
  4. Packages de monnaie virtuelle.
  5. Lots.

Voici un exemple de script qui appelle de manière répétée la méthode Créer un objet virtuel pour créer des objets virtuels.

Le script est développé en utilisant JavaScript et le moteur d’exécution JavaScript — Node.js.

  1. Importez la fonction fetch du module “node-fetch” pour envoyer des requêtes HTTP au serveur Xsolla.
Copy
Full screen
Small screen
import fetch from "node-fetch";
  1. Définissez les constantes nécessaires à l’autorisation de la requête. Au lieu de <your project_id from PA> et <your api key from PA>, insérez vos valeurs pour l’ID de projet et la clé API, qui seront encodées en Base64 pour une utilisation ultérieure dans les requêtes API.
Copy
Full screen
Small screen
const projectId = <your project_id from PA>;

const apiKey = <your api key from PA>;

const buff = new Buffer(`${projectId}:${apiKey}`);

const basicAuth = buff.toString('base64')
  1. Implémentez la fonction d’aide sleep, qui est utilisée pour créer un délai lors de l’envoi de requêtes. Cela est nécessaire afin de ne pas dépasser les limites de taux des requêtes API.
Copy
Full screen
Small screen
function sleep(ms) {

   return new Promise(resolve => setTimeout(resolve, ms));

}
  1. Implémentez la fonction getItems, spécifique à votre système, pour récupérer les données des objets depuis votre système.
Copy
Full screen
Small screen
async function getItems() {

   // receive items from the original system or read from a pre-prepared file

   return items;

}
  1. Implémentez la fonction prepareData, spécifique à votre système, pour formater les données des objets conformément au format de données dans l’appel API Créer un objet virtuel.
Copy
Full screen
Small screen
function prepareData(items) {

   // format items in accordance with API requirements

   return formattedItems;

}
  1. Ajoutez la fonction createItem, qui envoie une requête POST à l’API Xsolla pour créer un objet virtuel.
Copy
Full screen
Small screen
async function createItem(item) {

   const url = `https://store.xsolla.com/api/v2/project/${projectId}/admin/items/virtual_items`;



   return await fetch(url, {

       method: "POST",

       headers: {

           Authorization: "Basic " + basicAuth,

           "Content-Type": "application/json"

       },

       body: JSON.stringify(item),

   });

}
  1. Ajoutez la fonction checkItemExist, qui vérifie l’existence d’un objet virtuel avec une UGS spécifique. Cette fonction envoie une requête GET à l’API Xsolla :
    • Si la réponse retourne un code HTTP 404, l’objet avec l’UGS spécifiée n’est pas trouvé et doit être créé ;
    • Si la réponse retourne un code HTTP 200, l’objet avec l’UGS spécifiée est trouvé et n’a pas besoin d’être créé.
Copy
Full screen
Small screen
async function checkItemExist(sku) {

   const url = `https://store.xsolla.com/api/v2/project/${projectId}/admin/items/virtual_items/sku/${sku}`;

   const response = await fetch(url, {

       method: "GET",

       headers: {

           Authorization: "Basic " + basicAuth

       }

   });

   return response.status !== 404;

}
  1. Ajoutez la fonction createItems, qui parcourt la liste des objets et vérifie l’existence du côté de Xsolla d’un objet avec une UGS de votre système. Si aucun objet avec une telle UGS n’est trouvé, la fonction le crée. Les informations de progression s’affichent dans la console.
Copy
Full screen
Small screen
async function createItems(items) {

   let success = 0;

   let alreadyCreated = 0;

   for (let i = 0; i < items.length; i++) {

       const item = items[i];

       if (item['sku'] === undefined) {

           console.log(`${i} Field "sku" not specified`);

           continue;

       }

       const sku = item['sku'];

       if (await checkItemExist(sku)) {

           console.log(`${i} Item with sku "${sku}" already created`);

           alreadyCreated++;

           continue;

       }

       const response = await createItem(item);

       if (response.status === 201) {

           console.log(`${i} Item with sku "${sku}" successfully created`)

           success++;

       } else {

           const jsonData = await response.json();

           console.log(`${i} An error occurred while creating the items with sku "${sku}"`);

           console.log(jsonData);

       }

       // add a delay so as not to run into rate limits

       await sleep(500);

   }

   console.log(`${success} items out of ${items.length} created. ${alreadyCreated} items already existed`);

}
  1. Ajouter la fonction run qui appelle toutes les fonctions ci-dessus dans le bon ordre.
Copy
Full screen
Small screen
async function run() {

 const items = await getItems();

 const formattedItems = prepareData(items);

 await createItems(formattedItems);

}

Le code complet :

Copy
Full screen
Small screen
import fetch from "node-fetch";

const projectId = <your project_id from PA>;
const apiKey = <your api key from PA>;
const buff = new Buffer(`${projectId}:${apiKey}`);
const basicAuth = buff.toString('base64')

function sleep(ms) {
    return new Promise(resolve => setTimeout(resolve, ms));
}

async function getItems() {
    // receive items from the original system or read from a pre-prepared file
    return items;
}

function prepareData(items) {
    // format items in accordance with API requirements
    return formatedItems;
}

async function createItem(item) {
    const url = `https://store.xsolla.com/api/v2/project/${projectId}/admin/items/virtual_items`;

    return await fetch(url, {
        method: "POST",
        headers: {
            Authorization: "Basic " + basicAuth,
            "Content-Type": "application/json"
        },
        body: JSON.stringify(item),
    });
}

async function isItemExisted(sku) {
    const url = `https://store.xsolla.com/api/v2/project/${projectId}/admin/items/virtual_items/sku/${sku}`;
    const response = await fetch(url, {
        method: "GET",
        headers: {
            Authorization: "Basic " + basicAuth
        }
    });
    return response.status !== 404;
}

async function createItems(items) {
    let success = 0;
    let alreadyCreated = 0;
    for (let i = 0; i < items.length; i++) {
        const item = items[i];
        if (item['sku'] === undefined) {
            console.log(`${i} Field "sku" not specified`);
            continue;
        }
        const sku = item['sku'];
        if (await isItemExisted(sku)) {
            console.log(`${i} Item with sku "${sku}" already created`);
            alreadyCreated++;
            continue;
        }
        const response = await createItem(item);
        if (response.status === 201) {
            console.log(`${i} Item with sku "${sku}" successfully created`)
            success++;
        } else {
            const jsonData = await response.json();
            console.log(`${i} An error occurred while creating the items with sku "${sku}"`);
            console.log(jsonData);
        }
        // add a delay so as not to run into rate limits
        await sleep(500);
    }
    console.log(`${success} items out of ${items.length} created. ${alreadyCreated} items already existed`);
}

async function run() {
  const items = await getItems();
  const formattedItems = prepareData(items);
  await createItems(formattedItems);
}

run(); 

Mise à jour par importation à partir de systèmes externes

Suivez les instructions pour importer des données à partir de systèmes externes tels que PlayFab ou Google Play.
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: 8 Novembre 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 !