Diese Dokumentation bezieht sich immer auf die aktuellste veröffentlichte Version.
Live Demo: Teste dieses und weitere Plugins live — ohne Installation, ohne Risiko: demo.markus-michalski.net
Das Plugin stellt zwei Endpunkte bereit. Beide sind für die interne Nutzung durch Widget und Admin gedacht.
GET /altcha/challenge (Route frontend.altcha.challenge, Scope Storefront, AJAX) liefert dem Widget eine neue, signierte Challenge.
Antwort 200:
{
"parameters": {
"algorithm": "PBKDF2",
"cost": 2000,
"expiresAt": 1735999999,
"keyLength": 32,
"keyPrefix": "...",
"nonce": "...",
"salt": "..."
},
"signature": "..."
}
| Status | Bedeutung |
|---|---|
200 |
Challenge ausgestellt |
503 |
Spam-Schutz oder ALTCHA-Widget sind für den Verkaufskanal deaktiviert ({"error": "ALTCHA is disabled"}) |
429 |
Challenge-Rate-Limit überschritten, mit Header Retry-After in Sekunden ({"error": "Too many requests"}) |
500 |
APP_SECRET ist leer, die Challenge kann nicht signiert werden |
Kosten, Zähler und Gültigkeit der Challenge stammen aus den Einstellungen des Verkaufskanals, siehe Konfiguration.
Das Widget schreibt die gelöste Challenge Base64-codiert in das Formularfeld altcha. Der Shop prüft sie beim Absenden: Signatur, Ablaufzeit, Algorithmus (nur PBKDF2) und Einmaligkeit der Nonce. Eine Payload über 4096 Zeichen wird abgelehnt.
GET /api/_action/mmd-altcha/blocked-domains (Route api.action.mmd-altcha.blocked-domains, Scope API) versorgt die Ansicht "Blockierte Domains" in der Plugin-Konfiguration. Die Route verlangt die ACL-Berechtigung system_config:read.
| Parameter | Beschreibung |
|---|---|
q |
Suchbegriff, optional, höchstens 253 Zeichen (Rest wird abgeschnitten) |
page |
Seite, Standard 1 |
limit |
Einträge pro Seite, Standard 25, höchstens 100 |
salesChannelId |
Verkaufskanal als UUID, optional. Eine ungültige UUID ergibt 400 mit {"error": "Invalid sales channel ID"} |
Die Antwort enthält items (je Eintrag domain, source mit snapshot oder override, allowed), total, page und perPage. Eigene Einträge stehen zuerst, der Rest alphabetisch.