Integre ao seu app

Assinaturas Xsolla

Para apps que vendem assinaturas pela Xsolla e não têm backend próprio. Seu app envia o ID de usuário da Xsolla ao gateway com uma chave de API; o gateway consulta a Xsolla com sua chave de API da Xsolla e responde se esse usuário tem uma assinatura ativa. A verificação é gratuita.

#Antes de começar

  • Um Xsolla Publisher Account com um projeto que vende assinaturas (Subscriptions → Subscription plans).
  • O ID de usuário que seu app coloca no token de pagamento (user.id). Use sempre o mesmo para um usuário, por exemplo um ID que o app cria uma vez e guarda.

#1. Obtenha os IDs e uma chave de API

  1. 1

    Abra o Publisher Account

    publisher.xsolla.com

    Entre com um usuário que possa gerenciar chaves de API.

  2. 2

    Anote o ID de comerciante e o ID do projeto

    Abra o projeto. O endereço é publisher.xsolla.com/<ID de comerciante>/projects/<ID do projeto>, por exemplo 746076 e 273204.

  3. 3

    Criar uma chave de API

    Company settings → API keys → Create API key, ou Settings do projeto → API keys

    Copie na hora: a Xsolla mostra só uma vez. Quem tiver a chave pode ler suas assinaturas, então não a coloque no app.

#2. Coloque-os numa chave de API

  1. 1

    Abra a chave que o seu app usa

    Console → Chaves de API → Editar

    Use uma chave só para o app, limitada aos modelos que ele usa e com teto de gasto.

  2. 2

    Preencha Verificação de assinatura Xsolla

    Configurar verificação Xsolla

    Informe o ID de comerciante, o ID do projeto e a chave de API e salve. O gateway testa a chave com a Xsolla antes de armazená-la; ela fica criptografada e nunca mais é exibida.

#3. Verifique pelo app

Verifique quando a janela de pagamento fechar e de novo quando o app abrir. Envie o mesmo ID de usuário que o app colocou no token de pagamento. Não bloqueie a abertura do app esperando a resposta: mostre o último resultado salvo e atualize quando a verificação voltar. Cada chave pode verificar 120 vezes por minuto por padrão.

xsolla.dart
import 'dart:convert';
import 'package:http/http.dart' as http;

const apiKey = 'sk-YOUR_KEY';

Future<Map<String, dynamic>?> checkXsolla(String userId) async {
  final res = await http.post(
    Uri.parse('https://www.aisplice.store/v1/xsolla/verify'),
    headers: {
      'Authorization': 'Bearer $apiKey',
      'Content-Type': 'application/json',
      // Request signing on for this key? Then this call must be signed too:
      // ...signedHeaders('POST', '/v1/xsolla/verify'),
    },
    body: jsonEncode({'user_id': userId}),
  );
  if (res.statusCode != 200) return null; // keep the last saved answer
  return jsonDecode(res.body) as Map<String, dynamic>;
}

Future<void> refreshEntitlement(String userId) async {
  final status = await checkXsolla(userId);
  if (status == null) return;
  await saveEntitlement(status); // your local storage
  if (status['active'] == true) unlockPaidFeatures();
}

#4. Decida o que liberar

Resposta da verificaçãoO que o app fazCausa comum
active: true, in_trial: trueLiberar. Mostrar “Teste termina em” com expiry_time.Teste grátis, ainda sem cobrança
active: trueLiberar até expiry_time.Pago, incluindo assinaturas com renovação desligada que ainda não venceram
subscribed: true, active: falseBloquear e mostrar uma tela de renovação.Cancelada ou congelada
subscribed: falseBloquear e mostrar a tela de assinatura.Este usuário ainda não tem assinatura, ou o pagamento não terminou
HTTP 502 / 503Manter a última resposta salva e tentar novamente mais tarde.A Xsolla ou a chave de API não está respondendo

Salve expiry_time junto com a resposta. Entre uma verificação e outra, trate a assinatura como utilizável até esse horário, para que um celular offline continue funcionando.

#5. Proteja a chave no app

Uma chave dentro de um app pode ser lida a partir do tráfego capturado. Ative a assinatura de requisições nessa chave para que uma chave copiada não possa ser usada sozinha, ofusque o build e mantenha um teto de cota na chave.

Assinatura de requisições para apps →

#6. Veja o que aconteceu

Cada verificação, incluindo respostas em cache e falhas, aparece em Console → Logs de requisições como uma linha xsolla-verify gratuita na chave.

  • Ao salvar aparece que a Xsolla não aceita a chave: ela foi copiada pela metade, foi excluída ou é de outra empresa. Crie uma nova.
  • xsolla_credentials_invalid: a chave foi excluída no Publisher Account depois de salva. Crie uma nova e informe-a na chave de API.
  • Toda verificação responde subscribed: false: o ID de usuário difere do usado no token de pagamento, ou o ID do projeto na chave é de outro projeto.

Todos os campos e códigos de erro →

Ainda com problemas?

Envie para nós o ID da requisição ou a mensagem de erro e vamos investigar.