Intégralo en tu app

Suscripciones de Xsolla

Para apps que venden suscripciones con Xsolla y no tienen backend propio. Tu app envía el ID de usuario de Xsolla a la pasarela con una clave API; la pasarela consulta a Xsolla con tu clave API de Xsolla y responde si ese usuario tiene una suscripción activa. La verificación es gratuita.

#Antes de empezar

  • Una Xsolla Publisher Account con un proyecto que vende suscripciones (Subscriptions → Subscription plans).
  • El ID de usuario que tu app pone en el token de pago (user.id). Usa siempre el mismo para un usuario, por ejemplo un ID que la app crea una vez y guarda.

#1. Obtén los ID y una clave API

  1. 1

    Abre Publisher Account

    publisher.xsolla.com

    Inicia sesión con un usuario que pueda gestionar claves API.

  2. 2

    Anota el ID de comerciante y el ID de proyecto

    Abre el proyecto. La dirección es publisher.xsolla.com/<ID de comerciante>/projects/<ID de proyecto>, por ejemplo 746076 y 273204.

  3. 3

    Crear una clave de API

    Company settings → API keys → Create API key, o Settings del proyecto → API keys

    Cópiala enseguida: Xsolla solo la muestra una vez. Quien la tenga puede leer tus suscripciones, así que no la pongas en la app.

#2. Ponlos en una clave API

  1. 1

    Abre la clave que usa tu app

    Consola → Claves de API → Editar

    Usa una clave solo para la app, limitada a los modelos que usa y con un tope de gasto.

  2. 2

    Rellena Verificación de suscripción de Xsolla

    Configurar verificación de Xsolla

    Introduce el ID de comerciante, el ID de proyecto y la clave API, y guarda. La pasarela prueba la clave con Xsolla antes de guardarla; se guarda cifrada y no se vuelve a mostrar.

#3. Comprueba desde la app

Comprueba al cerrarse la ventana de pago y otra vez al abrir la app. Envía el mismo ID de usuario que la app puso en el token de pago. No bloquees el arranque esperando la respuesta: muestra el último resultado guardado y actualízalo cuando llegue. Cada clave puede comprobar 120 veces por minuto por defecto.

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. Decide qué desbloquear

Respuesta de la verificaciónQué hace la appCausa habitual
active: true, in_trial: trueDesbloquea. Muestra “La prueba termina” con expiry_time.Prueba gratuita, aún sin cobro
active: trueDesbloquea hasta expiry_time.Pagado, incluidas las suscripciones con renovación desactivada que aún no han vencido
subscribed: true, active: falseBloquea y muestra una pantalla de renovación.Cancelada o congelada
subscribed: falseBloquea y muestra la pantalla de suscripción.Este usuario aún no tiene suscripción, o el pago no ha terminado
HTTP 502 / 503Conserva la última respuesta guardada y reintenta más tarde.Xsolla o la clave API no responde

Guarda expiry_time con la respuesta. Entre verificaciones, trata la suscripción como utilizable hasta esa hora, para que un teléfono sin conexión siga funcionando.

#5. Protege la clave en la app

Una clave dentro de una app se puede leer del tráfico capturado. Activa la firma de solicitudes en esa clave para que una clave copiada no pueda usarse por sí sola, ofusca la compilación y mantén un tope de cuota en la clave.

Firma de solicitudes para apps →

#6. Revisa qué pasó

Cada verificación, incluidas las respuestas en caché y los fallos, aparece en Consola → Registros de solicitudes como una fila xsolla-verify gratuita en la clave.

  • Al guardar dice que Xsolla no acepta la clave: se copió incompleta, se eliminó o es de otra empresa. Crea una nueva.
  • xsolla_credentials_invalid: la clave se eliminó en Publisher Account después de guardarla. Crea una clave nueva e introdúcela en la clave API.
  • Todas las verificaciones responden subscribed: false: el ID de usuario no coincide con el del token de pago, o el ID de proyecto de la clave es de otro proyecto.

Todos los campos y códigos de error →

¿Sigues con el problema?

Envíanos el ID de solicitud o el mensaje de error y lo revisaremos.