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
Ouvrir Publisher Account
publisher.xsolla.comConnectez-vous avec un utilisateur autorisé à gérer les clés API.
- 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
Créer une clé API
Company settings → API keys → Create API key, ou Settings du projet → API keysCopiez-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
Ouvrir la clé utilisée par votre application
Console → Clés API → ModifierUtilisez une clé dédiée à l’app, limitée aux modèles qu’elle utilise et avec un plafond de dépense.
- 2
Remplir la vérification d’abonnement Xsolla
Configurer la vérification XsollaSaisissez 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.
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érification | Ce que fait l'application | Cause habituelle |
|---|---|---|
| active: true, in_trial: true | Débloquer. Afficher « Fin de l'essai » avec expiry_time. | Essai gratuit, rien prélevé encore |
| active: true | Débloquer jusqu'à expiry_time. | Payé, y compris les abonnements au renouvellement désactivé pas encore expirés |
| subscribed: true, active: false | Bloquer et afficher un écran de renouvellement. | Résilié ou gelé |
| subscribed: false | Bloquer et afficher l'écran d'abonnement. | Pas encore d’abonnement pour cet utilisateur, ou le paiement n’est pas terminé |
| HTTP 502 / 503 | Conserver 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é.
#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.
Toujours bloqué ?
Envoyez-nous l'ID de requête ou le message d'erreur, et nous examinerons le problème.