aisplice

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. 1

    Publisher Account öffnen

    publisher.xsolla.com

    Melden Sie sich mit einem Nutzer an, der API-Schlüssel verwalten darf.

  2. 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. 3

    API-Schlüssel erstellen

    Company settings → API keys → Create API key, oder in den Settings des Projekts → API keys

    Sofort 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. 1

    Den Schlüssel Ihrer App öffnen

    Konsole → API-Schlüssel → Bearbeiten

    Verwenden Sie einen eigenen Schlüssel für die App, beschränkt auf die genutzten Modelle und mit Kostenobergrenze.

  2. 2

    Xsolla-Abo-Prüfung ausfüllen

    Xsolla-Prüfung einrichten

    Hä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.

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. Entscheiden, was freigeschaltet wird

PrüfergebnisWas die App tutTypische Ursache
active: true, in_trial: trueFreischalten. „Test endet“ mit expiry_time anzeigen.Kostenlose Testphase, noch nichts abgebucht
active: trueBis expiry_time freischalten.Bezahlt, auch Abos mit ausgeschalteter Verlängerung, die noch nicht abgelaufen sind
subscribed: true, active: falseSperren und einen Verlängerungsbildschirm anzeigen.Gekündigt oder eingefroren
subscribed: falseSperren und den Abo-Bildschirm anzeigen.Dieser Nutzer hat noch kein Abo, oder die Zahlung ist nicht abgeschlossen
HTTP 502 / 503Die 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.

Anfragesignierung für Apps →

#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.

Alle Felder und Fehlercodes →

Immer noch nicht gelöst?

Senden Sie uns die Anfrage-ID oder die Fehlermeldung, und wir sehen uns das an.