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.
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.
| Item | Mé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:
- defina limites na venda de chaves de jogo para o usuário
- para personalizar catálogos de itens e ofertas promocionais
- use o sistema de direitos
- armazene dados do usuário na interface de pagamento Xsolla
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.
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.
Venda via link direto
Chaves de jogo podem ser vendidas através de um link direto que abre a interface de pagamento no seguinte formato:
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.
Parâmetros necessários
Adicione os seguintes dados a este link:
YOUR-ITEM-TYPE— tipo de item. Possíveis valores:game— pacote de chave de jogo.game_key— pacote de chave de jogo em uma plataforma específica.bundle— conjunto com pacotes de chaves de jogo.
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:
| Nome | Exemplo 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:
1https://purchase.xsolla.com/pages/buy?type=game_key&project;_id=123456&sku;=pre.order123_steam
Personalização da interface de pagamento
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:
1https://purchase.xsolla.com/pages/buy?type={YOUR-ITEM-TYPE}&project_id={YOUR_PROJECT_ID}&sku={YOUR-ITEM-SKU}&ui_settings=ewoJCQkic2l6ZSI6ICJzbWFsbCIsCgkJCSJ0aGVtZSI6ICJkYXJrIgoJCX0=
Vendendo a usuários autenticados
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:
1https://purchase.xsolla.com/pages/buy?type={YOUR-ITEM-TYPE}&project_id={YOUR_PROJECT_ID}&sku={YOUR_ITEM_SKU}&xsolla_login_token={ACCESS_TOKEN}
Testes de pagamento
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:
1https://purchase.xsolla.com/pages/buy?type={YOUR-ITEM-TYPE}&project_id={YOUR_PROJECT_ID}&sku={YOUR-ITEM-SKU}&mode=sandbox
Vendendo via interface da loja
Você pode vender chaves de jogo através da interface da loja. Para criar uma loja, você pode:
- usar o Site Builder
- criar sua própria versão da loja e integrar a API Store Builde
Para vender pacotes de chaves de jogo usando a API Store Builder:
- Para exibir um catálogo, use o método Obter lista de jogos.
Implemente a compra de chaves de jogo:
- Para uma compra rápida de uma chave, use o método Criar pedido com item especificado. Em resposta a esse método, você receberá um token que deve ser usado para abrir a interface de pagamento.
- Para comprar várias chaves de jogo, use os métodos de gerenciamento de carrinho:
- Atualizar item do carrinho do carrinho atual para adicionar uma chave de jogo ao carrinho.
- Obter o carrinho do usuário atual para obter uma lista de chaves de jogo no carrinho.
- Criar pedido com todos os itens do carrinho atual para pagar pelas chaves do jogo no carrinho. Em resposta a esse método, você receberá um token que deve ser usado para abrir a interface de pagamento.
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:
- html
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>
Parâmetros do widget
| Parâmetro | Tipo | Descrição |
|---|---|---|
project_id | integer | ID 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 | string | Tipo 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 | string | ID de item exclusivo. |
drm | string | SKU da plataforma de distribuição, por exemplo, steam. Permite exibir o preço de uma plataforma específica. |
api_settings | object | Definições de configuração do ambiente e do host:
|
usuário | object | Um objeto com dados do usuário. |
user.auth | string | Token de autorização do usuário: JSON Web Token ou token de acesso Pay Station. |
user.locale | string | Localidade 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 | object | O tema de cores do widget, determinando sua aparência. Aceita valores {foreground:[‘blue’,‘red’,‘green’,‘gold’], background:[’light’,‘dark’]} |
widget_ui.template | string | Modelo. Valores possíveis:
|
widget_ui.target_element | string | Elemento 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âmetro | Tipo | Descrição |
|---|---|---|
payment_ui | object | Parâmetros de aparência da interface de pagamento. |
payment_widget_ui | object | Um objeto com parâmetros que determinam a aparência da interface de pagamento. |
payment_widget_ui.lightbox | object | Um objeto com opções para a janela modal na qual a interface de pagamento é aberta. |
payment_widget_ui.lightbox.width | string | Largura do quadro da lightbox. Se null, depende da largura do Pay Station. O padrão é null. |
payment_widget_ui.lightbox.height | string | Altura do quadro da lightbox. Se null, depende da altura do Pay Station. O padrão é 100%. |
payment_widget_ui.lightbox.zIndex | integer | Define a ordem do arranjo. O padrão é 1000. |
payment_widget_ui.lightbox.overlayOpacity | integer | Opacidade do plano de fundo do widget (0 — totalmente transparente, 1 — completamente opaco). O valor padrão é 60% (.6). |
payment_widget_ui.lightbox.overlayBackground | string | Cor de fundo da sobreposição. O padrão é #000000. |
payment_widget_ui.lightbox.contentBackground | string | Cor 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 | string | Tipo de indicador de carregamento animado. Pode ser xsolla ou round. O padrão é xsolla. |
payment_widget_ui.lightbox.spinnerColor | string | Cor do cata-vento. Sem valor padrão. |
payment_widget_ui.childWindow | object | Configurações para a janela filho na qual a interface de pagamento é aberta. Funciona para a versão mobile. |
payment_widget_ui.childWindow.target | string | A 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âmetro | Descrição |
|---|---|
| init | Widget inicializado. |
| open | Widget aberto. |
| load | Interface de Payments (Pay Station) carregada. |
| close | Interface de Pagamento (Pay Station) fechada. |
| status | O usuário está na página de status. |
| status-invoice | O usuário está na página de status; pagamento em andamento. |
| status-delivering | Evento 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-done | O usuário está na página de status; pagamento creditado na conta do usuário. |
| status-troubled | Evento 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
- Abra seu projeto na Conta de Distribuidor e acesse a seção Items catalog > Virtual items.
- Selecione uma chave de jogo e acesse a aba Widget customization.
- No bloco Customize, selecione a cor do plano de fundo.
theme no código para que o parâmetro background tenha uma cadeia de caracteres vazia como um valor.- Quando você adiciona o código do widget à sua página, ele inclui estilos herdados. Adicione os estilos abaixo para substituir esses estilos.
style abaixo da tag scriptque você obteve da aba Widget customization por motivos de herança/prioridade CSS.- css
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}
- 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:
- html
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>
- Linhas 1 e 2 — um
divpor 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 deoptionssimilares aos acima para cada botão Buy. Observe os diferentessku(linha 28) etarget_element(linha 34, visando adivna linha 2).
Encontrou um erro de texto ou digitação? Selecione o texto e pressione Ctrl+Enter.