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
Abra o Publisher Account
publisher.xsolla.comEntre com um usuário que possa gerenciar chaves de API.
- 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
Criar uma chave de API
Company settings → API keys → Create API key, ou Settings do projeto → API keysCopie 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
Abra a chave que o seu app usa
Console → Chaves de API → EditarUse uma chave só para o app, limitada aos modelos que ele usa e com teto de gasto.
- 2
Preencha Verificação de assinatura Xsolla
Configurar verificação XsollaInforme 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.
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ção | O que o app faz | Causa comum |
|---|---|---|
| active: true, in_trial: true | Liberar. Mostrar “Teste termina em” com expiry_time. | Teste grátis, ainda sem cobrança |
| active: true | Liberar até expiry_time. | Pago, incluindo assinaturas com renovação desligada que ainda não venceram |
| subscribed: true, active: false | Bloquear e mostrar uma tela de renovação. | Cancelada ou congelada |
| subscribed: false | Bloquear e mostrar a tela de assinatura. | Este usuário ainda não tem assinatura, ou o pagamento não terminou |
| HTTP 502 / 503 | Manter 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.
#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.
Ainda com problemas?
Envie para nós o ID da requisição ou a mensagem de erro e vamos investigar.