L'intégrer à votre application

Abonnements Xsolla

Pour les apps qui vendent des abonnements via Xsolla et n’ont pas de backend. Votre app envoie l’ID utilisateur Xsolla à la passerelle avec une clé API ; la passerelle interroge Xsolla avec votre clé API Xsolla et répond si cet utilisateur a un abonnement actif. La vérification est gratuite.

#Avant de commencer

  • Un Xsolla Publisher Account avec un projet qui vend des abonnements (Subscriptions → Subscription plans).
  • L’ID utilisateur que votre app met dans le jeton de paiement (user.id). Gardez le même pour un utilisateur à chaque fois, par exemple un ID que l’app crée une fois et conserve.

#1. Récupérer les ID et une clé API

  1. 1

    Ouvrir Publisher Account

    publisher.xsolla.com

    Connectez-vous avec un utilisateur autorisé à gérer les clés API.

  2. 2

    Noter l’ID marchand et l’ID de projet

    Ouvrez le projet. L’adresse est publisher.xsolla.com/<ID marchand>/projects/<ID de projet>, par exemple 746076 et 273204.

  3. 3

    Créer une clé API

    Company settings → API keys → Create API key, ou Settings du projet → API keys

    Copiez-la tout de suite : Xsolla ne l’affiche qu’une fois. Qui la possède peut lire vos abonnements, ne la mettez donc pas dans l’app.

#2. Les mettre sur une clé API

  1. 1

    Ouvrir la clé utilisée par votre application

    Console → Clés API → Modifier

    Utilisez une clé dédiée à l’app, limitée aux modèles qu’elle utilise et avec un plafond de dépense.

  2. 2

    Remplir la vérification d’abonnement Xsolla

    Configurer la vérification Xsolla

    Saisissez l’ID marchand, l’ID de projet et la clé API, puis enregistrez. La passerelle essaie la clé auprès de Xsolla avant de la stocker ; elle est stockée chiffrée et plus jamais affichée.

#3. Vérifier depuis l’app

Vérifiez quand la fenêtre de paiement se ferme, puis à l’ouverture de l’app. Envoyez le même ID utilisateur que celui mis dans le jeton de paiement. Ne bloquez pas le démarrage sur la réponse : affichez le dernier résultat enregistré et mettez-le à jour au retour. Chaque clé peut vérifier 120 fois par minute par défaut.

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. Décider quoi débloquer

Réponse de la vérificationCe que fait l'applicationCause habituelle
active: true, in_trial: trueDébloquer. Afficher « Fin de l'essai » avec expiry_time.Essai gratuit, rien prélevé encore
active: trueDébloquer jusqu'à expiry_time.Payé, y compris les abonnements au renouvellement désactivé pas encore expirés
subscribed: true, active: falseBloquer et afficher un écran de renouvellement.Résilié ou gelé
subscribed: falseBloquer et afficher l'écran d'abonnement.Pas encore d’abonnement pour cet utilisateur, ou le paiement n’est pas terminé
HTTP 502 / 503Conserver la dernière réponse enregistrée et réessayer plus tard.Xsolla ou la clé API ne répond pas

Enregistrez expiry_time avec la réponse. Entre deux vérifications, considérez l'abonnement comme utilisable jusqu'à cette date : un téléphone hors ligne continue ainsi de fonctionner.

#5. Protéger la clé dans l’app

Une clé intégrée à une application peut être lue à partir du trafic capturé. Activez la signature des requêtes pour cette clé afin qu'une clé copiée ne puisse pas être utilisée seule, obfusquez le build et gardez un plafond de quota sur la clé.

Signature des requêtes pour les applications →

#6. Voir ce qui s’est passé

Chaque vérification, y compris les réponses en cache et les échecs, figure dans Console → Journaux de requêtes comme ligne xsolla-verify gratuite sur la clé.

  • L’enregistrement indique que Xsolla n’accepte pas la clé : elle a été copiée incomplètement, supprimée, ou appartient à une autre société. Créez-en une nouvelle.
  • xsolla_credentials_invalid : la clé a été supprimée dans Publisher Account après l’enregistrement. Créez une nouvelle clé et saisissez-la sur la clé API.
  • Chaque vérification répond subscribed: false : l’ID utilisateur diffère de celui du jeton de paiement, ou l’ID de projet sur la clé est un autre projet.

Tous les champs et codes d'erreur →

Toujours bloqué ?

Envoyez-nous l'ID de requête ou le message d'erreur, et nous examinerons le problème.