Cómo automatizar las actualizaciones del catálogo
Puede automatizar la creación y actualización del catálogo con las llamadas API In-Game Store. Con la automatización, puede mantener su catálogo actualizado sin invertir mucho tiempo. La automatización del catálogo le permite crear y actualizar artículos y promociones e importar datos de sistemas externos.
Esto reduce el tiempo necesario para mantener y actualizar:
- catálogos que contienen muchos artículos
- promociones de cualquier tipo
- precios en función del país
Para mantener el compromiso de los usuarios, es esencial mantener actualizado el catálogo de artículos en el lado de Xsolla después de crearlo. Recomendamos actualizar el catálogo en el lado de Xsolla cuando se produzcan actualizaciones en su lado, como cuando se agreguen productos o se cambien los precios.
Puede:
La autorización básica se utiliza para las llamadas API. Introduzca la Authorization:Basic <your_authorization_basic_key>
, en la cual <your_authorization_basic_key>
es el par Merchant ID:clave de API codificado según el estándar Base64. Vaya a Cuenta del editor para encontrar estos parámetros:
- Merchant ID se muestra:
- en la sección Company settings > Company.
- En la URL de la barra de direcciones del navegador de cualquier página de Cuenta del editor. La URL tiene el siguiente formato:
https://publisher.xsolla.com/<merchant ID>/<Publisher Account section>
.
- Clave de API se muestra en la Cuenta del editor solo una vez cuando se crea y debe almacenarse en su servidor. Puede crear una nueva clave en la siguiente sección:
- Company settings > API keys
- Project settings > API keys
Crear y actualizar artículos
Si necesita crear varios artículos, puede crear un script que invoque el método API del tipo de artículo requerido el número de veces que sea necesario.
La lista de parámetros que se devuelve como respuesta a la solicitud de artículos es diferente de la lista de parámetros que debe transmitir al actualizar el catálogo. Además de los parámetros requeridos y actualizados, transmita los parámetros en el método de actualización de artículos que se devuelven como respuesta a la solicitud de artículos.
Ejemplo:
En el método Get virtual items, se devuelve un objeto
Artículos virtuales
Para actualizar el catálogo:
- Obtenga datos del catálogo con el método de API Get virtual item o Get all virtual items list.
- Transmita los nuevos valores del parámetro con el método de API Update virtual item.
Para crear artículos virtuales, utilice el método de API Create virtual item.
Moneda virtual
Para actualizar el catálogo:
- Obtenga datos del catálogo con el método de API Get virtual currency lis.
- Transmita los nuevos valores del parámetro con el método de API Update virtual currency.
Para crear moneda virtual, utilice el método de API Create virtual currency.
Paquetes de moneda virtual
Para actualizar el catálogo:
- Obtenga datos del catálogo con el método de API Get virtual currency list.
- Transmita los nuevos valores del parámetro con el método de API Update virtual currency package.
Para crear un paquete moneda virtual, utilice el método de API Create virtual currency package.
Lotes
Para actualizar el catálogo:
- Obtenga datos del catálogo con el método de API Get list of bundles.
- Transmita los nuevos valores de los parámetros con el método de API Update bundle.
Para crear un lote, utilice el método de API Create bundle.
Si desea agregar claves del juego, restricciones por países o precios a los lotes, utilice las instrucciones.
Crear y actualizar promociones
Cupones
Para actualizar la promoción:
- Obtenga datos del catálogo con los métodos de API Get coupon promotion o Get list of coupon promotions.
- Transmita los nuevos valores de los parámetros con el método de API Update coupon promotion.
- Active la promoción con el método de API Activate coupon promotion.
Para crear una promoción, utilice los métodos de API Create coupon promotion y, a continuación, Create coupon code para crear códigos de cupón personalizados o Generate coupon codes para generar códigos de cupón aleatorios.
Para desactivar una promoción, utilice el método de API Deactivate coupon promotion.
Códigos promocionales
Para actualizar la promoción:
- Obtenga datos del catálogo con los métodos de API Get promo codes promotion o Get list of promo codes promotions.
- Transmita los nuevos valores de los parámetros con el método de API Update promo codes promotion.
- Active la promoción con el método de API Activate promotion.
Para crear una promoción, utilice los métodos de API Create promo code promotion y, luego, Create code for promo code promotion para crear códigos promocionales personalizados o Generate codes for promo code promotion para generar códigos promocionales aleatorios.
Para desactivar una promoción, utilice el método de API Deactivate promo code promotion.
Descuentos
Para actualizar la promoción:
- Obtenga datos del catálogo con los métodos de API Get item promotion o Get list of item promotions.
- Transmita los nuevos valores de los parámetros con el método de API Update item promotion.
- Active la promoción con el método de API Activate promotion.
Para crear una promoción, use el método de API Create promotion for item.
Para desactivar una promoción, utilice el método de API Deactivate promotion.
Bonificaciones
Para actualizar la promoción:
- Obtenga datos del catálogo con los métodos de API Get bonus promotion o Get list of bonus promotions.
- Transmita los nuevos valores de los parámetros con el método de API Update bonus promotion.
- Active la promoción con el método de API Activate promotion.
Para crear una promoción, use el método de API Create bonus promotion.
Para desactivar una promoción, utilice el método de API Deactivate promotion.
Creación automática de artículos mediante API
Si tiene que crear numerosos artículos a partir de los datos de su sistema, puede automatizar este proceso mediante la API.
Tendrá que:
- Exportar los datos del artículo desde su sistema.
- Transformar los datos exportados a un formato que coincida con el formato de datos del método API del tipo de artículo requerido.
- Para cada artículo de la exportación, cree un script que invoque el método API requerido:
Si quiere utilizar grupos de artículo, créelos con antelación usando la interfaz de Cuenta del editor.
Si pretende usar varios tipos de artículos, deben crearse en el siguiente orden:
- Grupos de artículos en Cuenta del editor.
- Monedas virtuales.
- Artículos virtuales.
- Paquetes de moneda virtual.
- Lotes.
A continuación, presentamos un ejemplo de script que invoca repetidamente el método Create virtual item para crear artículos virtuales.
El script se desarrolla utilizando JavaScript y el tiempo de ejecución de JavaScript: Node.js.
- Importe la función
fetch
del módulo“node-fetch”
para enviar solicitudes HTTP al servidor de Xsolla.
- javascript
import fetch from "node-fetch";
- Establezca las constantes necesarias para la autorización de la solicitud. En lugar de
<your project_id from PA>
y<your api key from PA>
, ingrese sus valores para el ID del proyecto y la clave de API, que se codificarán usando Base64 para su posterior uso en las solicitudes a la 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')
- Implemente la función de ayuda
sleep
, la cual se usa para crear un retardo al enviar solicitudes. Esto es imprescindible para no exceder los límites de frecuencia de la solicitud a la API.
- javascript
function sleep(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}
- Implemente la función
getItems
, específica de su sistema, para recuperar los datos de los artículos desde su sistema.
- javascript
async function getItems() {
// receive items from the original system or read from a pre-prepared file
return items;
}
- Implemente la función
prepareData
, específica de su sistema, para dar formato a los datos del artículo según el formato de datos definido en la llamada API Create virtual item.
- javascript
function prepareData(items) {
// format items in accordance with API requirements
return formattedItems;
}
- Agregue la función
createItem
, la cual envía una solicitudPOST
a la API de Xsolla para crear un artículo virtual.
- 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),
});
}
- Agregue la función
checkItemExist
, la cual comprueba si existe un artículo virtual con un código de artículo (SKU) especificado. La función envía una solicitudGET
a la API de Xsolla:- Si se recibe una respuesta con un código HTTP
404
, el artículo con el SKU especificado no se localiza y hay que crearlo. - Si se recibe una respuesta con un código HTTP
200
, el artículo con el SKU especificado se localiza y no hay que crearlo.
- Si se recibe una respuesta con un código 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;
}
- Agregue la función
createItems
, la cual analiza la lista de artículos y comprueba si existe un artículo con un código de artículo (SKU) de su sistema en el lado de Xsolla. Si no hay ningún artículo con ese SKU, la función lo crea. La información del progreso se visualiza en la consola.
- 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`);
}
- Agregue la función
run
que invoca todas las funciones anteriores en el orden correcto.
- javascript
async function run() {
const items = await getItems();
const formattedItems = prepareData(items);
await createItems(formattedItems);
}
El código completo
- 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();
Actualizar mediante importación desde sistemas externos
Siga las instrucciones para importar datos de sistemas externos como PlayFab o Google Play.
¿Has encontrado una errata u otro error de texto? Selecciona el texto y pulsa Ctrl+Intro.