Coupon-Webhooks.
Reloadify kann in Echtzeit einen Coupon bei deinem System abfragen, zum Beispiel wenn ein Flow einen einmaligen Rabattcode für einen bestimmten Kunden braucht. Du stellst einen HTTPS-Endpoint bereit, und jeder Aufruf ist signiert, damit du sicher weißt, dass er von uns kommt.
So funktionieren Coupon-Webhooks
Du richtest Coupon-Webhooks auf ihrer Einstellungsseite in deinem Reloadify-Konto ein und lässt sie dort auf deinen HTTPS-Endpoint zeigen. Wird ein Coupon gebraucht, senden wir einen JSON-Payload per POST an deine URL; antworte mit einem 2xx und dem Couponcode im Body.
Jede Anfrage enthält einen Webhook-Signature-Header: einen HMAC SHA-256 des unveränderten Request-Bodys, berechnet mit dem Signing Secret deines Endpoints. Prüf ihn, bevor du dem Payload vertraust.
Signaturen prüfen
Berechne den HMAC SHA-256 des unveränderten Request-Bodys mit deinem Signing Secret neu und vergleiche ihn in konstanter Zeit mit dem Wert im Webhook-Signature-Header. Lehne alles ab, was nicht übereinstimmt.
# Header bei jedem Aufruf:
Webhook-Signature: 5f8c2e…
# Neu berechnen und vergleichen (Pseudocode):
expected = HMAC_SHA256(secret, raw_body)
valid = constant_time_equal(expected, header_value)
$signature = $_SERVER['HTTP_WEBHOOK_SIGNATURE'] ?? '';
$body = file_get_contents('php://input');
$expected = hash_hmac('sha256', $body, $secret);
if (!hash_equals($expected, $signature)) {
http_response_code(400);
exit;
}
import hashlib, hmac
def verify(headers, body: bytes, secret: str) -> bool:
expected = hmac.new(
secret.encode(), body, hashlib.sha256
).hexdigest()
return hmac.compare_digest(
expected, headers.get("Webhook-Signature", "")
)
require "openssl"
def verify(signature, body, secret)
expected = OpenSSL::HMAC.hexdigest("SHA256", secret, body)
Rack::Utils.secure_compare(expected, signature.to_s)
end
Hashe immer den unveränderten Request-Body, bevor du das JSON parst oder neu serialisierst. Erneutes Kodieren kann Bytes verändern, sodass die Signatur nicht mehr stimmt.
Best practices
- Prüf jede Signatur. Es sind nur ein paar Zeilen Code, und sie sind das Einzige, was dich vor gefälschten Anfragen schützt.
- Antworte schnell. Schick deinen Coupon (oder ein
2xx) sofort zurück, damit der Flow, der ihn angefragt hat, nicht warten muss. - Nutze HTTPS. Coupon-Webhooks gehen nur an gesicherte Endpoints.
- Lass das Secret auf dem Server. Ersetze es über die Einstellungsseite, falls es jemals nach außen gelangt.