# Webhooks
# Visão geral
Webhooks são notificações sobre eventos que ocorrem no sistema. Quando ocorre
um evento específico, a Xsolla envia uma solicitação HTTP na qual os dados do
evento são transmitidos para seu aplicativo. Isso geralmente é uma solicitação
POST no formato JSON.
Exemplos de eventos:
- interação do usuário com um catálogo de itens
- pagamento ou cancelamento de um pedido
Quando um evento definido acontece, a Xsolla notifica o seu sistema sobre o
pagamento através de um webhook. Como resultado, você pode executar ações como:
- repor o saldo do usuário
- fazer um reembolso de pagamento
- creditar ou debitar novos itens da conta do usuário
- começar a fornecer uma assinatura
- bloquear um usuário em caso de suspeita de fraude
Exemplo de um fluxo de trabalho de webhook de processamento de pagamentos:

Observação
Dependendo da solução utilizada e do tipo de integração, o conjunto de webhooks e a sequência de interações podem ser diferentes do exemplo fornecido.
Guia de vídeo para integração de webhooks da Xsolla:
Configurações de webhooks ao trabalhar com produtos e soluções Xsolla:
| Produto/Solução |
Obrigatório/Opcional |
Para que servem os webhooks |
| Pagamentos |
Obrigatório |
- Validação do usuário.
- Receber informações sobre dados da transação em casos de pagamento bem-sucedido ou reembolso de pagamento.
- Creditar itens comprados a um usuário e debitar itens em caso de cancelamento do pedido.
|
| In-Game Store |
Obrigatório |
- Validação do usuário.
- Receber informações sobre dados da transação em casos de pagamento bem-sucedido ou reembolso de pagamento.
- Creditar itens comprados a um usuário e debitar itens em caso de cancelamento do pedido.
|
| Game Sales |
Opcional |
Para vender chaves de jogo, a validação do usuário e o ato de creditar itens não são necessários. Você pode conectar webhooks se quiser receber informações sobre eventos, como pagamento ou cancelamento de pedido. Se você conectar webhooks, é importante processar todos os webhooks necessários acionados.
|
| Subscriptions |
Opcional |
Recebendo informações sobre criação, atualização ou cancelamento de uma assinatura. Como alternativa, você pode solicitar informações por meio da API.
|
| Web Shop |
Obrigatório |
- Validação do usuário.
- Receber informações sobre dados da transação em casos de pagamento bem-sucedido ou reembolso de pagamento.
- Creditar itens comprados a um usuário e debitar itens em caso de cancelamento do pedido.
- Autenticação de usuários, se você usa autenticação via ID de usuário. Como alternativa, você pode usar autenticação de usuários via Xsolla Login.
|
| Digital Distribution Hub |
Obrigatório |
- Validação do usuário.
- Vinculando o ID de transação no lado da Xsolla com o ID da transação em seu sistema.
- Transferência de parâmetros de transação adicionais no pedido.
- Creditar itens comprados ao usuário e debitar itens em caso de cancelamento do pedido.
Consulte a documentação para obter informações detalhadas sobre como configurar webhooks para o Digital Distribution Hub.
|
| Login |
Opcional |
Recebendo informações do evento:
- cadastro do usuário/autorização
- confirmação de endereço de e-mail do usuário
- vinculando a conta de mídia social de um usuário
Consulte a documentação de Login para obter informações detalhadas sobre como configurar webhooks.
|
# Lista de webhooks necessários
Se você usa produtos e soluções que exijam trabalhar com webhooks, habilite e teste os webhooks em sua Conta de Distribuidor e configure o processamento
deles. Quando ocorrem eventos específicos, os webhooks são enviados
sequencialmente. Portanto, se você não processar um dos webhooks, os webhooks
subsequentes não serão enviados. A lista de webhooks necessários é apresentada
abaixo.
## In-Game Store e Payments
2 opções de envio de webhook foram configuradas no lado da Xsolla ao comprar e
devolver itens no site — informações com dados de pagamento e transação, e
informações sobre itens comprados, podem vir separadamente ou podem ser
combinadas em um webhook.
Recebimento de informações em webhooks combinados:
Se você se registrou na Conta de
Distribuidor após 22 de janeiro de 2025, você receberá todas as informações
nos webhooks Pagamento
bem-sucedido do pedido (`order_paid`) e Cancelamento do pedido (`order_canceled`). Nesse caso, você
não precisa processar os webhooks Pagamento (`payment`) e Reembolso (`refund`).
Recebimento de informações em webhooks separados:
Se você se registrou na Conta de
Distribuidor até 22 de janeiro de 2025, você receberá os seguintes webhooks:
- Pagamento (`payment`) e Reembolso (`refund`) com informações
sobre dados de pagamento e detalhes da transação.
- Pagamento bem-
sucedido do pedido (`order_paid`) e Cancelamento do pedido (`order_canceled`) com
informações sobre os itens comprados.
Você precisa processar todos os webhooks de entrada. Para alternar para a nova
opção com o recebimento de webhooks combinados, entre em contato com seus
Gerentes de Sucesso do Cliente ou envie um e-mail para csm@xsolla.com.
Para o pleno funcionamento gerenciamento da loja do jogo e de pagamentos, é
necessário implementar o processamento dos principais webhooks.
Se você receber webhooks combinados:
| Nome e tipo do webhook |
Descrição |
Validação de usuário > Validação de usuário (user_validation) |
É enviado em diferentes estágios do processo de pagamento para garantir que o usuário esteja registrado no jogo. |
Serviços de jogo > Webhooks combinados > Pagamento bem-sucedido do pedido (order_paid) |
Ele contém dados de pagamento, detalhes da transação e informações sobre itens comprados. Use os dados do webhook para adicionar itens ao usuário. |
Serviços de jogo > Webhooks combinados > Cancelamento de pedidos (order_canceled) |
Ele contém dados do pagamento cancelado, detalhes da transação e informações sobre itens comprados. Use os dados do webhook para remover os itens comprados. |
Se você receber webhooks separados:
| Nome e tipo do webhook |
Descrição |
Validação de usuário > Validação de usuário (user_validation) |
É enviado em diferentes estágios do processo de pagamento para garantir que o usuário esteja registrado no jogo. |
Pagamentos > Pagamento (payment) |
Ele contém dados de pagamento e detalhes da transação. |
Serviços de jogo > Webhooks separados > Pagamento bem-sucedido do pedido (order_paid) |
Ele contém informações sobre itens comprados. Use os dados do webhook para adicionar itens ao usuário. |
Pagamentos > Reembolso (refund) |
Ele contém dados de pagamento e detalhes da transação. |
Serviços de jogo > Webhooks separados > Cancelamento de pedidos (order_canceled) |
Ele contém informações sobre os itens comprados e o ID da transação cancelada. Use os dados do webhook para remover os itens comprados. |
Se a personalização
do catálogo de itens for implementada no lado do aplicativo, configure o
processamento do webhook Personalização de catálogo do lado do parceiro.
## Subscriptions
Para gerenciar automaticamente os planos de assinatura, é necessário
implementar o processamento dos principais webhooks:
- Validação de usuário
(`user_validation`) — é enviado em diferentes estágios do processo de pagamento
para garantir que o usuário esteja registrado no jogo.
- Pagamento (`payment`) — é enviado
quando um pedido é pago e contém dados de pagamento e detalhes da transação.
- Assinatura criada
(`create_subscription`) — é enviado quando um webhook Pagamento foi processado com êxito ou o
usuário comprou uma assinatura com um período de avaliação. Ele contém os dados
da assinatura comprada e os do usuário. Use os dados do webhook para adicionar
uma assinatura ao usuário.
- Assinatura atualizada
(`update_subscription`) — é enviado quando uma assinatura é renovada ou
alterada, quando um webhook Pagamento
foi processado com êxito. Ele contém os dados da assinatura comprada e os dados
do usuário. Use os dados do webhook para estender a assinatura do usuário ou
alterar os parâmetros de assinatura.
- Reembolso (`refund`) — é enviado
quando um pedido é cancelado e contém os dados de pagamento cancelados e
detalhes da transação.
- Assinatura cancelada
(`cancel_subscription`) — é enviadao quando um webhook Reembolso foi processado com êxito ou a
assinatura foi cancelada por outro motivo. Ele contém informações sobre a
assinatura e os dados do usuário. Use os dados do webhook para deduzir
assinaturas compradas do usuário.
# Configure webhooks na Conta de Distribuidor
## Configurações gerais
Para habilitar o recebimento de webhooks:
1. No projeto na Conta de Distribuidor, acesse a seção Configurações
do Projeto > Webhooks.
2. No campo Servidor de webhooks, especifique o URL do servidor onde você
deseja receber webhooks no formato `https://example.com`. Você também pode
especificar o URL encontrado em uma ferramenta para testar webhooks.
Atenção
O protocolo HTTPS é usado para transferir dados; o protocolo HTTP não é suportado.
3. Uma chave secreta para assinar webhooks de projeto é gerada por padrão. Se
quiser gerar uma nova chave secreta, clique no ícone de atualização.
4. Clique em Enable webhooks.

