Configuração da venda de chaves de jogo

Você pode vender chaves de jogo por meio de um link direto, interface da loja ou widget.

Observação

Você pode vender chaves de jogo por moedas reais somente depois de assinar o acordo de licenciamento com a Xsolla. Para fazer isso, na Conta de Distribuidor, acesse a seção Agreements & Taxes > Agreements > Licensing Agreement, preencha o formulário do acordo e espere pela confirmação. Pode levar até 3 dias úteis para o acordo ser analisado.

ItemMétodo de venda
Uma cópia de um jogo (chave do jogo).Link direto, widget ou interface de loja. Ao vender através da interface da loja, use o método de compra rápida sem criar um carrinho.
Várias cópias do jogo (chaves do jogo) ou vários jogos em um carrinho.Interface da loja. Use o Site Builder ou integre a API Store Builder.

Você pode vender chaves de jogo para usuários autorizados e não autorizados.

A autorização permite:

Você pode autorizar usuários usando o produto Login ou seu próprio sistema de autorização. Informações detalhadas de configuração são fornecidas nestas instruções.

Observação
Os usuários podem reembolsar as chaves. Após um reembolso bem-sucedido, você receberá a lista das chaves afetadas em um e-mail da Xsolla. Recomendamos bloquear o acesso a estas chaves em todas as plataformas de terceiros.
Observação

O acesso ao jogo é garantido automaticamente após a compra de uma chave de jogo. Porém, as plataformas de jogos podem definir suas próprias regras de ativação de chaves.

Você pode limitar o tempo de exibição do pacote de chave de jogo no catálogo, por exemplo, durante ofertas sazonais. Para fazer isso, passe a data inicial e final do período de disponibilidade de acordo com a norma ISO 8601 no objeto periods na chamada de API correspondente:

Para limitar a quantidade de chaves de jogo disponíveis para compra pelo usuário, siga as instruções.

Chaves de jogo podem ser vendidas através de um link direto que abre a interface de pagamento no seguinte formato:

