Receba webhooks Xsolla

Ao processar uma compra, a Xsolla envia webhooks para notificar vários eventos (por exemplo, cancelamento de pagamento, obtenção do conteúdo de um carrinho). Você pode usar esses webhooks para:

  • adicionar compras ao inventário do jogador, se você usar sua própria solução ou uma solução terceirizada
  • implemente sua própria lógica para verificar e processar um pedido para registrar informações, conceder recompensas, dar descontos para um pedido, etc.

Para receber webhooks no lado do BaaS, adicione funções de uso pronto ao seu projeto seguindo as instruções para Firebase e PlayFab.

Adicione a Cloud Function ao projeto Firebase

  1. Inicialize seu projeto Firebase.
  2. Importe a função de recebimento de webhooks, dentro da qual <WebhookSecretKey> é a Secret key encontrada na Conta de Distribuidor na seção Project settings > Webhooks.

Código de função para receber 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. Implemente a lógica para manipular webhooks.
Observação
A função é feita para receber webhooks relacionados à obtenção do conteúdo de um carrinho ao fazer uma compra e ao cancelamento de pagamentos. Você mesmo pode implementar o processamento dos webhooks relacionados a outros eventos na página de pagamento.
  1. Implemente a função do ambiente de produção conforme este exemplo.
  2. No console do Firebase, vá para Build > Functions e copie o URL da função de recebimento de webhooks.
  3. Abra seu projeto na Conta de Distribuidor.
  4. Vá para Project Settings > Webhooks.
  5. No campo Webhook server, especifique o URL da função de recebimento de webhooks.

Adicione o Cloud Script ao projeto PlayFab

Observação
Os Cloud Scripts PlayFab não oferecem suporte direto a funções com gatilhos HTTP, portanto, são usadas funções do Azure para implementar o recebimento de webhooks.

  1. Prepare o ambiente de desenvolvimento para trabalhar com Azure Functions.
  2. Seguindo o exemplo, adicione uma função para receber webhooks, dentro da qual <WebhookSecretKey> é a Secret key encontrada na Conta de Distribuidor na seção Project settings > Webhooks.

Código de função para receber 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. Implemente a lógica para manipular webhooks.
Observação
A função é feita para receber webhooks relacionados à obtenção do conteúdo de um carrinho ao fazer uma compra e ao cancelamento de pagamentos. Você mesmo pode implementar o processamento dos webhooks relacionados a outros eventos na página de pagamento.
  1. Implante a função em um ambiente de produção.
  2. URL da função de cópia.
  3. Vá para seu projeto PlayFab.
  4. Registre a função Cloud Script.
  5. Abra seu projeto na Conta de Distribuidor.
  6. Vá para Project Settings > Webhooks.
  7. No campo Webhook server, especifique o URL da função de recebimento de webhooks.
Este artigo foi útil?
Obrigado!
Podemos melhorar alguma coisa? Mensagem
Que pena ouvir isso
Explique porque este artigo não foi útil para você. Mensagem
Obrigado pelo seu feedback!
Avaliaremos sua mensagem e a usaremos para melhorar sua experiência.
Última atualização: 22 de Janeiro de 2024

Encontrou um erro de texto ou digitação? Selecione o texto e pressione Ctrl+Enter.

Relatar um problema
Nós sempre avaliamos nossos conteúdos. Seu feedback nos ajuda a melhorá-los.
Forneça um e-mail para que possamos responder
Obrigado pelo seu feedback!