In Ihre App einbauen
Xsolla-Abos
Für Apps, die Abos über Xsolla verkaufen und kein eigenes Backend haben. Ihre App sendet die Xsolla-Nutzer-ID mit einem API-Schlüssel an das Gateway; das Gateway fragt Xsolla mit Ihrem Xsolla-API-Schlüssel und antwortet, ob dieser Nutzer ein aktives Abo hat. Die Prüfung ist kostenlos.
#Bevor Sie beginnen
- Ein Xsolla Publisher Account mit einem Projekt, das Abos verkauft (Subscriptions → Subscription plans).
- Die Nutzer-ID, die Ihre App in das Zahlungstoken schreibt (user.id). Verwenden Sie für einen Nutzer immer dieselbe, zum Beispiel eine ID, die die App einmal erzeugt und speichert.
#1. IDs und API-Schlüssel besorgen
- 1
Publisher Account öffnen
publisher.xsolla.comMelden Sie sich mit einem Nutzer an, der API-Schlüssel verwalten darf.
- 2
Händler-ID und Projekt-ID notieren
Öffnen Sie das Projekt. Die Adresse lautet publisher.xsolla.com/<Händler-ID>/projects/<Projekt-ID>, zum Beispiel 746076 und 273204.
- 3
API-Schlüssel erstellen
Company settings → API keys → Create API key, oder in den Settings des Projekts → API keysSofort kopieren: Xsolla zeigt ihn nur einmal. Wer ihn hat, kann Ihre Abos lesen, also nicht in die App einbauen.
#2. Am API-Schlüssel eintragen
- 1
Den Schlüssel Ihrer App öffnen
Konsole → API-Schlüssel → BearbeitenVerwenden Sie einen eigenen Schlüssel für die App, beschränkt auf die genutzten Modelle und mit Kostenobergrenze.
- 2
Xsolla-Abo-Prüfung ausfüllen
Xsolla-Prüfung einrichtenHändler-ID, Projekt-ID und API-Schlüssel eingeben und speichern. Das Gateway probiert den Schlüssel vor dem Speichern bei Xsolla aus; er wird verschlüsselt gespeichert und nie wieder angezeigt.
#3. Aus der App prüfen
Prüfen Sie, wenn sich das Zahlungsfenster schließt, und erneut beim Öffnen der App. Senden Sie dieselbe Nutzer-ID, die die App in das Zahlungstoken geschrieben hat. Blockieren Sie den App-Start nicht: Zeigen Sie das zuletzt gespeicherte Ergebnis und aktualisieren Sie es, wenn die Prüfung antwortet. Jeder Schlüssel darf standardmäßig 120-mal pro Minute prüfen.
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. Entscheiden, was freigeschaltet wird
| Prüfergebnis | Was die App tut | Typische Ursache |
|---|---|---|
| active: true, in_trial: true | Freischalten. „Test endet“ mit expiry_time anzeigen. | Kostenlose Testphase, noch nichts abgebucht |
| active: true | Bis expiry_time freischalten. | Bezahlt, auch Abos mit ausgeschalteter Verlängerung, die noch nicht abgelaufen sind |
| subscribed: true, active: false | Sperren und einen Verlängerungsbildschirm anzeigen. | Gekündigt oder eingefroren |
| subscribed: false | Sperren und den Abo-Bildschirm anzeigen. | Dieser Nutzer hat noch kein Abo, oder die Zahlung ist nicht abgeschlossen |
| HTTP 502 / 503 | Die zuletzt gespeicherte Antwort behalten und später erneut prüfen. | Xsolla oder der API-Schlüssel antwortet nicht |
Speichern Sie expiry_time mit der Antwort. Behandeln Sie das Abo zwischen den Prüfungen bis zu diesem Zeitpunkt als nutzbar, damit ein Handy ohne Verbindung weiter funktioniert.
#5. Den Schlüssel in der App schützen
Ein Schlüssel in einer App lässt sich aus mitgeschnittenem Datenverkehr auslesen. Aktivieren Sie für diesen Schlüssel die Anfragesignierung, damit ein kopierter Schlüssel allein nicht nutzbar ist, verschleiern Sie den Build und behalten Sie ein Kontingentlimit für den Schlüssel bei.
#6. Nachsehen, was passiert ist
Jede Prüfung, auch zwischengespeicherte Antworten und Fehler, steht in Konsole → Anfrageprotokolle als kostenlose xsolla-verify-Zeile beim Schlüssel.
- Beim Speichern heißt es, Xsolla akzeptiere den Schlüssel nicht: Er wurde unvollständig kopiert, gelöscht oder gehört zu einer anderen Firma. Erstellen Sie einen neuen.
- xsolla_credentials_invalid: Der Schlüssel wurde nach dem Speichern im Publisher Account gelöscht. Erstellen Sie einen neuen und tragen Sie ihn am API-Schlüssel ein.
- Jede Prüfung antwortet subscribed: false: Die Nutzer-ID weicht von der im Zahlungstoken ab, oder die Projekt-ID am Schlüssel gehört zu einem anderen Projekt.
Immer noch nicht gelöst?
Senden Sie uns die Anfrage-ID oder die Fehlermeldung, und wir sehen uns das an.