Observação
Para testar webhooks, você pode selecionar qualquer site dedicado, como webhook.site, ou uma plataforma, como ngrok.
Observação
Não é possível enviar webhooks simultaneamente para URLs diferentes. O que você pode fazer na Conta de Distribuidor é especificar um URL para teste primeiro e, em seguida, substituí-lo pelo real.
Para desativar o recebimento de webhooks:
1. No projeto na Conta de Distribuidor, acesse a seção Configurações
do Projeto > Webhooks.
2. Clique em Desativar webhooks.
## Configurações avançadas
As configurações avançadas são disponibilizadas para os webhooks na seção Pagamentos e Loja. Eles aparecerão automaticamente no bloco
Configurações gerais depois que você clicar no botão
Obter webhooks.
Observação
Se as configurações avançadas não forem exibidas, verifique se a recepção do webhook está conectada nas configurações gerais e se você está na aba Teste > Pagamentos e Loja.
Nesta seção, você pode configurar o recebimento de informações adicionais em
webhooks. Para fazer isso, coloque os interruptores correspondentes na posição
ativa. A linha de cada permissão indica os webhooks que serão afetados pela
alteração das configurações.
| Opção |
Descrição |
| Exibir informações sobre a conta de pagamento salva |
As informações sobre a forma de pagamento salva são passadas no objeto personalizado payment_account. |
| Exibir informações sobre transações pelos métodos de pagamento salvos |
As informações são passadas nos seguintes parâmetros personalizados do webhook: saved_payment_method:0 — o método de pagamento guardado não foi utilizado1 — o método de pagamento foi salvo ao efetuar o pagamento atual2 — o método de pagamento previamente guardado é utilizado
payment_type:1 — pagamento único2 — pagamento recorrente
|
| Adicionar objeto de ordem ao webhook |
As informações sobre o pedido são passadas no objeto order do webhook Pagamento. |
| Enviar apenas os parâmetros de usuário necessários sem dados confidenciais |
Somente as seguintes informações sobre o usuário são passadas no webhook: |
| Enviar parâmetros personalizados |
As informações sobre os parâmetros de token personalizados são passadas no webhook. |
| Exibir BIN e sufixo do cartão |
As seguintes informações sobre o número do cartão bancário são passadas no webhook: - os primeiros 6 dígitos no parâmetro
card_bin - os últimos 4 dígitos no
card_suffix
|
| Exibir marca do cartão |
A bandeira do cartão utilizado para efetuar o pagamento. Por exemplo, Mastercard ou Visa. |

# Teste webhooks na Conta de Distribuição
Testar webhooks ajuda a garantir a configuração correta do projeto tanto do seu
lado quanto do lado da Xsolla.
Se os webhooks forem configurados com êxito, uma seção de teste de webhooks
será exibida abaixo da seção de configuração de webhooks.

A seção de testes na Conta de Distribuidor varia de acordo com a opção de
recebimento do webhook.
Se você receber webhooks combinados:
Se você receber webhooks separados:
Observação
Se um aviso de que o teste não passou aparecer na seção de testes, verifique as configurações de resposta do webhook no ouvinte do webhook. As razões para os erros no teste são indicadas nos resultados do teste.
Exemplo:
Você usa o site especializado webhook.site para teste.
Um erro é exibido na seção Teste de respostas a assinaturas inválidas.
Isso acontece porque a Xsolla envia um webhook com uma assinatura incorreta e espera que seu manipulador responda com um código HTTP 4xx especificando o código de erro INVALID_SIGNATURE.
webhook.site envia um código HTTP 200 em resposta a todos os webhooks, incluindo um webhook com uma assinatura incorreta. O código HTTP 4xx esperado não pode ser obtido e, portanto, um erro é exibido no resultado do teste.

