====== Website-Formular anbinden ======
Mit der **Formular**-Verbindung (Gateway-Typ 8) kannst Du Eingaben von einer Website in einen Snapper-Ordner schreiben. Die Daten landen als lesbares JSON-Element (MIME ''snapper/form'') und lassen sich in der Base-Oberfläche öffnen.
**Wichtig:** Das API-Secret gehört **nur auf den Server** (Backend, Proxy, Cron). Niemals im HTML, JavaScript oder als verstecktes Formularfeld — jeder Besucher könnte es sonst auslesen.
===== Einrichtung in Snapper =====
- Gehe zu **Verwaltung → Verbindungen** und lege eine Verbindung vom Typ **Formular** an.
- Wähle den **Zielordner**, in dem Eingänge abgelegt werden sollen.
- Optional: setze eine **IP-Whitelist** auf die IP(s) Deines Webservers (komma-separiert). Leer = alle IPs (dann schützt nur das Secret).
- Nach dem Speichern erhältst Du ein **API-Secret** — einmalig anzeigen und sicher verwahren (z. B. in einer Config außerhalb des Webroots).
- Endpoint: ''%%https://api.snapper.network/webhook/form%%''
===== Empfohlenes Muster =====
Browser → Deine Website (HTML-Formular, ohne Secret)
→ PHP auf Deinem Server (Secret nur hier)
→ POST https://api.snapper.network/webhook/form
===== HTML-Formular (ohne Secret) =====
Das Formular sendet nur an **Deine** Domain:
===== Demo: PHP-Proxy auf Deinem Server =====
Beispiel ''kontakt-senden.php''. Das Secret kommt aus der Umgebung (oder einer Datei **außerhalb** des öffentlichen Webroots) — nicht aus dem Formular.
$name,
'email' => $email,
'subject' => $subject,
'message' => $message,
];
$ch = curl_init($snapperEndpoint);
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_HTTPHEADER => [
'Authorization: Bearer ' . $snapperSecret,
'Content-Type: application/json',
'Accept: application/json',
],
CURLOPT_POSTFIELDS => json_encode($payload, JSON_UNESCAPED_UNICODE),
CURLOPT_RETURNTRANSFER => true,
CURLOPT_TIMEOUT => 20,
]);
$responseBody = curl_exec($ch);
$httpCode = (int)curl_getinfo($ch, CURLINFO_HTTP_CODE);
$curlErr = curl_error($ch);
curl_close($ch);
if ($responseBody === false || $httpCode < 200 || $httpCode >= 300) {
error_log('Snapper Formular-Webhook fehlgeschlagen: HTTP ' . $httpCode . ' ' . $curlErr);
http_response_code(502);
exit('Senden fehlgeschlagen. Bitte später erneut versuchen.');
}
header('Location: /danke.html');
exit;
**Server-Umgebung (Beispiel):**
export SNAPPER_FORM_SECRET='dein-secret-hier'
Optional in Snapper die **IP-Whitelist** auf die ausgehende IP Deines Webservers setzen.
===== Übermittlung per curl (Server / Test) =====
curl -X POST 'https://api.snapper.network/webhook/form' \
-H 'Authorization: Bearer DEIN_SECRET' \
-H 'Content-Type: application/json' \
-d '{
"name": "Max Mustermann",
"email": "max@example.com",
"subject": "Anfrage",
"message": "Hallo, ich habe eine Frage."
}'
Alternativ Header ''X-Snapper-Form-Key: DEIN_SECRET''.
===== Hinweise =====
* Secret **nie** im Browser, HTML oder Client-JavaScript.
* Erfolgreiche Übermittlung an Snapper: HTTP **200** mit ''script.status = success''.
* Felder mit HTML/Script-Inhalten werden von Snapper abgelehnt.
* Das Honeypot-Feld ''_hp'' (oder ''website'') muss leer bleiben — sonst speichert Snapper nichts (stille Abwehr).
* Der Titel des Snapper-Elements wird aus ''subject'', ''name'' oder ''email'' abgeleitet.
* Details zur Gateway-API: [[api:gateways|Schnittstellen]] · Übersicht: [[integrations:gateways|Snapper Schnittstellen]]