Recibir webhooks de Xsolla

Al procesar una compra, Xsolla envía webhooks para notificar varios eventos (p. ej., cancelación de pago, obtener el contenido de una cesta). Puede usar estos webhooks para:

  • añadir compras al inventario del jugador tanto si usa su propia solución como una solución de terceros
  • implementar su propia lógica para verificar y procesar un pedido para registrar información, conceder recompensas, ofrecer descuentos por un pedido, etc.

Para recibir webhooks en el lado de BaaS (Back-end como servicio), añada funciones prediseñadas a su proyecto siguiendo las instrucciones de Firebase y PlayFab.

Añadir Cloud Function al proyecto Firebase

  1. Inicie su proyecto Firebase.
  2. Importe la función de recepción de webhooks, dentro de la cual <WebhookSecretKey> es la Secret key que se encuentra en Cuenta del editor en la sección Project settings > Webhooks.

Código de función para recibir webhooks:

Copy
Full screen
Small screen
const webhookSecretKey = "<WebhookSecretKey>";

exports.webhook = functions.https.onRequest((request, response) => {
  const requestRawBody = request.rawBody.toString("utf-8");
  const crypto = require("crypto");
  const sig = "Signature " + crypto
      .createHash("sha1")
      .update(requestRawBody + webhookSecretKey)
      .digest("hex");
  if (request.headers.authorization !== sig) {
    response.status(401).send();
    return;
  }

  // TODO Replace this block with your game's logic for purchases handling
  switch (request.body.notification_type) {
    case "order_paid": {
      const userId = request.body.user.external_id;
      const skus = request.body.items.map(function(it) {
        return it.sku;
      }).join(", ");
      const price =
          `${request.body.order.amount} ${request.body.order.currency}`;
      functions.logger.log(
          "Order Paid\n",
          `A user ${userId} has just paid ${price} for ${skus}\n`,
          "Full Data\n",
          request.body
      );
      break;
    }
    case "order_canceled": {
      const userId = request.body.user.external_id;
      const orderId = request.body.order.id;
      functions.logger.log(
          "Order Canceled\n",
          `A user ${userId} has just canceled order ${orderId}\n`,
          "Full Data\n",
          request.body
      );
      break;
    }
  }

  response.status(204).send();
});
  1. Implementar la lógica para manejar webhooks.
Nota
La función está diseñada para recibir webhooks relacionados con la obtención del contenido de una cesta al hacer una compra y cancelar un pago. Puede implementar el procesamiento de webhooks relacionados con otros eventos en la página de pago usted mismo.
  1. Implemente la función en un entorno de producción siguiendo este ejemplo.
  2. En la consola de Firebase, vaya a Build > Functions y copie la URL de la función de recepción de webhooks.
  3. Abra su proyecto en Cuenta del editor.
  4. Vaya a Project Settings > Webhooks.
  5. En el campo Webhook server, especifique la URL de la función de recepción de webhooks.

Añadir Cloud Script al proyecto PlayFab

Nota
Los scripts de PlayFab Cloud no admiten directamente funciones con desencadenadores HTTP, por lo que se utilizan Azure Functions para implementar la recepción de webhooks.

  1. Prepare el entorno de desarrollo para trabajar con Azure Functions.
  2. Siguiendo el ejemplo, añada una función para recibir webhooks, dentro de la cual <WebhookSecretKey> sea la Secret key que se encuentra en Cuenta del editor, en la sección Project settings > Webhooks.

Código de función para recibir webhooks:

Copy
Full screen
Small screen
const webhookSecretKey = "<WebhookSecretKey>";

module.exports = async function (context, request) {
    const requestRawBody = request.rawBody.toString("utf-8");
    const crypto = require("crypto");
    const sig = "Signature " + crypto
        .createHash("sha1")
        .update(requestRawBody + webhookSecretKey)
        .digest("hex");
    if (request.headers.authorization !== sig) {
        context.res = {
            status: 401
        };
        return;
    }

    // TODO Replace this block with your game's logic for purchases handling
    switch (request.body.notification_type) {
        case "order_paid": {
            const userId = request.body.user.external_id;
            const skus = request.body.items.map(function (it) {
                return it.sku;
            }).join(", ");
            const price =
                `${request.body.order.amount} ${request.body.order.currency}`;
            context.log(
                "Order Paid\n" +
                `A user ${userId} has just paid ${price} for ${skus}\n` +
                "Full Data\n" +
                JSON.stringify(request.body)
            );
            break;
        }
        case "order_canceled": {
            const userId = request.body.user.external_id;
            const orderId = request.body.order.id;
            context.log(
                "Order Canceled\n" +
                `A user ${userId} has just canceled order ${orderId}\n` +
                "Full Data\n" +
                JSON.stringify(request.body)
            );
            break;
        }
    }

    context.res = {
        status: 204
    };
}
  1. Implementar la lógica para manejar webhooks.
Nota
La función está diseñada para recibir webhooks relacionados con la obtención del contenido de una cesta al hacer una compra y cancelar un pago. Puede implementar el procesamiento de webhooks relacionados con otros eventos en la página de pago usted mismo.
  1. Implemente la función en un entorno de producción.
  2. Copie la URL de la función.
  3. Vaya a su proyecto de PlayFab.
  4. Registre la función Cloud Script.
  5. Abra su proyecto en Cuenta del editor.
  6. Vaya a Project Settings > Webhooks.
  7. En el campo Webhook server, especifique la URL de la función de recepción de webhooks.
¿Te ha resultado útil este artículo?
¡Gracias!
¿Hay algo en lo que podamos mejorar? Mensaje
Lo sentimos
Por favor, cuéntanos por qué no te ha resultado útil este artículo. Mensaje
¡Gracias por tu mensaje!
Nos ayudará a mejorar tu experiencia.
Valore esta página
Valore esta página
¿Hay algo en lo que podamos mejorar?

Prefiero no responder

¡Gracias por tu mensaje!
Última actualización: 22 de Enero de 2024

¿Has encontrado una errata u otro error de texto? Selecciona el texto y pulsa Ctrl+Intro.

Informar de un problema
Nos esforzamos por ofrecer contenido de calidad. Tus comentarios nos ayudan a mejorar.
Déjanos tu correo electrónico para que te podamos responder
¡Gracias por tu mensaje!