O processo de teste para o cenário com webhooks combinados é descrito abaixo.
## Pagamentos e Loja
Na aba Pagamentos e Loja, você pode testar os seguintes webhooks:
- Validação de usuário
(`user_validation`)
- Pagamento bem-sucedido
do pedido (`order_paid`)
- Cancelamento do pedido
(`order_canceled`)
Para testar:
1. Na seção de teste de webhooks, vá para a aba Pagamentos e Loja.
2. No menu suspenso, selecione o tipo de item. Se o item do tipo selecionado não
estiver configurado na Conta de Distribuidor, clique em:
* Conectar – se o módulo com itens desse tipo não estiver conectado
* Configurar – se você conectou o módulo anteriormente, mas não concluiu a
configuração
Ao clicar no botão, você será redirecionado para a seção de
Conta de Distribuidor correspondente ao tipo do item selecionado. Depois de
criar o item, retorne à seção de teste de webhook e prossiga para a próxima
etapa.
3. Preencha os campos necessários: - Selecione o SKU dos itens na
lista suspensa e indique a quantidade. Você pode escolher vários itens do mesmo
tipo clicando em + e adicionando-os em uma nova linha.
- ID de
Usuário — ao testar, você pode usar qualquer combinação de letras e
dígitos.
- ID de Usuário Público — ID conhecido por um usuário,
como um e-mail ou apelido. Este campo é exibido se o ID de Usuário Público
estiver habilitado em seu projeto nas Configurações da Pay Station >
Configurações.
- Insira qualquer valor no campo ID do Pedido
Xsolla.
- ID de Fatura Xsolla — ID da transação no lado da
Xsolla. Ao testar, você pode usar qualquer valor numérico.
- ID da
Fatura — ID da transação no lado do seu jogo. Ao testar, você pode usar
qualquer combinação de letras e dígitos. Não é um parâmetro necessário para um
pagamento bem-sucedido, mas você pode passá-lo para vincular o ID da transação
do seu lado ao ID da transação do lado da Xsolla.
- Valor —
quantia do pagamento. Ao testar, você pode usar qualquer valor numérico.
- Moeda — selecione uma moeda na lista suspensa.
4. Clique em Testar webhooks.
Os webhooks Validação do
usuário, Pagamento
bem-sucedido do pedido e Cancelamento do pedido com os dados especificados são
enviados para o URL fornecido. Os resultados do teste de cada tipo de webhook
são exibidos abaixo do botão Testar webhooks.
Se o ID de usuário público estiver ativado em seu projeto, você também verá os
resultados de uma verificação de pesquisa de usuário.
Para cada webhook, você precisa configurar o processamento de ambos os
cenários: um bem-sucedido e outro com um erro.

