urbanstudio / empedia-captcha
SDK für EMPEDIAcaptcha: Bot-Prüfung (siteverify), Inhaltsprüfung (check) und Widget-Helfer. Ohne Abhängigkeiten.
Package info
github.com/urbanstudioGmbH/empedia-captcha-php
pkg:composer/urbanstudio/empedia-captcha
v1.0.2
2026-10-19 16:51 UTC
Requires
- php: >=7.4
Requires (Dev)
None
Suggests
- ext-curl: schneller als PHP-Streams
Provides
None
Conflicts
None
Replaces
None
README
SDK für EMPEDIAcaptcha – ohne Abhängigkeiten, PHP ≥ 7.4.
composer require urbanstudio/empedia-captcha
# oder: sdk/php/src in das eigene Projekt kopieren und Client, VerifyResult, CheckResult und Widget einbinden (HttpTransport.php lädt der Client bei Bedarf selbst)
use Empedia\Captcha\{Client, Widget}; $captcha = Client::fromEnv(); // EMPEDIA_CAPTCHA_SITEKEY / _SECRET / _BASE (Umgebungsvariable oder PHP-Konstante) // Im Formular echo Widget::script($captcha->base()); echo Widget::element($captcha->sitekey(), 'contact'); // Beim Absenden $r = $captcha->verify($_POST[Client::TOKEN_FIELD] ?? '', 'contact'); if (!$r->success) { http_response_code(400); exit('Bitte erneut versuchen.'); } // Optional: Inhaltsprüfung (ab Paket „Pro“) $v = $captcha->check(['ip' => $_SERVER['REMOTE_ADDR'], 'email' => $email, 'message' => $text]); if ($v->isBlocked()) { /* ablehnen */ } elseif ($v->needsReview()) { /* in den Spam-Ordner */ }
- Das Secret gehört nur auf den Server.
- Nicht erreichbarer Dienst:
new Client(..., ['failOpen' => true])lässt Anfragen durch (Standard: ablehnen). Auch bei erschöpftem Kontingent undfailOpenwerden Anfragen ohne Token durchgelassen ($captcha->quotaExceeded()). - Eigene HTTP-Schicht:
new Client(..., ['transport' => fn ($method, $url, $body, $headers, $timeout) => …])(Antworttext odernull), z. B.wp_remote_requestin WordPress; ohne Angabe cURL bzw. PHP-Streams. - Rückmeldung an das System:
$captcha->report('spam'|'ham', ['email' => …, 'ip' => …]).
Ohne Browser
$c->getToken('api', 'https://shop.example.com') rechnet die Aufgabe selbst (Server-zu-Server). Macht offene Endpunkte für Massenabfragen teuer; prüft keine Menschen. Beispiele für Laravel/Symfony: Ordner examples.