Zum Inhalt springen
KINISI

Einen Laden anbinden

KINISI lässt sich als Zahlungsmittel annehmen — im eigenen Shop, an einem Preisschild, überall dort, wo sonst TRYX steht. Drei Aufrufe genügen. Wer bei XDR5 schon TRYX angebunden hat, erkennt alles wieder.

Der Ablauf

Der Shop kündigt die Zahlung an, schickt die Kundin zu uns, und fragt danach nach. Es zählt allein die dritte Antwort — die, die der Shop selbst bei uns abholt.

Ankündigen

Der Shop ruft payment_intent_create mit seinem Schlüssel und dem Betrag. Er bekommt eine payment_id und eine checkout_url. Ab hier steht der Betrag fest.

Umleiten

Die Kundin geht auf die checkout_url, meldet sich mit ihrer Bank-ID an und bestätigt. Sie verlässt den Shop dabei sichtbar, in einem eigenen Fenster.

Nachfragen

Der Shop ruft payment_intent_get und liefert erst, wenn dort status: "bezahlt" steht und der Betrag stimmt.

Ein Intent verfällt nach 15 Minuten. „Verfallen" wird bei jeder Abfrage aus der Uhrzeit gerechnet. Die Frist hängt damit allein an der Uhr und ist dadurch immer aktuell — ganz ohne Hintergrundlauf, der ausfallen könnte.

Was ein Laden braucht

Eine Bank-ID

Das Konto des Ladens — dorthin geht das Geld. Dieselbe Art ID wie bei jedem Menschen: reine Zufallszeichen. Was der Laden einnimmt, kann er ausgeben oder verschenken.

Einen Shop-Schlüssel

Den vergeben wir. Er wird serverseitig mitgeschickt und gehört ausschließlich auf den Server des Ladens.

⚠ Der Empfänger hängt am Schlüssel

Wer den Schlüssel hat, bekommt das Geld auf genau das Konto, das bei uns dazu hinterlegt ist — und nur dorthin. payment_intent_create nimmt deshalb ausschließlich Betrag und Referenz entgegen. Ein übernommener Shop-Server kann das Ziel damit nur ändern, indem der Schlüssel selbst getauscht wird; das merkt der Laden.

Die Aufrufe

Alles geht an einen Endpunkt, unterschieden durch das Feld action. Immer POST, immer JSON.

Endpunkt

POST http://kinisi.xdr5.de/api/kinisi_json.php
Content-Type: application/json

Derzeit http — und das ist gemessen: kinisi.xdr5.de liefert das Standardzertifikat des Hosters (*.alfahosting-server.de, nachgemessen 25.08.2026), eine TLS-Prüfung schlägt also fehl. Wer aus einem Shop bei demselben Hoster anbindet, bleibt dabei im Rechenzentrum (alle Domains lösen auf dieselbe Adresse auf). Von außen laufen Schlüssel und Antwort im Klartext; der Schlüssel berechtigt allein dazu, Zahlungen auf dieses eine Konto auszustellen. Sobald ein passendes Zertifikat steht, gilt https — die checkout_url folgt dabei automatisch dem Schema, unter dem angefragt wurde.

1 · Zahlung ankündigen

{
  "action":      "payment_intent_create",
  "shop_key":    "…",
  "betrag":      70,
  "referenz":    "Bestellung 4711",
  "erfolg_url":  "https://mein-laden.de/danke",
  "abbruch_url": "https://mein-laden.de/warenkorb"
}
{
  "ok":           true,
  "payment_id":   "pi_a1b2c3d4e5f60718",
  "betrag":       70,
  "checkout_url": "http://kinisi.xdr5.de/zahlen.php?pi=pi_a1b2c3d4e5f60718",
  "gueltig_bis":  1756403600
}

Rückleit-Adressen sind eingeschränkt: erlaubt sind http/https mit reinem Hostnamen, und zwar mit dem Host, der für den Laden hinterlegt ist. So bleibt kinisi.xdr5.de eine geschlossene Weiterleitung. Eine Rückleitung gibt es, sobald ein Host hinterlegt ist.

2 · Stand abfragen

{"action": "payment_intent_get", "shop_key": "…", "payment_id": "pi_…"}
{"ok": true, "status": "bezahlt", "betrag": 70,
 "zahler": "XDR5…", "zeit": 1756400900, "beleg": "9f8e7d6c5b4a3210"}

