Configure o rastreamento de status de pedidos
Para conceder itens ao usuário, você precisa se certificar de que o pagamento foi bem-sucedido.
Escolha um método para rastrear o status do pedido:
Escolha o método mais adequado para o seu projeto para acessar os dados Xsolla:
Se você não tem um servidor ou você implementar a lógica de processamento de compra no lado do cliente, você pode usar as seguintes maneiras:
API de evento da Xsolla
A Xsolla Event API é uma alternativa ao uso de webhooks. Ela permite que você receba informações sobre eventos de pagamento diretamente do cliente do seu aplicativo via solicitações ao servidor da Xsolla. Essa abordagem elimina a necessidade de configurar e manter seu próprio servidor para gerenciar webhooks. Para informações mais detalhadas sobre como usar a Xsolla Event API, consulte a nossa documentação.
Obtenção de status de pedido no lado do cliente usando API WebSocket
A solução utiliza websockets para obter diversos status do pedido sem obter informações detalhadas sobre ele. Esse método é preferível: apenas uma conexão é criada entre o cliente (por exemplo, seu site ou aplicativo móvel) e o servidor Xsolla, e portanto não há carga adicional no cliente ou no servidor.
Conclua as seguintes etapas:
- Para permitir que o servidor de websocket Xsolla e o seu cliente identifiquem mensagens de status de pedido, crie uma conexão:
- javascript
1const client = new Centrifuge(
2connectionURL,
3{
4data: {
5 user_external_id: user_external_id,
6 auth: auth,
7 project_id: project_id
8}
9}
10)
11connectionURL - wss://ws-store.xsolla.com/connection/websocket
12auth - user JWT token
- Para receber novas mensagens sobre status de pedidos, inscreva-se em eventos usando a função
client.on:
- javascript
1client.on('publication', (ctx) => {
2 //handle the status
3});
- Acione o estabelecimento de uma conexão:
- javascript
1client.connect()
- Para receber o histórico de alterações nos status de pedidos, conecte o método API de histórico.
- javascript
1client.on('subscribed', function (ctx) {
2 client.history(ctx.channel, { limit: -1, since: { offset: 0 }, reverse: false }).then(function (resp) {
3resp.publications.forEach((ctx) => {
4 /handle the status
5});
6
7 }, function (err) {
8 //handle the status
9 });
10});
Exemplo de corpo de mensagem:
- javascript
1{
2order_id: 59614241,
3status: "new"
4}
Os seguintes status de pedido são possíveis:
New— o pedido foi criado mas não pagoPaid— o pedido foi pagoDone— o pedido foi entregue (todos os recibos enviados, entregas feitas do lado da Xsolla, plataformas externas, etc.)Canceled— o pedido é cancelado e o pagamento reembolsado a um usuário
Recomendações de uso de websocket:
- O tempo máximo de espera por uma resposta via websocket é de 5 minutos.
- A conexão deve ser estabelecida ao abrir a interface de pagamento.
- A conexão deve ser abortada quando o status final do pedido for recebido, seja ele
CanceledouDone. - Se o tempo de vida útil do websocket expirar, ou se houver qualquer problema com a conexão, utilize short-polling.
Short-polling
Para obter informações detalhadas sobre itens no pedido depois de alternar para o status, chame a API Obter pedido.
O método XsollaCatalog.Purchase engloba diversos métodos para rastrear status de pedidos. O mecanismo de rastreamento é detalhado na documentação do SDK para Unity.
Adicionalmente, você pode implementar o gerenciamento do status e conteúdo do pedido, que são passados à função de retorno de chamada onSuccess do método comprado.
Você pode rastrear o status do pedido usando o método SDK CheckPendingOrder. Passe os seguintes parâmetros ao método:
AccessToken— o token de pagamento, que foi recebido ao comprar o item.OrderIdo ID de pedido, que foi recebido ao comprar o item.SuccessCallback— o retorno de chamado de pagamento bem-sucedido.ErrorCallback— o retorno de chamada de erro de solicitação.bIsUserInvolvedToPayment— se o usuário está envolvido no processo de pagamento. Passetruepara comprar com moedas reais, efalsepara a compra de itens grátis e compras com moedas virtuais.
O mecanismo de rastreamento é detalhado na documentação SDK de nível empresarial do Unreal Engine.
Para solicitar o status e conteúdo de um pedido, chame o método SDK CheckOrder, passe os seguintes parâmetros a ele:
AccessToken— o token de pagamento, que foi recebido ao comprar o item.OrderIdo ID de pedido, que foi recebido ao comprar o item.SuccessCallback— o retorno de chamada de verificação de pedido bem-sucedido. A resposta contém o status de pedido.ErrorCallback— o retorno de chamada de erro de solicitação.
Para rastrear o status dos pedidos criados e validá-los, você precisará configurar o processamento de webhooks no lado do servidor do seu aplicativo.
No lado da Xsolla, há duas opções para receber webhooks no caso de compra de itens e reembolsos: informações com dados de pagamento e transações e informações sobre itens comprados podem vir separadamente, ou serem combinadas em um webhook. Por padrão, todos os novos projetos recebem o webhook combinado.
Para trocar à nova opção de recebimento de webhooks combinados, contate seus Gerentes de Sucesso do Cliente ou envie um e-mail para csm@xsolla.com.
Mais informações sobre opções de recebimento de webhook
Recebendo informações em webhooks combinados:
Se você se cadastrou na Conta de Distribuidor após 22 de janeiro de 2025, você recebe todas as informações nos webhooks Pagamento bem-sucedido do pedido (order_paid) e Cancelamento do pedido (order_canceled). Neste caso, você não precisa processar os webhooks Pagamento (payment) e Reembolso (refund).
Recebimento de informações em webhooks separados:
Se você se cadastrou na Conta de Distribuidor no dia 22 de janeiro de 2025 ou antes, você recebe os seguintes webhooks:
- Pagamento (
payment) e Reembolso (refund) com informações sobre os dados de pagamento e 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 recebidos.
Para a operação completa da loja no jogo e gerenciamento de pagamento, é necessário implementar o processamento dos webhooks principais:
| Nome do webhook | Descrição |
|---|---|
User validation > User validation (user_validation) | É enviado em diferentes estágios do processo de pagamento para confirmar se o usuário está registrado no jogo. |
Serviços de jogo > Webhooks combinados > Pagamento bem-sucedido do pedido (order_paid) | Contém dados de pagamento, dados de transação e informações sobre os itens comprados. Use os dados do webhook para adicionar itens ao usuário. |
Game services > Combined webhooks > Order cancellation (order_canceled) | Contém dados do pagamento cancelado, dados de transação e informações sobre os itens comprados. Use os dados do webhook para remover os itens comprados. |
O esquema abaixo demonstra o processo de comprar e retornar itens usando webhooks combinados.
sequenceDiagram
participant User
participant GameClient as Game Client
participant Xsolla
participant GameServer as Game Server
%% Item Purchase
Note over User, GameServer: Item purchase
User ->> GameClient: Logs in
GameClient ->> Xsolla: Sends user authentication request
Xsolla -->> GameClient: Returns JWT / OAuth 2.0 token
GameClient ->> Xsolla: Sends JWT, project ID, pagination parameters
Xsolla -->> GameClient: Returns array of items
GameClient -->> User: Displays storefront
User ->> GameClient: Selects item and clicks Buy
GameClient ->> Xsolla: Creates order request
Xsolla -->> GameClient: Returns payment token
GameClient ->> Xsolla: Opens payment UI URL with received token
Xsolla ->> GameServer: Sends User validation webhook
GameServer -->> Xsolla: Returns success status code
Xsolla -->> User: Displays payment UI
User ->> Xsolla: Chooses payment method and clicks Pay
Xsolla ->> GameServer: Sends Successful payment for order webhook
GameServer ->> GameServer: Grants purchases to user
GameServer -->> Xsolla: Returns success status code
Xsolla -->> User: Shows successful purchase screen
%% Refund / Chargeback
Note over User, GameServer: Refund / Chargeback
User ->> Xsolla: Requests refund or chargeback
Xsolla ->> GameServer: Sends Order cancellation webhook
GameServer ->> GameServer: Removes items from user inventory
GameServer -->> Xsolla: Returns success status code
Xsolla -->> User: Refunds the payment
Se a personalização do catálogo de itens for implementada no lado do aplicativo, configure o processamento da personalização do catálogo no lado do parceiro.
- Pagamento, Pagamento bem-sucedido do pedido, e Validação do usuário se você receber webhooks separados.
- Pagamento bem-sucedido do pedido e Validação do usuário se você possuir webhooks combinados.
Para obter a lista completa de webhooks e informações gerais sobre trabalhar com eles, consulte a documentação de webhooks.
Configure o envio de webhooks
Para configurar webhooks no lado Xsolla:
- No projeto na Conta de Distribuidor, acesse a seção Settings > Webhooks.
- No campo Webhook server, especifique o URL do seu servidor, onde você deseja receber webhooks no formato
https://example.com. Você também pode especificar o URL que encontrar em uma ferramenta para testar webhooks.
- 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.
- Clique em Ativar webhooks.
Adicionar ouvinte do webhook
O ouvinte de webhooks é um código de programa que permite receber webhooks de entrada em um endereço URL especificado, ao gerar uma assinatura e ao enviar uma resposta para o servidor webhook da Xsolla.
Geração de assinatura
Ao receber um webhook, você deve garantir a segurança da transmissão de dados. Para fazer isso, você deve gerar uma assinatura a partir dos dados do webhook e verificar se ela corresponde à assinatura enviada no cabeçalho da solicitação HTTP.
Para gerar uma assinatura:
- Concatene o JSON do corpo da solicitação e da chave secreta do projeto.
- Aplique a função de hash criptográfico SHA-1 à cadeia de caracteres obtida na primeira etapa.
Enviando respostas ao webhook
Para confirmar o recebimento do webhook, seu servidor deve retornar:
- O código HTTP
200,201ou204no caso de uma resposta bem-sucedida. - O código HTTP
400com uma descrição do problema se o usuário especificado não for encontrado ou uma assinatura inválida for passada.
Seu manipulador de webhook também pode retornar um código 5xx em caso de problemas temporários em seu servidor.
Se o servidor da Xsolla não receber uma resposta aos webhooks Pagamento bem-sucedido do pedido e Cancelamento de pedido, ou receber uma resposta com um código 5xx, os webhooks são reenviados de acordo com o seguinte cronograma:
- 2 tentativas com um intervalo de 5 minutos
- 7 tentativas com um intervalo de 15 minutos
- 10 tentativas com intervalo de 60 minutos
No máximo 20 tentativas de envio de webhooks são feitas dentro de 12 horas a partir da primeira tentativa.
A lógica de retorno para os webhooks Payment e Refund é descrita na respectiva página de webhook.
Se o servidor da Xsolla não receber uma resposta ao webhook Validação do usuário ou receber uma resposta com um código 400 ou 5xx, o webhook Validação do usuário não é reenviado.
Nesse caso, um erro é exibido ao usuário e os webhooks Pagamento e Pagamento bem-sucedido do pedido não são enviados.
Configurando informações de item em webhooks
Você pode configurar quais dados de itens são inclusos nos webhooks Pagamento do pedido bem-sucedido e Cancelamento do pedido pela matriz items.
Habilitação da inclusão de parâmetros adicionais
Habilite a inclusão de parâmetros adicionais que indicam:
- se o item é grátis (
is_free) - se o item é um bônus (
is_bonus) - se o item faz parte de um conjunto (
is_bundle_content)
Para receber esses parâmetros, você deve trocar seus webhooks para a versão 2 usando a chamada de API Atualizar informações sobre as configurações do webhook. Na versão 1 (padrão), esses parâmetros não estão disponíveis.
Exemplo de uma matriz de items com parâmetros adicionais:
- json
1"items": [
2 {
3 "sku": "com.xsolla.item_new_1",
4 "type": "bundle",
5 "is_pre_order": false,
6 "is_free": false,
7 "is_bonus": false,
8 "is_bundle_content": false,
9 "quantity": 1,
10 "amount": "1000",
11 "promotions": []
12 },
13 {
14 "sku": "com.xsolla.gold_1",
15 "type": "virtual_currency",
16 "is_pre_order": false,
17 "is_free": false,
18 "is_bonus": false,
19 "is_bundle_content": true,
20 "quantity": 1500,
21 "amount": "[null]",
22 "promotions": []
23 }
24 ]
Desativação da inclusão de conteúdos de conjunto
Por padrão, webhooks incluem todos os tipos de itens do conjunto como uma lista de itens individuais. Você pode configurar o webhook para incluir apenas o conjunto em si, sem listar seus conteúdos.
Nesse caso, os itens inclusos no conjunto não são inclusos na matriz items. Na matriz exibida acima, o item com o SKU com.xsolla.gold_1, que é parte do conjunto, é excluído.
Exemplo de uma matriz de items quando o conteúdo do conjunto está desativado:
- json
1
2"items": [
3 {
4 "sku": "com.xsolla.item_new_1",
5 "type": "bundle",
6 "is_pre_order": false,
7 "is_free": false,
8 "is_bonus": false,
9 "is_bundle_content": false,
10 "quantity": 1,
11 "amount": "1000",
12 "promotions": []
13 }
14 ]
Para desativar a inclusão de conteúdos do conjunto, entre em contato com seu Gerente de Sucesso do Cliente ou envie um e-mail para csm@xsolla.com.
Encontrou um erro de texto ou digitação? Selecione o texto e pressione Ctrl+Enter.