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
 1const webhookSecretKey = "<WebhookSecretKey>";
 2
 3exports.webhook = functions.https.onRequest((request, response) => {
 4  const requestRawBody = request.rawBody.toString("utf-8");
 5  const crypto = require("crypto");
 6  const sig = "Signature " + crypto
 7      .createHash("sha1")
 8      .update(requestRawBody + webhookSecretKey)
 9      .digest("hex");
10  if (request.headers.authorization !== sig) {
11    response.status(401).send();
12    return;
13  }
14
15  // TODO Replace this block with your game's logic for purchases handling
16  switch (request.body.notification_type) {
17    case "order_paid": {
18      const userId = request.body.user.external_id;
19      const skus = request.body.items.map(function(it) {
20        return it.sku;
21      }).join(", ");
22      const price =
23          `${request.body.order.amount} ${request.body.order.currency}`;
24      functions.logger.log(
25          "Order Paid\n",
26          `A user ${userId} has just paid ${price} for ${skus}\n`,
27          "Full Data\n",
28          request.body
29      );
30      break;
31    }
32    case "order_canceled": {
33      const userId = request.body.user.external_id;
34      const orderId = request.body.order.id;
35      functions.logger.log(
36          "Order Canceled\n",
37          `A user ${userId} has just canceled order ${orderId}\n`,
38          "Full Data\n",
39          request.body
40      );
41      break;
42    }
43  }
44
45  response.status(204).send();
46});
  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
 1const webhookSecretKey = "<WebhookSecretKey>";
 2
 3module.exports = async function (context, request) {
 4    const requestRawBody = request.rawBody.toString("utf-8");
 5    const crypto = require("crypto");
 6    const sig = "Signature " + crypto
 7        .createHash("sha1")
 8        .update(requestRawBody + webhookSecretKey)
 9        .digest("hex");
10    if (request.headers.authorization !== sig) {
11        context.res = {
12            status: 401
13        };
14        return;
15    }
16
17    // TODO Replace this block with your game's logic for purchases handling
18    switch (request.body.notification_type) {
19        case "order_paid": {
20            const userId = request.body.user.external_id;
21            const skus = request.body.items.map(function (it) {
22                return it.sku;
23            }).join(", ");
24            const price =
25                `${request.body.order.amount} ${request.body.order.currency}`;
26            context.log(
27                "Order Paid\n" +
28                `A user ${userId} has just paid ${price} for ${skus}\n` +
29                "Full Data\n" +
30                JSON.stringify(request.body)
31            );
32            break;
33        }
34        case "order_canceled": {
35            const userId = request.body.user.external_id;
36            const orderId = request.body.order.id;
37            context.log(
38                "Order Canceled\n" +
39                `A user ${userId} has just canceled order ${orderId}\n` +
40                "Full Data\n" +
41                JSON.stringify(request.body)
42            );
43            break;
44        }
45    }
46
47    context.res = {
48        status: 204
49    };
50}
  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: 19 de Setembro de 2025

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!
Não conseguimos enviar seu feedback
Tente novamente mais tarde ou contate-nos via doc_feedback@xsolla.com.