Bestellstatus-Tracking einrichten
Die Zahlung muss erfolgreich gewesen sein, bevor Sie dem Nutzer Artikel gewähren können.
Wählen Sie eine Methode für das Tracken des Bestellstatus aus:
Wählen Sie die für Ihr Projekt am besten geeignete Methode für den Zugriff auf Xsolla-Daten:
Wenn Sie keinen Server haben oder die Logik für die Kaufabwicklung clientseitig implementieren möchten, stehen folgende Möglichkeiten offen:
Bestellstatus mithilfe der WebSocket API clientseitig abrufen
Die Lösung verwendet Websockets, um den Bestellstatus abzurufen, ohne detaillierte Informationen über die Bestellung zu erhalten. Diese Methode ist vorzuziehen, da nur eine Verbindung zwischen dem Client (z. B. Ihrer Website oder App) und dem Xsolla-Server hergestellt wird und somit die Auslastung des Clients oder des Servers nicht weiter steigt.
Gehen Sie wie folgt vor:
- Damit der Xsolla-Websocket-Server und Ihr Client die Bestellstatusmeldungen erkennen können, müssen Sie eine Verbindung herstellen:
- javascript
const client = new Centrifuge(
connectionURL,
{
data: {
user_external_id: user_external_id,
auth: auth,
project_id: project_id
}
}
)
connectionURL - wss://ws-store.xsolla.com/connection/websocket
auth - user JWT token
- Abonnieren Sie die Ereignisse mithilfe der Funktion
client.on
, um neue Meldungen über den Bestellstatus zu erhalten:
- javascript
client.on('publication', (ctx) => {
//handle the status
});
- Triggern Sie die eigentliche Verbindungsherstellung:
- javascript
client.connect()
- Nutzen Sie die history method der API, um den Bestellstatus-Änderungsverlauf zu erhalten:
- javascript
client.on('subscribed', function (ctx) {
client.history(ctx.channel, { limit: -1, since: { offset: 0 }, reverse: false }).then(function (resp) {
resp.publications.forEach((ctx) => {
/handle the status
});
}, function (err) {
//handle the status
});
});
Nachrichtenrumpf (Beispiel):
- javascript
{
order_id: 59614241,
status: 'new'
}
Folgende Bestellstatus sind möglich:
New
– Bestellung angelegt, aber noch nicht bezahltPaid
– Bestellung bezahltDone
– Bestellung ausgeliefert (alle Belege gesendet, Auslieferung durch Xsolla, externe Plattformen usw. ist erfolgt)Canceled
– Bestellung ist storniert und die Zahlung wurde dem Nutzer erstattet
Empfehlung für die Websocket-Nutzung:
- Beim Websocket-Protokoll beträgt die maximale Wartezeit auf eine Antwort fünf Minuten.
- Die Verbindung sollte beim Öffnen des Zahlungsportals hergestellt werden.
- Die Verbindung sollte getrennt werden, sobald der endgültige Bestellstatus (
Canceled
oderDone
) empfangen wurde. - Verwenden Sie Short-polling, wenn die Websocket-Lebensdauer abläuft oder Verbindungsprobleme auftreten.
Short-polling
Nutzen Sie den API-Aufruf Bestellung abrufen, um nach einer Bestellstatusänderung detaillierte Informationen über die Artikel in der Bestellung zu erhalten.
HinweisHierzu wird eine zyklische Bestellstatusabfrage genutzt (Polling) – eine einfache HTTP-Anfrage, die den Bestellstatus und die ‑informationen abfragt. Die empfohlene Verzögerung zwischen den Anfragen beträgt 3 Sekunden.
Die Methode XsollaCatalog.Purchase
kapselt mehrere Methoden zum Tracken des Bestellstatus. Der Tracking-Mechanismus ist in der Dokumentation des SDK für Unity auf Unternehmensebene ausführlich beschrieben.
Zusätzlich können Sie den Bestellstatus und den Bestellinhalt an die Kaufmethoden-Rückruffunktion onSuccess
übermitteln.
Wird das SDK verwendet, können Sie den Bestellstatus auf einen der folgende Wege tracken:
Bestellstatusänderungen abonnieren
Übermitteln Sie der SDK-Methode getOrderStatus
aus der Store-Bibliothek die folgenden Parameter, um Bestellstatusänderungen zu abonnieren:
listener
– Listener-Objekt vom TypOrderStatusListener
.orderId
– Bestell-ID, die Sie beim Kauf über den Warenkorb, beim One-Click-Kauf oder beim Kauf gegen virtuelle Währung erhalten haben, als Parameter.
Beispielhafter Aufruf der Methode XStore.getOrderStatus:
- kotlin
XStore.getOrderStatus(object : OrderStatusListener() {
override fun onStatusUpdate(status: OrderResponse.Status) {
if(status == OrderResponse.Status.DONE) {
Log.d("MainActivity", "Success")
}
}
override fun onFailure() {
Log.d("MainActivity", "Failure")
}
}, orderId)
Wir empfehlen, die Methode XStore.getOrderStatus
beim Öffnen des Zahlungsportals aufzurufen.
Die Kaufmethoden kapseln mehrere Methoden zum Tracken des Bestellstatus. Das Tracking erfolgt nach dem folgenden Algorithmus:
- Eine Websocket-Verbindung wird hergestellt.
- Wenn eine Websocket-Verbindung erfolgreich hergestellt wurde und sich der Bestellstatus in
done
odercancel
ändert, endet das Tracking. Wenn eine Websocket-Verbindung fehlschlägt oder die Antwort falsche Daten enthält, wird der Bestellstatus per Short-polling getrackt. - Das Tracking des Bestellstatus wird per Short-polling fortgesetzt. Alle drei Sekunden wird eine einfache HTTP-Bestellstatusanfrage gesendet. Das Tracking endet, wenn sich der Bestellstatus in
done
odercancel
ändert.
Bestellstatus abfragen
- Rufen Sie die Methode
getOrder
aus der Login-Bibliothek auf, und übermitteln Sie die folgenden Parameter, um den aktuellen Transaktionsstatus abzurufen:
orderId
– die beim Kauf des Artikels erhaltene Bestell-ID.
- callback
– der Rückruf bei einem erfolgreichen Abruf der Bestellinformationen. Nutzen Sie die GetStatusCallback
-Schnittstelle, und implementieren Sie die beiden Methoden onSuccess
und onError
, um den Rückruf zu implementieren.callback
– der Rückruf bei einem erfolgreichen Abruf der Bestellinformationen. Nutzen Sie dieGetStatusCallback
-Schnittstelle, und implementieren Sie die beiden MethodenonSuccess
undonError
, um den Rückruf zu implementieren.
Bestellstatusinformationen werden an die Methode onSuccess
in einem Objekt vom Typ InvoicesDataResponse
übermittelt. Das Objekt enthält ein Array von InvoiceData
-Objekten. Jedes InvoiceData
-Objekt entspricht einer bestimmten Bestellabwicklungsphase und enthält den Status dieser Phase.
Wenn der Nutzer beispielsweise bei der Bestellung zunächst ungültige Daten eingegeben hat, erscheint in der Liste InvoiceData
ein Objekt mit dem Status InvoicesDataResponse.CANCELED
. Wenn der Nutzer dann die Daten korrigiert und die Bestellung erfolgreich bezahlt, erscheint ein neues InvoiceData
-Objekt im Array, diesmal mit dem Status InvoicesDataResponse.Status.DONE
.
Das Status-Tracking endet, wenn der finale Zahlungsstatus (InvoicesDataResponse.Status.DONE
oder InvoicesDataResponse.Status.ERROR
) empfangen wird.
Beispiel:
- kotlin
XPayments.getStatus(<token>, <isSandbox>, object : GetStatusCallback {
override fun onSuccess(data: InvoicesDataResponse?) {
Log.d(TAG, "onSuccess is fired. Result data = $data")
}
override fun onError(throwable: Throwable?, errorMessage: String?) {
Log.d(TAG, "onError is fired. ErrorMessage = $errorMessage")
}
})
Den Bestellstatus können Sie mit der SDK-Methode CheckPendingOrder
tracken. Übermitteln Sie dazu die folgenden Parameter an die Methode:
AccessToken
– den beim Kauf des Artikels erhaltenen Zahlungstoken.OrderId
– die beim Kauf des Artikels erhaltene Bestell-ID.SuccessCallback
– der Rückruf bei einer erfolgreichen Zahlung.ErrorCallback
– der Rückruf bei einem Anfragefehler.bIsUserInvolvedToPayment
– inwiefern der Nutzer am Bezahlvorgang beteiligt ist. Übermitteln Sie beim Kauf gegen echte Währungtrue
, und beim Erhalt eines kostenlosen Artikels sowie beim Kauf gegen virtuelle Währungfalse
.
Der Tracking-Mechanismus ist in der Dokumentation des SDK für Unreal Engine auf Unternehmensebene ausführlich beschrieben.
Rufen Sie die SDK-Methode CheckOrder
auf, und übermitteln Sie die folgenden Parameter, um den Status und den Inhalt einer Bestellung abzufragen:
AccessToken
– den beim Kauf des Artikels erhaltenen Zahlungstoken.OrderId
– die beim Kauf des Artikels erhaltene Bestell-ID.SuccessCallback
– der Rückruf bei einer erfolgreichen Bestellüberprüfung. Die Antwort enthält den Bestellstatus.ErrorCallback
– der Rückruf bei einem Anfragefehler.
Um den Status der angelegten Bestellungen zu tracken und diese zu validieren, müssen Sie die Webhook-Verarbeitung aufseiten Ihres Anwendungsservers konfigurieren.
Für einen voll funktionsfähigen Ingame-Shop müssen Sie die Verarbeitung der wichtigsten Webhooks implementieren:
Webhook | Art der Benachrichtigung | Beschreibung |
---|---|---|
Benutzervalidierung | user_validation | Wird während der verschiedenen Phasen des Bezahlvorgangs gesendet, um sicherzustellen, dass der Nutzer im Spiel registriert ist. |
Zahlung | payment | Wird gesendet, wenn eine Bestellung bezahlt wurde, und enthält die Zahlungsdaten sowie die Transaktionsdetails. |
Bestellung erfolgreich bezahlt | order_paid | Wird gesendet, wenn ein Zahlung-Webhook erfolgreich verarbeitet wurde, und enthält Informationen über den gekauften Artikel und die Transaktions-ID. Nutzen Sie die Daten aus dem Webhook, um dem Nutzer Artikel zu gewähren. |
Erstattung | refund | Wird gesendet, wenn eine Bestellung storniert wurde, und enthält die Daten der stornierten Zahlung sowie die Transaktionsdetails. |
Bestellung storniert | order_canceled | Wird gesendet, wenn ein Erstattung-Webhook erfolgreich verarbeitet wurde, und enthält Informationen über den gekauften Artikel und die ID der stornierten Transaktion. Nutzen Sie die Daten aus dem Webhook, um dem Nutzer den gekauften Artikel zu entziehen. |
Eine vollständige Liste der Webhooks und allgemeine Informationen zu deren Nutzungsmöglichkeiten finden Sie in der Webhooks-Dokumentation.
Webhook-Versand einrichten
So konfigurieren Sie Webhooks bei Xsolla:
- Öffnen Sie Ihr Projekt im Kundenportal.
- Klicken Sie in der Seitenleiste auf Projekteinstellungen, und wechseln Sie zur Registerkarte Webhooks.
- Geben Sie im Feld Webhook-URL die URL an, an die Xsolla die Webhooks senden soll.
- Klicken Sie auf Webhooks aktivieren.
Webhook-Listener hinzufügen
Ein Webhook-Listener ist ein Programmcode, der es ermöglicht, eingehende Webhooks unter einer bestimmten URL-Adresse zu empfangen, eine Signatur zu generieren und dem Xsolla-Webhook-Server zu antworten.
Signatur generieren
Beim Empfang eines Webhooks ist die Sicherheit der Datenübermittlung zu gewährleisten. Dazu muss aus den Webhook-Daten eine Signatur generiert und danach überprüft werden, ob sie mit der im HTTP-Anfrage-Header gesendeten Signatur übereinstimmt.
So generieren Sie eine Signatur:
- Verketten Sie das JSON aus dem Anfragerumpf mit dem geheimen Schlüssel des Projekts.
- Wenden Sie die kryptografische Hash-Algorithmus SHA-1 auf den im ersten Schritt erhaltenen String an.
Dem Webhook antworten
Um den Empfang eines Webhooks zu bestätigen, muss Ihr Server wie folgt antworten:
- HTTP-Statuscode
200
,201
oder204
ohne Nachrichtenrumpf im Falle einer positiven Antwort. - HTTP-Statuscode
400
samt Problembeschreibung, sofern der angegebene Benutzer nicht gefunden oder eine ungültige Signatur übermittelt wurde.
Ihr Webhook-Handler kann ebenso mit einem HTTP-Statuscode 5xx
antworten, falls Ihr Server vorübergehend Probleme hat.
Erfolgt keine Antwort auf die Webhooks Bestellung erfolgreich bezahlt und Bestellung storniert oder wurde eine Antwort mit dem Code 5xx
empfangen, werden die Webhooks nach folgendem Zeitplan erneut gesendet:
- Zwei Versuche im Abstand von 5 Minuten
- Sieben Versuche im Abstand von jeweils 15 Minuten
- Zehn Versuche im Abstand von jeweils 60 Minuten
Innerhalb von 12 Stunden nach dem ersten Versuch werden maximal 20 Versuche unternommen, Webhooks zu senden.
Erfolgt keine Antwort auf den Webhook Zahlung oder wurde eine Antwort mit dem Code 5xx
empfangen, werden die Webhooks in längeren Zeitabständen erneut gesendet. Innerhalb von 12 Stunden werden maximal 12 Versuche unternommen.
Erfolgt keine Antwort auf den Webhook Benutzervalidierung oder wurde eine Antwort mit dem Code 400
oder 5xx
empfangen, wird der Webhook Benutzervalidierung nicht erneut gesendet.
In diesem Fall wird dem Benutzer ein Fehler angezeigt und die Webhooks Zahlung und Bestellung erfolgreich bezahlt werden nicht gesendet.
Haben Sie einen Tippfehler oder einen anderen Textfehler gefunden? Wählen Sie den Text aus und drücken Sie Strg+Eingabe.