Copy
Full screen
Small screen
    1https://purchase.xsolla.com/pages/buy?type={YOUR-ITEM-TYPE}&project_id={YOUR_PROJECT_ID}&sku={YOUR-ITEM-SKU}
    

    Além do parâmetro de pesquisa principal você também pode passar parâmetros para personalizar a interface de pagamento e vender a usuários autenticados.

    Adicione os seguintes dados a este link:

    • YOUR-ITEM-TYPE — tipo de item. Possíveis valores:

    • YOUR-PROJECT-ID — ID do seu projeto, que pode ser encontrado na Conta de Distribuidor ao lado do nome do projeto.

    • YOUR-ITEM-SKU — SKU do pacote de chaves de jogo, por exemplo:

      • order456 — SKU sem uma plataforma específica.
      • pre.order123_steam — SKU com uma plataforma específica.

    Recomendamos usar pacotes de chaves de jogo de plataformas específicas. Isso ajuda a evitar problemas de compatibilidade ao usar ou ativar as chaves. Em todos os casos, um sufixo específico da plataforma deve ser adicionado ao SKU, automaticamente ou manualmente, dependendo de como o pacote de chaves é criado:

    • Ao criar pacotes de chaves de jogo na Conta de Distribuidor, o sistema automaticamente adiciona um sufixo específico da plataforma com um sublinhado (ex.: _steam, _playstation) ao SKU inserido.

    • Ao criar pacotes de chaves de jogo específicos de uma plataforma usando chamadas API, você pode especificar o sufixo da plataforma em qualquer formato que inclua apenas caracteres alfanuméricos latinos maiúsculos e minúsculos, pontos, traços e sublinhados.

    Lista de plataformas suportadas pela Xsolla e os exemplos de sufixos delas:

    NomeExemplo de sufixo de SKU
    Steam_steam
    PlayStation_playstation
    Xbox_xbox
    Uplay_uplay
    Origin_origin
    Sem DRM_drmfree
    GOG_gog
    Epic Games_epicgames
    Nintendo Switch eShop_nintendo_eshop
    Discord Game Store_discord_game_store
    Oculus_oculus
    Viveport_viveport
    Google Stadia_stadia
    MY.GAMES Store_my_game

    Para garantir que o link funcione corretamente, você pode recuperar o SKU exato usando a chamada de API Get games list e incluí-la no link de pagamento como o valor do SKU. O SKU do item é retornado no parâmetro items.unit_items.sku (tipicamente, esse SKU segue o formato game_key_sku_drm_sku).

    URL de exemplo para vender um jogo no Steam:

    Copy
    Full screen
    Small screen
      1https://purchase.xsolla.com/pages/buy?type=game_key&project;_id=123456&sku;=pre.order123_steam
      

      Para fazer com que a interface de pagamento corresponda ao estilo do seu jogo, configure o tema, tamanho e outros parâmetros da interface conforme descrito no guia sobre como personalizar a estação de pagamentos. Adicione o parâmetro ui_settings ao URL e passe um objeto JSON settings.ui com a codificação Base64 como valor.

      Exemplo de URL para abrir a interface de pagamento com um tema personalizado:

      Copy
      Full screen
      Small screen
        1https://purchase.xsolla.com/pages/buy?type={YOUR-ITEM-TYPE}&project_id={YOUR_PROJECT_ID}&sku={YOUR-ITEM-SKU}&ui_settings=ewoJCQkic2l6ZSI6ICJzbWFsbCIsCgkJCSJ0aGVtZSI6ICJkYXJrIgoJCX0=
        

        Para vender chaves aos usuários autenticados, passe um token de acesso de usuário no parâmetro xsolla_login_token. Esse token depende do método de autenticação selecionado.

        Exemplo de URL para abrir a interface de pagamento com um token:

        Copy
        Full screen
        Small screen
          1https://purchase.xsolla.com/pages/buy?type={YOUR-ITEM-TYPE}&project_id={YOUR_PROJECT_ID}&sku={YOUR_ITEM_SKU}&xsolla_login_token={ACCESS_TOKEN}
          

          Para testar o fluxo de pagamento no modo sandbox, adicione o parâmetro mode=sandbox ao URL. Você pode usar cartões bancários de teste para concluir as transações.

          Exemplo de URL para abrir a interface de pagamento no modo sandbox:

          Copy
          Full screen
          Small screen
            1https://purchase.xsolla.com/pages/buy?type={YOUR-ITEM-TYPE}&project_id={YOUR_PROJECT_ID}&sku={YOUR-ITEM-SKU}&mode=sandbox
            
            Aviso
            Ao comprar no modo sandbox, as chaves enviadas não serão utilizadas. O sistema simula uma compra bem-sucedida sem entregar chaves reais.

            Vendendo via interface da loja

            Você pode vender chaves de jogo através da interface da loja. Para criar uma loja, você pode:

            Para vender pacotes de chaves de jogo usando a API Store Builder:

            1. Para exibir um catálogo, use o método Obter lista de jogos.
            2. Implemente a compra de chaves de jogo:

            Escolha uma opção de autenticação adequada para que os métodos funcionem corretamente.
            Observação
            Ao vender um jogo através da API Store Builder, você deve implementar um recurso que permita aos jogadores selecionar uma plataforma específica no cliente. Para obter o SKU, passe o valor do parâmetro items.unit_items.sku da solicitação para obter a lista de jogos.

            Venda via widget

            Você pode adicionar um widget à sua página para vender chaves de jogo e personalizá-lo. Para copiar o código do widget, vá para a seção Widget customization depois de criar o pacote de chaves em sua Conta de Distribuidor.

            Se um jogo for vendido em uma única plataforma, o widget exibirá o preço do jogo específico para essa plataforma.

            Exemplo: Compre agora por R$ 10.

            Se um jogo for vendido em várias plataformas, o widget exibirá o menor preço entre as plataformas.

            Exemplo: Receba a partir de $10.

            Na janela de criação de pedidos, o usuário pode ver os preços de todas as plataformas e fazer uma escolha.

            Você também pode exibir o preço de uma plataforma específica no widget especificando o SKU da plataforma no parâmetro drm.

            Exemplo de código do widget:

            Copy
            Full screen
            Small screen
             1<div id="xsolla-buy-button-widget"></div>
             2
             3<script>
             4  var options = {
             5    project_id: "101010",
             6    sku: "my_key",
             7    user: {
             8      auth: "9qs9VyCIQQXBlzJQcfETIKWZDvhi4Sz1"
             9    },
            10    drm: "steam",
            11    item_type: "unit",
            12    api_settings: {
            13      sandbox: true
            14    },
            15    widget_ui: {
            16      target_element: "#xsolla-buy-button-widget",
            17      theme: {
            18        foreground: "green",
            19        background: "light"
            20      }
            21    },
            22    payment_widget_ui: {
            23      lightbox: {
            24        height: "700px",
            25        spinner: "round"
            26      }
            27    }
            28  };
            29
            30  var s = document.createElement("script");
            31  s.type = "text/javascript";
            32  s.async = true;
            33  s.src = "https://cdn.xsolla.net/embed/buy-button/3.1.8/widget.min.js";
            34  s.addEventListener("load", function () {
            35    var widgetInstance = XBuyButtonWidget.create(options);
            36  });
            37  document.getElementsByTagName("head")[0].appendChild(s);
            38</script>
            39
            40<style>
            41  #xsolla-buy-button-widget {
            42    /* place code for button positioning here */
            43    margin: 10px;
            44  }
            45
            46  /* Styles the button itself */
            47  .x-buy-button-widget.x-buy-button-widget__tiny .x-buy-button-widget-payment-button {
            48    background-color: #ff005b;
            49    color: black;
            50  }
            51</style>
            
            Observação
            Parâmetros do widget

            ParâmetroTipoDescrição
            project_id
            integerID do projeto no qual chaves de jogo ou pacotes com chaves de jogo, itens de jogo ou conjuntos com itens, são carregados.
            item_type
            stringTipo de item. Pode assumir valores de virtual_good, virtual_currency, game_key, unit. O tipo unit é usado quando há várias plataformas para distribuir o jogo.
            sku
            stringID de item exclusivo.
            drm
            stringSKU da plataforma de distribuição, por exemplo, steam. Permite exibir o preço de uma plataforma específica.
            api_settings
            objectDefinições de configuração do ambiente e do host:
            • host — host para executar solicitações. O valor padrão é — store.xsolla.com
            • api_host — host para executar solicitações de API. O valor padrão é — store.xsolla.com/api
            • sandbox — defina o valor true para testar o processo de pagamento. sandbox-secure.xsolla.com será usado em vez de secure.xsolla.com para processar pagamentos (consulte Testando o processo de pagamento)
            usuário
            objectUm objeto com dados do usuário.
            user.auth
            stringToken de autorização do usuário: JSON Web Token ou token de acesso Pay Station.
            user.locale
            stringLocalidade do usuário. Determina o idioma do texto do botão e da interface de pagamento. É usado um código de idioma de duas letras baseado em ISO_639-1.
            widget_ui.theme
            objectO tema de cores do widget, determinando sua aparência. Aceita valores {foreground:[‘blue’,‘red’,‘green’,‘gold’], background:[’light’,‘dark’]}
            widget_ui.template
            stringModelo. Valores possíveis:
            • standard (padrão) - inclui imagem do jogo, título e botão estilizado
            • simple — exibe apenas o botão sem nenhum estilo aplicado
            widget_ui.target_element
            stringElemento da página, onde o widget deve ser renderizado (o seletor jQuery deve ser usado, por exemplo #widget-example). Obrigatório.

            Parâmetros que determinam a aparência da interface de pagamento

            ParâmetroTipoDescrição
            payment_ui
            objectParâmetros de aparência da interface de pagamento.
            payment_widget_ui
            objectUm objeto com parâmetros que determinam a aparência da interface de pagamento.
            payment_widget_ui.lightbox
            objectUm objeto com opções para a janela modal na qual a interface de pagamento é aberta.
            payment_widget_ui.lightbox.width
            stringLargura do quadro da lightbox. Se null, depende da largura do Pay Station. O padrão é null.
            payment_widget_ui.lightbox.height
            stringAltura do quadro da lightbox. Se null, depende da altura do Pay Station. O padrão é 100%.
            payment_widget_ui.lightbox.zIndex
            integerDefine a ordem do arranjo. O padrão é 1000.
            payment_widget_ui.lightbox.overlayOpacity
            integerOpacidade do plano de fundo do widget (0 — totalmente transparente, 1 — completamente opaco). O valor padrão é 60% (.6).
            payment_widget_ui.lightbox.overlayBackground
            stringCor de fundo da sobreposição. O padrão é #000000.
            payment_widget_ui.lightbox.contentBackground
            stringCor de fundo do quadro. O padrão é #ffffff. Observe que essas mudanças de cor não afetam o iframe do Pay Station em si, apenas as configurações da lightbox que o contém.
            payment_widget_ui.lightbox.spinner
            stringTipo de indicador de carregamento animado. Pode ser xsolla ou round. O padrão é xsolla.
            payment_widget_ui.lightbox.spinnerColor
            stringCor do cata-vento. Sem valor padrão.
            payment_widget_ui.childWindow
            objectConfigurações para a janela filho na qual a interface de pagamento é aberta. Funciona para a versão mobile.
            payment_widget_ui.childWindow.target
            stringA propriedade que determina onde a janela filho deve ser aberta. Pode assumir valores de _blank, _self, _parent. O valor padrão é — _blank.

            Métodos de widget

            • var widgetInstance = XBuyButtonWidget.create(options) — crie a instância do widget e renderize-a na página.
            • widgetInstance.on(event, handler) — anexa uma função de manipulador de eventos para o evento ao widget.
              • event (string) — tipo de evento.
              • handler (function) — uma função a ser executada quando o evento é acionado.
            • widgetInstance.off(event, handler) — remove um manipulador de eventos.
              • event (string) — tipo de evento.
              • handler (function) — uma função de manipulador previamente anexada para o evento.

            Lista de eventos:

            ParâmetroDescrição
            initWidget inicializado.
            openWidget aberto.
            loadInterface de Payments (Pay Station) carregada.
            closeInterface de Pagamento (Pay Station) fechada.
            statusO usuário está na página de status.
            status-invoiceO usuário está na página de status; pagamento em andamento.
            status-deliveringEvento em que o usuário foi movido na página de status, o pagamento foi concluído e estamos enviando uma notificação de pagamento.
            status-doneO usuário está na página de status; pagamento creditado na conta do usuário.
            status-troubledEvento em que o usuário foi movido na página de status, mas o pagamento falhou.

            Você pode acessar a lista de eventos usando o objeto XBuyButtonWidget.eventTypes.

            Personalização de botões

            1. Abra seu projeto na Conta de Distribuidor e acesse a seção Items catalog > Virtual items.
            2. Selecione uma chave de jogo e acesse a aba Widget customization.
            Observação
            Se não houver chaves de jogo, crie uma nova.
            1. No bloco Customize, selecione a cor do plano de fundo.
            Observação
            Você também pode modificar o objeto theme no código para que o parâmetro background tenha uma cadeia de caracteres vazia como um valor.
            1. Quando você adiciona o código do widget à sua página, ele inclui estilos herdados. Adicione os estilos abaixo para substituir esses estilos.
            Aviso
            Adicionamos em uma tag style abaixo da tag scriptque você obteve da aba Widget customization por motivos de herança/prioridade CSS.
            Copy
            Full screen
            Small screen
             1/* This should be used for button positioning but note this technically repositions the entire widget */
             2#xsolla-buy-button-widget {
             3  /* place code for button positioning here */
             4}
             5
             6/* Styles the button itself */
             7.x-buy-button-widget.x-buy-button-widget__tiny
             8  .x-buy-button-widget-payment-button {
             9  background-color: #ff005b;
            10  color: black;
            11}
            12
            13/* Button on hover */
            14.x-buy-button-widget.x-buy-button-widget__tiny
            15  .x-buy-button-widget-payment-button:hover {
            16  background-color: #ff005b;
            17}
            18
            19/* The following are style overrides to leave you with just the button */
            20
            21/* space immediately surrounding button */
            22.x-buy-button-widget-button-block.x-buy-button-widget-button-block__light {
            23  background-color: white;
            24}
            25
            26/* space above button (including game title area) */
            27.x-buy-button-widget.x-buy-button-widget__tiny
            28  .x-buy-button-widget-game-logo {
            29  height: 200px;
            30  background-image: none !important;
            31  background-color: white;
            32}
            33
            34 /* Game title (located right above button) */
            35.x-buy-button-widget-game-name.x-buy-button-widget-game-name__light {
            36  display: none !important;
            37}
            
            Aviso
            • Os nomes de id/classe acima e o trecho de código são usados em conjunto com o código do widget copiado (a imagem na etapa 5). Por esse motivo, é importante que você implemente o código do widget copiado.
            • Você pode usar o código acima como está ou modificar o código com base no seu cenário. Os comentários de código (linhas 1, 3, 5, 11, 16, 18, 22, 29) estão lá para ajudar a determinar o destino de cada regra CSS e ajudar no estilo futuro. Por exemplo, se você quiser apenas o botão (e não o widget inteiro), será preciso substituir a cor de fundo da sua página nos locais abaixo onde a cor está white — linhas 20 e 27.

            Como criar vários botões ou SKUs

            Você pode consultar os botões Xsolla Pay2Play Widget Simple Integration 4 para obter um exemplo de código sobre como isso é realizado usando o widget Pay2Play.

            A estrutura é semelhante ao código do widget Buy Button. Um exemplo de migração:

            Copy
            Full screen
            Small screen
             1<div id="xsolla-buy-button-widget"></div>
             2<div id="xsolla-buy-button-widget-2"></div>
             3
             4<script>
             5  var options = {
             6    project_id: "191204",
             7    sku: "789",
             8    item_type: "unit",
             9    api_settings: {
            10      sandbox: false
            11    },
            12    widget_ui: {
            13      target_element: "#xsolla-buy-button-widget",
            14      theme: {
            15        foreground: "gold",
            16        background: ""
            17      }
            18    },
            19    payment_widget_ui: {
            20      lightbox: {
            21        height: "700px",
            22        spinner: "round"
            23      }
            24    }
            25  };
            26
            27  // options for second buy button - note the different SKU and target_element
            28  var options2 = {
            29    project_id: "191204",
            30    sku: "123",
            31    item_type: "unit",
            32    api_settings: {
            33      sandbox: false
            34    },
            35    widget_ui: {
            36      target_element: "#xsolla-buy-button-widget-2",
            37      theme: {
            38        foreground: "gold",
            39        background: ""
            40      }
            41    },
            42    payment_widget_ui: {
            43      lightbox: {
            44        height: "700px",
            45        spinner: "round"
            46      }
            47    }
            48  };
            49
            50  var s = document.createElement("script");
            51  s.type = "text/javascript";
            52  s.async = true;
            53  s.src = "https://cdn.xsolla.net/embed/buy-button/3.1.4/widget.min.js";
            54
            55  // one event listener per widget instance. repeat for more buttons, passing in different SKUs
            56  s.addEventListener("load", function () {
            57    var widgetInstance = XBuyButtonWidget.create(options);
            58  });
            59  s.addEventListener("load", function () {
            60    var widgetInstance2 = XBuyButtonWidget.create(options2);
            61  });
            62
            63  document.getElementsByTagName("head")[0].appendChild(s);
            64</script>
            
            Aviso
            • Linhas 1 e 2 — um div por botão, cada um com um ID exclusivo.
            • A partir da linha 26 estão as opções para o segundo botão (disposto no objeto options2). Você precisará de um conjunto de options similares aos acima para cada botão Buy. Observe os diferentes sku (linha 28) e target_element (linha 34, visando a div na linha 2).
            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: 24 de Novembro 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.