Comment automatiser les mises à jour du catalogue
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.
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.
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
Objets virtuels
Pour mettre à jour le catalogue :
- 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.
- 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.
Monnaie virtuelle
Pour mettre à jour le catalogue :
- Récupérez les données du catalogue avec la méthode API Lire une liste de monnaies virtuelles.
- Passez de nouvelles valeurs de paramètres avec la méthode API Mettre à jour une monnaie virtuelle.
Pour créer une monnaie virtuelle, utilisez la méthode API Créer une monnaie virtuelle.
Packages de monnaies virtuelles
Pour mettre à jour le catalogue :
- Récupérez les données du catalogue avec la méthode API Lire une liste de packages de monnaie virtuelle.
- Passez de nouvelles valeurs de paramètres avec la méthode API Mettre à jour un package de monnaie virtuelle.
Pour créer un package de monnaie virtuelle, utilisez la méthode API Créer un package de monnaie virtuelle.
Lots
Pour mettre à jour le catalogue :
- Récupérez les données du catalogue avec la méthode API Lire une liste de lots.
- 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
Coupons
Pour mettre à jour la promotion :
- Récupérez les données du catalogue avec la méthode API Get coupon promotion ou Lire la liste des promotions par coupon.
- Passez les nouvelles valeurs des paramètres à l’aide de la méthode API Mettre à jour une promotion par coupon.
- 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
Pour mettre à jour la promotion :
- 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.
- Passez les nouvelles valeurs des paramètres à l’aide de la méthode API Mettre à jour une promotion par code promo.
- 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 :
- 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.
- Passez les nouvelles valeurs des paramètres à l’aide de la méthode API Mettre à jour une promotion sur les objets.
- 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 :
- 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.
- Passez les nouvelles valeurs des paramètres à l’aide de la méthode API Mettre à jour une promotion par bonus.
- 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 :
- Exporter les données sur les objets depuis votre système.
- Convertir les données exportées dans un format correspondant à celui des données de la méthode API pour le type d’objet requis.
- Créer un script qui appelle la méthode API requise pour chaque objet exporté :
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 :
- Groupes d’objets dans le Compte éditeur.
- Monnaies virtuelles.
- Objets virtuels.
- Packages de monnaie virtuelle.
- 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.
- Importez la fonction
fetch
du module“node-fetch”
pour envoyer des requêtes HTTP au serveur Xsolla.
- javascript
import fetch from "node-fetch";
- 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.
- javascript
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')
- 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.
- javascript
function sleep(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}
- Implémentez la fonction
getItems
, spécifique à votre système, pour récupérer les données des objets depuis votre système.
- javascript
async function getItems() {
// receive items from the original system or read from a pre-prepared file
return items;
}
- 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.
- javascript
function prepareData(items) {
// format items in accordance with API requirements
return formattedItems;
}
- Ajoutez la fonction
createItem
, qui envoie une requêtePOST
à l’API Xsolla pour créer un objet virtuel.
- javascript
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),
});
}
- Ajoutez la fonction
checkItemExist
, qui vérifie l’existence d’un objet virtuel avec une UGS spécifique. Cette fonction envoie une requêteGET
à 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éé.
- Si la réponse retourne un code HTTP
- javascript
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;
}
- 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.
- javascript
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`);
}
- Ajouter la fonction
run
qui appelle toutes les fonctions ci-dessus dans le bon ordre.
- javascript
async function run() {
const items = await getItems();
const formattedItems = prepareData(items);
await createItems(formattedItems);
}
Le code complet :
- javascript
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.
Faute de frappe ou autre erreur dans le texte ? Sélectionnez le texte concerné et appuyez sur Ctrl+Entée.