Mise à jour automatique du catalogue via API

Utilisez les appels In-Game Store & Buy Botton 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 Get virtual items, 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 Update virtual item. Si vous ne passez pas limits, les données de limite seront supprimées lorsque le bien est mis à jour par la méthode Update virtual item.

Objets virtuels

Pour mettre à jour le catalogue :

  1. Récupérez les données du catalogue avec la méthode API Get virtual item ou Get all virtual items list.
  2. Passez de nouvelles valeurs de paramètres avec la méthode API Update virtual item.

Pour créer un objet virtuel, utilisez la méthode API Create virtual item.

Lots

Pour mettre à jour le catalogue :

  1. Récupérez les données du catalogue avec la méthode API Get list of bundles.
  2. Passez de nouvelles valeurs de paramètres avec la méthode API Update bundle.

Pour créer un lot, utilisez la méthode API Create bundle.
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 Get list of coupon promotions.
  2. Passez les nouvelles valeurs des paramètres à l’aide de la méthode API Update coupon promotion.
  3. Activez la promotion à l’aide de la méthode API Activate coupon promotion.

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

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 Get promo codes promotion ou Get list of promo codes promotions.
  2. Passez les nouvelles valeurs des paramètres à l’aide de la méthode API Update promo codes promotion.
  3. Activez la promotion à l’aide de la méthode API Activate promo codes promotion.

Pour créer une promotion, utilisez les méthodes API Create promo code promotion, puis Create code for promo code promotion pour créer des codes promotionnels personnalisés ou Generate codes for promo code promotion pour générer des codes promotionnels aléatoires.
Pour désactiver une promotion, utilisez la méthode API Deactivate promo code promotion.

Réductions

Pour mettre à jour la promotion :

  1. Récupérez les données du catalogue avec la méthode API Get item promotion ou Get list of item promotions.
  2. Passez les nouvelles valeurs des paramètres à l’aide de la méthode API Update item promotion.
  3. Activez la promotion à l’aide de la méthode API Activate promotion.

Pour créer une promotion, utilisez la méthode API Create discount promotion for item.
Pour désactiver une promotion, utilisez la méthode API Deactivate promotion.

Bonus

Pour mettre à jour la promotion :

  1. Récupérez les données du catalogue avec la méthode API Get bonus promotion ou Get list of bonus promotions.
  2. Passez les nouvelles valeurs des paramètres à l’aide de la méthode API Update bonus promotion.
  3. Activez la promotion à l’aide de la méthode API Activate promotion.

Pour créer une promotion, utilisez la méthode API Create bonus promotion.
Pour désactiver une promotion, utilisez la méthode API Deactivate 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 Create virtual item 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 Create virtual item.
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: 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 !