aisplice

Integralo nella tua app

Abbonamenti Xsolla

Per app che vendono abbonamenti tramite Xsolla e non hanno un backend proprio. La tua app invia l’ID utente Xsolla al gateway con una chiave API; il gateway chiede a Xsolla con la tua chiave API Xsolla e risponde se quell’utente ha un abbonamento attivo. La verifica è gratuita.

#Prima di iniziare

  • Un Xsolla Publisher Account con un progetto che vende abbonamenti (Subscriptions → Subscription plans).
  • L’ID utente che la tua app mette nel token di pagamento (user.id). Usa sempre lo stesso per un utente, per esempio un ID che l’app crea una volta e conserva.

#1. Ottieni gli ID e una chiave API

  1. 1

    Apri Publisher Account

    publisher.xsolla.com

    Accedi con un utente che può gestire le chiavi API.

  2. 2

    Annota l’ID commerciante e l’ID progetto

    Apri il progetto. L’indirizzo è publisher.xsolla.com/<ID commerciante>/projects/<ID progetto>, per esempio 746076 e 273204.

  3. 3

    Crea una chiave API

    Company settings → API keys → Create API key, oppure Settings del progetto → API keys

    Copiala subito: Xsolla la mostra una sola volta. Chi la possiede può leggere i tuoi abbonamenti, quindi non metterla nell’app.

#2. Inseriscili su una chiave API

  1. 1

    Apri la chiave usata dalla tua app

    Console → Chiavi API → Modifica

    Usa una chiave dedicata all’app, limitata ai modelli che usa e con un tetto di spesa.

  2. 2

    Compila Verifica abbonamento Xsolla

    Configura verifica Xsolla

    Inserisci l’ID commerciante, l’ID progetto e la chiave API, poi salva. Il gateway prova la chiave con Xsolla prima di salvarla; viene salvata cifrata e mai più mostrata.

#3. Verifica dall’app

Verifica quando la finestra di pagamento si chiude e di nuovo all’apertura dell’app. Invia lo stesso ID utente che l’app ha messo nel token di pagamento. Non bloccare l’avvio in attesa della risposta: mostra l’ultimo risultato salvato e aggiornalo quando arriva. Ogni chiave può verificare 120 volte al minuto di default.

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. Decidi cosa sbloccare

Risposta della verificaCosa fa l'appCausa tipica
active: true, in_trial: trueSblocca. Mostra “La prova termina il” con expiry_time.Prova gratuita, nessun addebito ancora
active: trueSblocca fino a expiry_time.Pagato, compresi gli abbonamenti con rinnovo spento non ancora scaduti
subscribed: true, active: falseBlocca e mostra una schermata di rinnovo.Disdetto o congelato
subscribed: falseBlocca e mostra la schermata di abbonamento.Questo utente non ha ancora un abbonamento, oppure il pagamento non è finito
HTTP 502 / 503Mantieni l'ultima risposta salvata e riprova più tardi.Xsolla o la chiave API non risponde

Salva expiry_time insieme alla risposta. Tra una verifica e l'altra, considera l'abbonamento utilizzabile fino a quel momento, così un telefono offline continua a funzionare.

#5. Proteggi la chiave nell’app

Una chiave dentro un'app può essere letta dal traffico intercettato. Attiva la firma delle richieste per quella chiave, così una chiave copiata non può essere usata da sola, offusca la build e mantieni un tetto di quota sulla chiave.

Firma delle richieste per le app →

#6. Controlla cosa è successo

Ogni verifica, comprese risposte in cache ed errori, compare in Console → Log delle richieste come riga xsolla-verify gratuita sulla chiave.

  • Al salvataggio risulta che Xsolla non accetta la chiave: è stata copiata a metà, eliminata o appartiene a un’altra azienda. Creane una nuova.
  • xsolla_credentials_invalid: la chiave è stata eliminata in Publisher Account dopo il salvataggio. Crea una nuova chiave e inseriscila sulla chiave API.
  • Ogni verifica risponde subscribed: false: l’ID utente è diverso da quello del token di pagamento, oppure l’ID progetto sulla chiave è di un altro progetto.

Tutti i campi e i codici di errore →

Non hai ancora risolto?

Inviaci l'ID richiesta o il messaggio di errore e verificheremo.