status: offen · bezahlt · abgebrochen · verfallen. zahler, zeit und beleg erscheinen bei bezahlt, und zwar gegenüber dem Laden, dem gezahlt wurde.

3 · Zurückziehen (optional)

{"action": "payment_intent_cancel", "shop_key": "…", "payment_id": "pi_…"}

Abbrechen darf der Laden, solange die Zahlung offen ist. Für die Kundin erledigt sich das von selbst: Nach der Frist verfällt die Zahlung.

4 · Einen Beleg prüfen (ohne Schlüssel)

{"action": "beleg_pruefen", "beleg": "9f8e7d6c5b4a3210"}

Öffentlich, und das ist der Sinn eines Belegs: Wer einen Ausdruck in der Hand hält, soll ihn prüfen können — auch mit bloßem Papier und ohne Konto. Herausgegeben werden Betrag, Zeit und Art. Ein Beleg belegt den Vorgang; die Beteiligten bleiben bei sich.

Die eine Regel, an der alles hängt

Liefere erst, wenn wir es sagen

Beweis ist allein die Antwort auf payment_intent_get, zusammen mit dem Betrag, den der Shop selbst angekündigt hat. Die Rückkehr des Browsers auf die erfolg_url ist bloß ein Hinweis: Jeder, der die Adresse kennt, kann sie auslösen.

Und ein zweites Netz gehört dazu: Ein regelmäßiger Nachlauf fragt offene Bestellungen noch einmal ab. Er fängt die Kundin auf, die nach dem Bezahlen den Browser schließt und die Erfolgsseite dadurch verpasst.

Wenn ein Aufruf abgelehnt wird

Jede Antwort trägt ok. Ist es false, steht in error, woran es lag.

FehlerBedeutung
shop_unbekanntDer Schlüssel ist hier unbekannt oder kürzer als 32 Zeichen — so lang muss er mindestens sein.
betrag_ungueltigBeträge sind ganze, positive Zahlen — KIN gibt es nur am Stück.
erfolg_url_ungueltigDie Rückleit-Adresse liegt außerhalb der erlaubten Form (siehe oben).
intent_unbekanntDiese payment_id ist für deinen Schlüssel unbekannt — sei es, weil sie hier fehlt, sei es, weil sie einem anderen Laden gehört. Beides antwortet gleich, damit der Endpunkt allein über eigene Zahlungen Auskunft gibt.
intent_verfallenÄlter als 15 Minuten. Der Laden stellt eine neue aus.
intent_schon_bezahltDoppelt bestätigt. Es wurde nur einmal abgebucht.
insufficient_fundsDer Betrag liegt über dem Guthaben der Kundin. Ihr Stand steht im Feld stand.
unbekannte_actionDas Feld action trägt einen Namen außerhalb der Liste oben. Antwortet mit HTTP 404.

Wenn der Shop in TRYX rechnet

Der häufigste Fall — und er kommt mit einer einzigen Preisliste aus.

KINISI ist dann ein zweiter Weg, denselben Preis zu bezahlen. Was 10 TRYX kostet, kostet in KIN eben 10 × Kurs. Den Kurs liefert {"action": "kurs"} im Feld kurs — er sagt, wie viele KIN ein TRYX gerade wert ist.

Rechne einmal um und schreibe das Ergebnis fest. Der Betrag im Intent gilt, was auch der Kurs danach tut. Halte den benutzten Kurs bei der Bestellung fest — dann bleibt später nachvollziehbar, warum es diese Zahl war.

Biete KIN an, solange kurs mit ermittelt: true antwortet. Unter einer Mindestmenge im Umlauf steht dort false — dann lass den Zahlungsweg im Kassenbereich weg. Die Kundin hat ihre Daten dort schon eingegeben; ein Weg, der erst an dieser Stelle scheitert, kostet sie den ganzen Vorgang.

Anfangen

Schreib uns, mit welcher Bank-ID der Laden Geld empfangen soll und unter welchem Host die Rückleitung liegt. Du bekommst einen Schlüssel zurück. Anbinden ist frei und formlos: eine Nachricht, ein Schlüssel zurück — KINISI ist Kunst.

Die vollständige Beschreibung aller Aktionen samt Begründungen steht in kinisi_api.md im Projekt. Für WooCommerce entsteht gerade die KINISI-Erweiterung des Plugins XDR5 TRYX Gateway; bis sie erprobt ist, bindet man die drei Aufrufe oben von Hand ein.