## Subscriptions
Na aba Subscriptions, você pode testar os seguintes webhooks:
- Validação de usuário
(`user_validation`)
- Payment (`payment`)
Observação
Na Conta de Distribuidor, você só pode testar webhooks básicos de Validação de Usuário e Pagamento. Para testar outros tipos de webhook, vá para:
Observação
Para testar webhooks, você deve ter pelo menos um plano de assinatura criado na seção Conta de Distribuidor > Assinaturas > Planos de Assinatura.
Para testar: - na seção de testes, vá para a aba
Assinaturas.
- Preencha os campos necessários:
- ID de Usuário — ao testar, você pode usar qualquer combinação de
letras e dígitos.
- ID de Fatura Xsolla — ID da transação no lado
Xsolla. Ao testar, você pode usar qualquer valor numérico.
- ID de
Usuário Público — ID conhecido por um usuário, como um e-mail ou um
apelido. Esse campo será exibido se o ID de usuário público estiver habilitado
em seu projeto na seção Pay Station > Settings > Additional
settings.
- Moeda — selecione uma moeda na lista suspensa.
- ID do Plano — um plano de assinatura. Escolha um plano na lista
suspensa.
- Produto de assinatura — escolha um produto na lista
suspensa (opcional).
- Valor — quantia do pagamento. Ao testar,
você pode usar qualquer valor numérico.
- ID de Fatura — ID da
transação no lado do jogo. Ao testar, você pode usar qualquer combinação de
letras e dígitos. Não é um parâmetro necessário para um pagamento bem-sucedido,
mas você pode passá-lo para vincular o ID da transação do seu lado ao ID da
transação no lado da Xsolla.
- Período experimental. Para testar
a comp
ra de uma assinatura sem um período de avaliação ou para testar a renovação de uma assinatura, especifique o valor
0.
- Clique em Testar webhooks.
No URL especificado, você receberá webhooks com dados preenchidos. Os
resultados do teste de cada webhook, tanto para um cenário bem-sucedido quanto
para um cenário com um erro, são exibidos no botão Testar webhooks.
# Ouvinte webhook
Ouvinte webhook é o código de programa que permite receber webhooks acionados
em um endereço URL especificado, gerando uma assinatura e enviando uma resposta para o servidor webhook Xsolla.
No lado do aplicativo, implemente o recebimento de webhooks dos seguintes
endereços IP:
- `185.30.20.0/24`
- `185.30.21.0/24`
- `185.30.22.0/24`
- `185.30.23.0/24`
- `34.102.38.178`
- `34.94.43.207`
- `35.236.73.234`
- `34.94.69.44`
- `34.102.22.197`
Se você integrou o produto Login, adicione também o
processamento de webhooks dos seguintes endereços IP:
- `34.94.0.85`
- `34.94.14.95`
- `34.94.25.33`
- `34.94.115.185`
- `34.94.154.26`
- `34.94.173.132`
- `34.102.48.30`
- `35.235.99.248`
- `35.236.32.131`
- `35.236.35.100`
- `35.236.117.164`
Limitações:
- Não deve haver várias transações bem-sucedidas com o mesmo ID no banco de dados
do aplicativo.
- Se o ouvinte do webhook recebeu um webhook com um ID que já existe no banco de
dados, você precisará retornar o resultado do processamento anterior dessa
transação. Não é recomendável creditar o usuário com uma compra duplicada e
criar registros duplicados no banco de dados.
## Geração de assinatura
Para garantir a transmissão segura de dados, você deve verificar se o webhook
foi realmente enviado do servidor Xsolla e se não foi adulterado durante a
transmissão. Para fazer isso, gere sua própria assinatura com base no conteúdo
do corpo da solicitação e compare-a com a assinatura fornecida no cabeçalho
`authorization` da solicitação de entrada. Se as assinaturas corresponderem, o
webhook é autêntico e seguro de processar.
Etapas de verificação:
1. Recupere a assinatura do cabeçalho `authorization` da solicitação de webhook de
entrada. O formato do cabeçalho é `Signature `.
2. Recupere o corpo da solicitação do webhook no formato JSON. Aviso
Use o conteúdo JSON exatamente
como foi recebido. Não analise nem recodifique a carga, pois isso alterará a
formatação e fará com que a verificação da assinatura falhe.
3. Gere sua própria assinatura para comparação: - Concatene a
carga JSON com a chave secreta do seu projeto anexando a chave ao final da
cadeia de caracteres.
- Aplique a função de hash criptográfico SHA-1 à
cadeia de caracteres resultante. O resultado será uma cadeia de caracteres
hexadecimal em letras minúsculas.
4. Compare sua assinatura gerada com a `authorization` do cabeçalho. Se elas
corresponderem, o webhook é autêntico.
Abaixo, você pode encontrar exemplos de implementação de geração de assinatura
para as seguintes linguagens: C#, C++, Go, PHP e Node.js.
### Exemplo de um webhook (HTTP):
```http
POST /your_uri HTTP/1.1
host: your.host
accept: application/json
content-type: application/json
content-length: 165
authorization: Signature 52eac2713985e212351610d008e7e14fae46f902
{
"notification_type":"user_validation",
"user":{
"ip":"127.0.0.1",
"phone":"18777976552",
"email":"email@example.com",
"id":1234567,
"name":"Xsolla User",
"country":"US"
}
}
```
### Exemplo de um webhook (curl):
```bash
curl -v 'https://your.hostname/your/uri' \
-X POST \
-H 'authorization: Signature 52eac2713985e212351610d008e7e14fae46f902' \
-d '{
"notification_type":
"user_validation",
"user":
{
"ip": "127.0.0.1",
"phone": "18777976552",
"email": "email@example.com",
"id": 1234567,
"name": "Xsolla User",
"country": "US"
}
}'
```
### Exemplo C# de implementação da geração de assinaturas (amostra geral):
Observação
Este exemplo de código é compatível com o .NET Framework 4.0 e posterior, bem como com o .NET Core e outras versões modernas do .NET. A verificação de assinatura usa comparação de tempo constante por meio do método ConstantTimeEquals para ajudar a evitar ataques de tempo.
```csharp
using System;
using System.Security.Cryptography;
using System.Text;
public static class XsollaWebhookSignature
{
public static string ComputeSha1(string jsonBody, string secretKey)
{
// Concatenation of the JSON from the request body and the project's secret key
string dataToSign = jsonBody + secretKey;
using (SHA1 sha1 = SHA1.Create())
{
byte[] hashBytes = sha1.ComputeHash(Encoding.UTF8.GetBytes(dataToSign));
// Convert hash bytes to lowercase hexadecimal string
var hexString = new StringBuilder(hashBytes.Length * 2);
foreach (byte b in hashBytes)
{
hexString.Append(b.ToString("x2"));
}
return hexString.ToString();
}
}
public static bool VerifySignature(string jsonBody, string secretKey, string receivedSignature)
{
string computedSignature = ComputeSha1(jsonBody, secretKey);
string receivedSignatureLower = receivedSignature.ToLower();
// Use constant-time comparison to prevent timing attacks
return ConstantTimeEquals(computedSignature, receivedSignatureLower);
}
private static bool ConstantTimeEquals(string a, string b)
{
if (a.Length != b.Length)
{
return false;
}
int result = 0;
for (int i = 0; i < a.Length; i++)
{
result |= a[i] ^ b[i];
}
return result == 0;
}
}
```
### Exemplo C# de implementação de geração de assinatura (.NET 5.0 e posterior):
Observação
Para usar o método Convert.ToHexString, você precisa do .NET 5.0 e posterior.
Se você tiver o .NET 7.0 e posterior, também poderá usar o método
CryptographicOperations.FixedTimeEquals em vez de
ConstantTimeEquals.
```csharp
// For .NET 5.0 and later, you can use the more concise Convert.ToHexString method:
using System;
using System.Security.Cryptography;
using System.Text;
public static class XsollaWebhookSignature
{
public static string ComputeSha1(string jsonBody, string secretKey)
{
string dataToSign = jsonBody + secretKey;
using var sha1 = SHA1.Create();
byte[] hashBytes = sha1.ComputeHash(Encoding.UTF8.GetBytes(dataToSign));
return Convert.ToHexString(hashBytes).ToLower();
}
public static bool VerifySignature(string jsonBody, string secretKey, string receivedSignature)
{
string computedSignature = ComputeSha1(jsonBody, secretKey);
string receivedSignatureLower = receivedSignature.ToLower();
// Use constant-time comparison to prevent timing attacks
return ConstantTimeEquals(computedSignature, receivedSignatureLower);
}
private static bool ConstantTimeEquals(string a, string b)
{
if (a.Length != b.Length)
{
return false;
}
int result = 0;
for (int i = 0; i < a.Length; i++)
{
result |= a[i] ^ b[i];
}
return result == 0;
}
}
```
### Exemplo C# de implementação de geração de assinatura (.NET 7.0 e posterior):
Observação
Se você tiver o .NET 7.0 e posterior, poderá usar o método CryptographicOperations.FixedTimeEquals.
```csharp
// For .NET 7.0+, you can use the built-in CryptographicOperations.FixedTimeEquals:
using System.Security.Cryptography;
public static bool VerifySignature(string jsonBody, string secretKey, string receivedSignature)
{
string computedSignature = ComputeSha1(jsonBody, secretKey);
byte[] computedBytes = Encoding.UTF8.GetBytes(computedSignature);
byte[] receivedBytes = Encoding.UTF8.GetBytes(receivedSignature.ToLower());
return CryptographicOperations.FixedTimeEquals(computedBytes, receivedBytes);
}
```
### Exemplo C++ de implementação da geração de assinaturas:
```c++
#include
#include
#include
#include
class XsollaWebhookSignature {
public:
static std::string computeSha1(const std::string& jsonBody, const std::string& secretKey) {
// Concatenation of the JSON from the request body and the project's secret key
std::string dataToSign = jsonBody + secretKey;
unsigned char digest[SHA_DIGEST_LENGTH];
// Create SHA1 hash
SHA1(reinterpret_cast(dataToSign.c_str()),
dataToSign.length(), digest);
// Convert to lowercase hexadecimal string
std::ostringstream hexStream;
hexStream << std::hex << std::setfill('0');
for (int i = 0; i < SHA_DIGEST_LENGTH; ++i) {
hexStream << std::setw(2) << static_cast(digest[i]);
}
return hexStream.str();
}
static bool verifySignature(const std::string& jsonBody, const std::string& secretKey, const std::string& receivedSignature) {
std::string computedSignature = computeSha1(jsonBody, secretKey);
// Timing-safe comparison
if (computedSignature.length() != receivedSignature.length()) {
return false;
}
volatile unsigned char result = 0;
for (size_t i = 0; i < computedSignature.length(); ++i) {
result |= (computedSignature[i] ^ receivedSignature[i]);
}
return result == 0;
}
};
```
### Exemplo Go de implementação da geração de assinaturas:
```go
package main
import (
"crypto/sha1"
"crypto/subtle"
"encoding/hex"
"strings"
)
type XsollaWebhookSignature struct{}
func (x *XsollaWebhookSignature) ComputeSha1(jsonBody, secretKey string) string {
// Concatenation of the JSON from the request body and the project's secret key
dataToSign := jsonBody + secretKey
// Create SHA1 hash
h := sha1.New()
h.Write([]byte(dataToSign))
signature := h.Sum(nil)
// Convert to lowercase hexadecimal string
return strings.ToLower(hex.EncodeToString(signature))
}
func (x *XsollaWebhookSignature) VerifySignature(jsonBody, secretKey, receivedSignature string) bool {
computedSignature := x.ComputeSha1(jsonBody, secretKey)
receivedSignatureLower := strings.ToLower(receivedSignature)
// Use constant time comparison to prevent timing attacks
return subtle.ConstantTimeCompare([]byte(computedSignature), []byte(receivedSignatureLower)) == 1
}
```
### Exemplo PHP de implementação da geração de assinaturas:
```php
```
### Exemplo Node.js de implementação da geração de assinaturas:
```js
const crypto = require('crypto');
class XsollaWebhookSignature {
// IMPORTANT: jsonBody must be the raw JSON string exactly as received from Xsolla
static computeSha1(jsonBody, secretKey) {
// Concatenation of the JSON from the request body and the project's secret key
const dataToSign = jsonBody + secretKey;
// Create SHA1 hash
const hash = crypto.createHash('sha1');
hash.update(dataToSign, 'utf8');
// Convert to lowercase hexadecimal string
return hash.digest('hex').toLowerCase();
}
static verifySignature(jsonBody, secretKey, receivedSignature) {
const computedSignature = this.computeSha1(jsonBody, secretKey);
const cleanReceivedSignature = receivedSignature.toLowerCase();
// Check if signatures have the same length before using timingSafeEqual
if (computedSignature.length !== cleanReceivedSignature.length) {
return false;
}
try {
return crypto.timingSafeEqual(
Buffer.from(computedSignature, 'hex'),
Buffer.from(cleanReceivedSignature, 'hex')
);
} catch (error) {
// Return false if there's any error (e.g., invalid hex characters)
return false;
}
}
}
```
## Enviando respostas ao webhook
Para confirmar o recebimento do webhook, o servidor deve retornar:
* Código HTTP `200`, `201` ou `204` em caso de resposta bem-sucedida.
* Código HTTP `400` com uma descrição do problema se o
usuário especificado não for encontrado ou uma assinatura inválida for passada.
Seu manipulador de webhooks também pode retornar um código HTTP `5xx` em caso
de problemas temporários em seu servidor.
Se o servidor Xsolla não recebeu uma resposta aos webhooks Pagamento bem-sucedido do
pedido e Cancelamento do
pedido, ou recebeu uma resposta com um código `5xx`, os webhooks serão
reenviados de acordo com o seguinte agendamento:
* 2 tentativas com intervalo de 5 minutos
* 7 tentativas com intervalo de 15 minutos
* 10 tentativas com intervalo de 60 minutos
No máximo são feitas 20 tentativas de enviar webhooks dentro de 12 horas a
partir da primeira tentativa.
A lógica de repetição para os webhooks Pagamento e Reembolso está descrita na página
correspondente do webhook.
Aviso
O pagamento ainda será reembolsado ao usuário se todas as seguintes condições forem atendidas:
- O reembolso foi iniciado pela Xsolla.
- Em resposta a um webhook, um código de status
4xx foi retornado, ou nenhuma resposta foi recebida após todas as tentativas repetidas, ou um código de status 5xx foi retornado.
Se o servidor Xsolla não recebeu uma resposta ao webhook Validação de usuário ou recebeu
uma resposta com um código de `400` ou `5xx`, o webhook Validação de usuário não será
reenviado. Nesse caso, o usuário vê um erro e os webhooks Pagamento e Pagamento bem-sucedido do pedido não são
enviados.
# Erros
Códigos de erro para o código HTTP 400:
| Código |
Mensagem |
| INVALID_USER |
Usuário inválido |
| INVALID_PARAMETER |
Parâmetro inválido |
| INVALID_SIGNATURE |
Assinatura inválida |
| INCORRECT_AMOUNT |
Quantia incorreta |
| INCORRECT_INVOICE |
Invoice incorreto |
```
HTTP/1.1 400 Bad Request
{
"error":{
"code":"INVALID_USER",
"message":"Invalid user"
}
}
```
# Lista de webhooks
Observação
O tipo de notificação é enviado no parâmetro notification_type.
Version: 1.0
## Servers
```
https://api.xsolla.com/merchant/v2
```
## Download OpenAPI description
[Webhooks](https://developers.xsolla.com/_bundle/@l10n/pt/webhooks/index.yaml)
## Validação do usuário
### Pesquisa do usuário
- [POST user-search](https://developers.xsolla.com/pt/webhooks/user-validation/user-search.md): Public User ID é um parâmetro que identifica exclusivamente o usuário e é conhecido por ele, diferentemente de User ID (Public User ID pode ser um e-mail, apelido, etc). A Xsolla envia um webhook com o tipo user_search quando uma compra é feita fora da loja do jogo (por exemplo, através de quiosques de dinheiro).
### Validação do usuário
- [POST user-validation](https://developers.xsolla.com/pt/webhooks/user-validation/user-validation.md): A Xsolla envia um webhook com o tipo user_validation para o URL do webhook
para verificar se um usuário está cadastrado no jogo. A solicitação é enviada
várias vezes como parte do processo de pagamento:
* Quando um usuário escolhe uma forma de pagamento na interface de pagamento.
* Quando um usuário insere dados no formulário de pagamento. Por exemplo, dados
de cartão bancário ou o CEP ao pagar via PayPal.
* Quando um usuário clica em Pagar agora para prosseguir com o pagamento.
* Quando o processo de pagamento for concluído e o status da transação for
alterado para done.
A solicitação é enviada ao pagar com qualquer método de pagamento.
Ao salvar o URL do webhook na Conta de Distribuidor, você pode conceder
permissões para receber informações detalhadas nos webhooks. Para fazer isso,
defina as opções necessárias como ativas na Conta de Distribuidor na seção Project
settings > Webhooks > Advanced settings.
Observação
Se você se registrou na Conta de Distribuidor no dia 22 de janeiro de 2025 ou antes, você encontrará as opções na seção Project settings > Webhooks > Testing > Payments > Advanced settings.
Opção
Descrição
Enviar apenas os parâmetros de usuário necessários sem dados confidenciais
Somente as seguintes informações sobre o usuário são passadas no webhook:IDpaís
Enviar parâmetros personalizados
As informações sobre os parâmetros de token personalizados são passadas no webhook.
### Validação de usuário na Web Shop
- [POST user-validation-in-webshop](https://developers.xsolla.com/pt/webhooks/user-validation/user-validation-in-webshop.md): A Xsolla envia um webhook de um site Web Shop para verificar se um usuário existe no jogo. O webhook é enviado do seguinte endereço IP: 34.102.38.178.
Observe
O webhook é usado apenas para validação do usuário na Web Shop. Consulte essas instruções para obter mais informações sobre como configurar webhooks no Site Builder.
## Pagamentos
### Adicionar conta de pagamento
- [POST add-payment-account](https://developers.xsolla.com/pt/webhooks/payments/add-payment-account.md): A Xsolla envia um webhook com o tipo payment_account_add para o URL do webhook sempre que um usuário adiciona uma conta de pagamento ou salva uma conta de pagamento ao comprar algo dentro do jogo. Para receber este webhook, entre em contato com seu Gerente de Sucesso do Cliente ou envie um e-mail para csm@xsolla.com.
### Reembolso parcial
- [POST partial-refund](https://developers.xsolla.com/pt/webhooks/payments/partial-refund.md): Quando um reembolso parcial é feito, a Xsolla envia detalhes da transação
cancelada em um webhook com o tipo partial_refund para o URL do webhook.
Saiba mais sobre o processo de reembolso parcial nestas instruções.
Ao salvar o URL do webhook na Conta de Distribuidor, você pode conceder
permissões para receber informações detalhadas nos webhooks. Para fazer isso,
defina a seguinte opção como ativa na Conta de Distribuidor na seção Project
settings > Webhooks > Advanced settings.
Observação
Se você se registrou na Conta de Distribuidor no dia 22 de janeiro de 2025 ou antes, você encontrará as opções na seção Project settings > Webhooks > Testing > Payments > Advanced settings.
Opção
Descrição
Exibir informações sobre transações pelos métodos de pagamento salvos
As informações são passadas nos seguintes parâmetros personalizados do webhook:saved_payment_method:0 — o método de pagamento guardado não foi utilizado1 — o método de pagamento foi salvo ao efetuar o pagamento atual2 — o método de pagamento previamente guardado é utilizadopayment_type:1 — pagamento único2 — pagamento recorrente
Códigos de reembolso:
Código
Motivo
Descrição
1
Cancellation by the user request / the game request
Cancelamento iniciado a partir da Publisher Account.
3
Integration error
Problemas na integração entre a Xsolla e o jogo.Recomendação: não adicione o usuário à lista de bloqueio.
5
Test payment
Transação de teste seguida de cancelamento.Recomendação: não adicione o usuário à lista de bloqueio.
7
Fraud notification from PS
Pagamento recusado pelo sistema de pagamento. Potencial fraude detectada pelo PS.Recomendação: adicionar o usuário à lista de bloqueio.
9
Cancellation by the user request
O usuário não ficou satisfeito com o jogo ou a compra por qualquer motivo.Recomendação: não adicionar o usuário à lista de bloqueio.
10
Cancellation by the game request
Cancelamento solicitado pelo jogo.Recomendação: não adicionar o usuário à lista de bloqueio.
### Pagamento
- [POST payment](https://developers.xsolla.com/pt/webhooks/payments/payment.md): Quando um usuário completa um pagamento, a Xsolla envia os dados do pagamento
em um webhook com o tipo payment ao URL do webhook.
Os códigos de resposta esperados estão descritos na seção Responses, mas
você pode usar outros códigos de resposta também:
Código de resposta
Descrição
200, 201, 204
Uma resposta bem-sucedida.
4xx
Ocorreu um erro. Por exemplo, se o usuário especificado não foi encontrado ou uma assinatura inválida foi passada.
5xx
Erro temporário de servidor. Quando essa resposta é recebida, a Xsolla tentará reenviar o webhook automaticamente, gradualmente aumentando o intervalo entre as tentativas até que o ouvinte confirme o recebimento. A quantidade máxima de tentativas é de 12 reenvios ao longo de um período de 48 horas.
Quando você salva o URL do webhook na Conta de
Distribuidor, você também pode configurar o recebimento de informações
adicionais nos webhooks.
Observação
Se você se registrou na Conta de Distribuidor no dia 22 de janeiro de 2025 ou antes, você encontrará as opções no seu projeto na seção Settings > Webhooks > Testing > Payments > Advanced settings.
Opção
Descrição
Exibir informações sobre a conta de pagamento salva
As informações sobre a forma de pagamento salva são passadas no objeto personalizado payment_account.
Exibir informações sobre transações pelos métodos de pagamento salvos
As informações são passadas nos seguintes parâmetros personalizados do webhook:saved_payment_method:0 — o método de pagamento guardado não foi utilizado1 — o método de pagamento foi salvo ao efetuar o pagamento atual2 — o método de pagamento previamente guardado é utilizadopayment_type:1 — pagamento único2 — pagamento recorrente
Adicionar objeto de ordem ao webhook
As informações sobre o pedido são passadas no objeto order do webhook Pagamento.
Enviar apenas os parâmetros de usuário necessários sem dados confidenciais
Somente as seguintes informações sobre o usuário são passadas no webhook:IDpaís
Exibir BIN e sufixo do cartão
As seguintes informações sobre o número do cartão bancário são passadas no webhook:os primeiros 6 dígitos no parâmetro card_binos últimos 4 dígitos no card_suffix
Exibir marca do cartão
A bandeira do cartão utilizado para efetuar o pagamento. Por exemplo, Mastercard ou Visa.
Aviso
O conjunto de campos enviados em um webhook depende de:as configurações avançadas definidas na Conta de Distribuidoras configurações personalizadas definidas no lado da XsollaSe tiver alguma dúvida, entre em contato com seu Gerente de Sucesso do Cliente ou envie um e-mail para csm@xsolla.com.
### Pagamento recusado
- [POST payment-declined](https://developers.xsolla.com/pt/webhooks/payments/payment-declined.md): Se uma transação for recusada por um sistema de pagamento, a Xsolla enviará os
dados da transação em um webhook do tipo ps_declined para o URL configurado
do webhook. O webhook é enviado durante o estágio de autorização ou
processamento de pagamento. Nesse caso, o webhook
payment\ order_paid não é enviado.
Razões típicas para recusas do sistema de pagamento:
* A autorização do cartão falhou (por exemplo, o sistema de pagamento não pôde
concluir o processo de autorização devido a um erro técnico ou nenhuma resposta
do banco) ou foi recusada (por exemplo, o banco respondeu, mas recusou a
transação devido a fundos insuficientes ou daods inválidos do cartão).
* A verificação do 3-D Secure falhou, não foi concluída, ou a confirmação do
usuário expirou.
* O processador ou banco adquirente está temporariamente indisponível ou retorna
uma recusa definitiva devido a um erro irreversível, tal como uma conta
encerrada ou um número de cartão inválido. É preciso resolver o problema
subjacente antes de tentar novamente, ou a transação não será bem-sucedida.
Não deve ser confundido com:
* Rejeições antifraude, que são relatadas por meio do webhook
afs_reject.
* Reembolsos e reembolsos parciais após um pagamento bem-sucedido, que são
relatados por meio do
reembolso e dos
webhooks partial_refund.
Nota
Para receber o webhook ps_declined, entre em contato com o Gerente de sucesso do Cliente ou envie um e-mail para csm@xsolla.com.
### Reembolso
- [POST refund](https://developers.xsolla.com/pt/webhooks/payments/refund.md): Quando um pagamento é cancelado, a Xsolla envia detalhes da transação cancelada
em um webhook com o tipo refund para o URL do webhook.
O mecanismo de repetição do webhook depende de quem iniciou o reembolso:
* Se o reembolso foi iniciado do seu lado, o webhook não é reenviado. O pagamento
é reembolsado ao usuário independentemente da resposta ao webhook.
* Se o reembolso foi iniciado por um terceiro — por exemplo, um sistema de
pagamento ou a equipe de Suporte ao Cliente da Xsolla — e, em resposta a um
webhook, um código de status 5xx foi retornado, o webhook é reenviado em
intervalos crescentes. O número máximo de tentativas é 12 em até 48 horas a
partir da primeira tentativa.
Para informações detalhadas sobre o processo de reembolso, consulte as
instruções.
Aviso
O pagamento ainda será reembolsado ao usuário se todas as seguintes condições forem atendidas:O reembolso foi iniciado pela Xsolla.Em resposta a um webhook, um código de status 4xx foi retornado, ou nenhuma resposta foi recebida após todas as tentativas repetidas, ou um código de status 5xx foi retornado.
Quando você salva o URL do webhook na Conta de
Distribuidor, você também pode configurar o recebimento de informações
adicionais nos webhooks.
Observação
Se você se registrou na Conta de Distribuidor no dia 22 de janeiro de 2025 ou antes, você encontrará as opções no seu projeto na seção Project settings > Webhooks > Testing > Payments > Advanced settings.
Opção
Descrição
Exibir informações sobre transações pelos métodos de pagamento salvos
As informações são passadas nos seguintes parâmetros personalizados do webhook:saved_payment_method:0 — o método de pagamento guardado não foi utilizado1 — o método de pagamento foi salvo ao efetuar o pagamento atual2 — o método de pagamento previamente guardado é utilizadopayment_type:1 — pagamento único2 — pagamento recorrente
Códigos de reembolso:
Código
Motivo
Descrição
1
Cancellation by the user request / the game request
Cancelamento iniciado a partir da Publisher Account.
2
Chargeback
Estorno de transação solicitado.
3
Integration error
Problemas na integração entre a Xsolla e o jogo.Recomendação: não adicione o usuário à lista de bloqueio.
4
Potential fraud
Suspeita de fraude.Recomendação: adicionar o usuário à lista de bloqueio.
5
Test payment
Transação de teste seguida de cancelamento.Recomendação: não adicione o usuário à lista de bloqueio.
6
User invoice expired
Invoice vencido (utilizado no modelo pós-pago).
7
Fraud notification from PS
Pagamento recusado pelo sistema de pagamento. Potencial fraude detectada pelo PS.Recomendação: adicionar o usuário à lista de bloqueio.
8
Cancellation by the PS request
Cancelamento solicitado pelo sistema de pagamento.Recomendação: não adicionar o usuário à lista de bloqueio.
9
Cancellation by the user request
O usuário não ficou satisfeito com o jogo ou a compra por qualquer motivo.Recomendação: não adicionar o usuário à lista de bloqueio.
10
Cancellation by the game request
Cancelamento solicitado pelo jogo.Recomendação: não adicionar o usuário à lista de bloqueio.
11
Account holder called to report fraud
O proprietário da conta afirma que não fez a transação.
12
Friendly fraud
Fraude amigável denunciada.
13
Duplicate
Duplique a transação para o mesmo invoice.
### Remover conta de pagamento
- [POST remove-payment-account](https://developers.xsolla.com/pt/webhooks/payments/remove-payment-account.md): Quando um usuário remove a conta de pagamento das contas salvas, a Xsolla envia um webhook com o tipo payment_account_remove para o URL do webhook. Para receber este webhook, entre em contato com seu Gerente de Sucesso do Cliente ou envie um e-mail para csm@xsolla.com.
## Webhooks combinados
### Cancelamento do pedido (com detalhes de pagamento e transação)
- [POST order-cancellation](https://developers.xsolla.com/pt/webhooks/combined-webhooks/order-cancellation.md): A Xsolla envia o webhook order_canceled para o URL especificado
quando o pagamento é cancelado pelo usuário, parceiro ou automaticamente. O
webhook contém informações sobre itens devolvidos, dados de pagamento e
detalhes do pedido cancelado.
O webhook não é enviado se o pagamento não for bem-sucedido. Por exemplo:
* o formulário da interface de pagamento foi aberto, mas o usuário não pagou pelo
pedido.
* o formulário da interface de pagamento foi aberto, mas houve erros durante o
pagamento.
O tempo recomendado para processamento do webhook é de dentro de 3 segundos.
### Pagamento bem-sucedido do pedido (com detalhes de pagamento e transação)
- [POST successful-order-payment](https://developers.xsolla.com/pt/webhooks/combined-webhooks/successful-order-payment.md): A Xsolla envia o webhook order_paid para o URL especificado quando
o usuário paga pelo pedido com sucesso.
O webhook order_paid contém informações sobre os itens comprados,
dados de pagamento e os detalhes da transação.
O webhook order_paid não é enviado se o pagamento não for bem-
sucedido. Por exemplo:
* o formulário de pagamento foi aberto, mas o usuário não pagou pelo pedido
* o formulário de pagamento foi aberto, mas houve erros durante o pagamento
Recomenda-se que o tempo de processamento do webhook order_paid
seja inferior a 3 segundos.
Aviso
O conjunto de campos enviados em um webhook depende das seguintes configurações:as que você configurou na Conta de Distribuidor na seção Project settings > Webhooks > Advanced settings.as configuradas no lado da Xsolla.Se você tiver alguma dúvida, entre em contato com seu Gerente de Sucesso do Cliente ou envie um e-mail para csm@xsolla.com.
As respostas esperadas são descritas na seção Respostas. Você pode usar
outros códigos de resposta. Dependendo do código da resposta e a conexão da
funcionalidade de reembolso automático do pagamento, a lógica de processamento
do webhook no lado da Xsolla funciona como a seguir:
Código de resposta
Reembolso automático de pagamento está desativado (por padrão)
Reembolso automático de pagamento está ativado
400, 401, 402, 403, 404, 409, 422, 415
Nenhuma ação
Reembolso automático ao usuário
200, 201, 204
Nenhuma ação
Nenhuma ação
Código diferente ou nenhuma resposta ao webhook
Múltiplos webhooks são enviados dentro de um intervalo de tempo específico: 2 tentativas dentro de um intervalo de 5 minutos, 7 tentativas dentro de um intervalo de 15 minutos, 10 tentativas de dentro de um intervalo de 60 minutos.
Múltiplos webhooks são enviados dentro de um intervalo de tempo específico: 2 tentativas dentro de um intervalo de 5 minutos, 7 tentativas dentro de um intervalo de 15 minutos, 10 tentativas de dentro de um intervalo de 60 minutos. Se todos os webhooks forem enviados mas não for recebida uma resposta bem-sucedida, um reembolso automático é emitido ao usuário.
Para conectar a funcionalidade de reembolso automático, entre em contato com
seus Gerentes de Sucesso do Cliente ou envie um e-mail para csm@xsolla.com.
## Webhooks separados
### Cancelamento do pedido (sem detalhes de pagamento e transação)
- [POST order-cancellation-separate](https://developers.xsolla.com/pt/webhooks/separate-webhooks/order-cancellation-separate.md): A Xsolla envia o webhook order_canceled para o URL especificado
quando o pagamento é cancelado pelo usuário, parceiro ou automaticamente. O
webhook contém informações sobre itens devolvidos e detalhes do pedido
cancelado.
O webhook não é enviado se o pagamento não for bem-sucedido. Por exemplo:
* o formulário da interface de pagamento foi aberto, mas o usuário não pagou pelo
pedido.
* o formulário da interface de pagamento foi aberto, mas houve erros durante o
pagamento.
O tempo recomendado para processamento do webhook é de dentro de 3 segundos.
### Pagamento bem-sucedido do pedido (sem detalhes de pagamento e transação)
- [POST successful-order-payment-separate](https://developers.xsolla.com/pt/webhooks/separate-webhooks/successful-order-payment-separate.md): A Xsolla envia o webhook order_paid para o URL especificado quando
as seguintes condições são atendidas:
1. O usuário pagou pelo pedido com sucesso.
2. Xsolla recebeu uma resposta sobre o processamento bem-sucedido do webhook de
pagamento.
O webhook order_paid contém informações sobre os itens comprados e
os dados da transação.
O webhook order_paid não será enviado se:
* O pagamento não foi bem-sucedido, por exemplo:
* o formulário de pagamento foi aberto, mas o usuário não pagou pelo pedido
* o formulário de pagamento foi aberto, mas houve erros durante o pagamento
* A resposta sobre o processamento bem-sucedido do webhook
pagamento não foi recebida.
Recomenda-se que o tempo de processamento do webhook order_paid
seja inferior a 3 segundos.
As respostas esperadas são descritas na seção Respostas. Você pode usar
outros códigos de resposta. Dependendo do código da resposta e a conexão da
funcionalidade de reembolso automático do pagamento, a lógica de processamento
do webhook no lado da Xsolla funciona como a seguir:
Código de resposta
Reembolso automático de pagamento está desativado (por padrão)
Reembolso automático de pagamento está ativado
400, 401, 402, 403, 404, 409, 422, 415
Nenhuma ação
Reembolso automático ao usuário
200, 201, 204
Nenhuma ação
Nenhuma ação
Código diferente ou nenhuma resposta ao webhook
Múltiplos webhooks são enviados dentro de um intervalo de tempo específico: 2 tentativas dentro de um intervalo de 5 minutos, 7 tentativas dentro de um intervalo de 15 minutos, 10 tentativas de dentro de um intervalo de 60 minutos.
Múltiplos webhooks são enviados dentro de um intervalo de tempo específico: 2 tentativas dentro de um intervalo de 5 minutos, 7 tentativas dentro de um intervalo de 15 minutos, 10 tentativas de dentro de um intervalo de 60 minutos. Se todos os webhooks forem enviados mas não for recebida uma resposta bem-sucedida, um reembolso automático é emitido ao usuário.
Para conectar a funcionalidade de reembolso automático, entre em contato com
seus Gerentes de Sucesso do Cliente ou envie um e-mail para csm@xsolla.com.
## Webhook de personalização
### Personalização de catálogo no lado do parceiro
- [POST personalized-partner-catalog](https://developers.xsolla.com/pt/webhooks/personalization/personalized-partner-catalog.md): A Xsolla enviará um webhook partner_side_catalog que contém os
parâmetros do usuário e do projeto para o URL do webhook quando um usuário
interagir com a loja.
Retorna uma lista de item_id ou SKU de itens que estão disponíveis
para o usuário em resposta. Nesse caso, você também pode incluir informações de
que um determinado usuário pode comprar um determinado produto um número
especificado de vezes. Esse recurso permite controlar o número e o tipo de
produtos que o usuário pode adicionar ao carrinho e comprar.
Recomenda-se que o tempo de processamento do webhook
partner_side_catalog seja inferior a 3 segundos.
## Antifraude
### Atualização da lista de bloqueio antifraude
- [POST afs-rejected-blocklist](https://developers.xsolla.com/pt/webhooks/anti-fraud/afs-rejected-blocklist.md): Quando a lista de bloqueio do sistema antifraude é atualizada (um parâmetro é adicionado ou removido), a Xsolla envia um webhook com o tipo afs_black_list para o URL do webhook. A adição de parâmetros é executada automaticamente no lado Xsolla ou quando solicitado. A remoção de parâmetros só é possível mediante solicitação. Para receber este webhook, entre em contato com seu Gerente de Sucesso do Cliente ou envie um e-mail para csm@xsolla.com.
### O sistema antifraude rejeitou a transação
- [POST afs-rejected-transaction](https://developers.xsolla.com/pt/webhooks/anti-fraud/afs-rejected-transaction.md): Quando uma transação é recusada durante uma verificação do sistema antifraude,
a Xsolla envia detalhes da transação no webhook com o tipo afs_reject para o
URL do webhook. Para receber este webhook, entre em contato com seu Gerente de
Sucesso do Cliente ou envie um e-mail para csm@xsolla.com.
Ao salvar o URL do webhook na Conta de Distribuidor, você pode conceder
permissões para receber informações detalhadas nos webhooks. Para fazer isso,
defina a seguinte opção como ativa na Conta de Distribuidor na seção Project
settings > Webhooks > Advanced settings.
Observação
Se você se registrou na Conta de Distribuidor no dia 22 de janeiro de 2025 ou antes, você encontrará as opções na seção Project settings > Webhooks > Testing > Payments > Advanced settings.
Opção
Descrição
Exibir informações sobre transações pelos métodos de pagamento salvos
As informações são passadas nos seguintes parâmetros personalizados do webhook:saved_payment_method:0 — o método de pagamento guardado não foi utilizado1 — o método de pagamento foi salvo ao efetuar o pagamento atual2 — o método de pagamento previamente guardado é utilizadopayment_type:1 — pagamento único2 — pagamento recorrente
### Disputa
- [POST dispute](https://developers.xsolla.com/pt/webhooks/anti-fraud/dispute.md): Quando uma nova disputa é aberta ou quando seu status é alterado, a Xsolla envia um webhook com o tipo dispute ao URL do webhook. Para receber esse webhook, contate seu Gerente de Sucesso do Cliente ou envie um e-mail para csm@xsolla.com.
## Assinaturas
### Assinatura cancelada
- [POST canceled-subscription](https://developers.xsolla.com/pt/webhooks/subscriptions/canceled-subscription.md): Quando uma assinatura é cancelada, a Xsolla envia um webhook com o tipo cancel_subscription para o URL do webhook.
### Assinatura criada
- [POST created-subscription](https://developers.xsolla.com/pt/webhooks/subscriptions/created-subscription.md): Quando um usuário cria uma assinatura, a Xsolla envia um webhook com o tipo create_subscription para o URL do webhook.
### Assinatura não renovável
- [POST nonrenewing-subscription](https://developers.xsolla.com/pt/webhooks/subscriptions/nonrenewing-subscription.md): Quando o status de uma assinatura é definido como não renovável, a Xsolla envia um webhook com o tipo non_renewal_subscription para o URL do webhook. Para receber este webhook, entre em contato com seu Gerente de Sucesso do Cliente ou envie um e-mail para csm@xsolla.com.
### Assinatura atualizada
- [POST updated-subscription](https://developers.xsolla.com/pt/webhooks/subscriptions/updated-subscription.md): Se alguns parâmetros na assinatura (plan_id, date_next_charge) foram alterados, e no caso de cada renovação de assinatura, a Xsolla envia um webhook com o tipo update_subscription para o URL do webhook.