Couponwebhooks.
Reloadify kan in realtime een coupon opvragen bij jouw systeem, bijvoorbeeld als een flow een unieke kortingscode nodig heeft voor een specifieke klant. Jij stelt een HTTPS-endpoint beschikbaar, en elke aanroep is ondertekend zodat je zeker weet dat die van ons komt.
Zo werken couponwebhooks
Je stelt couponwebhooks in op hun instellingenpagina in je Reloadify-account, waar je ze naar je HTTPS-endpoint laat wijzen. Is er een coupon nodig, dan sturen we een JSON-payload met een POST naar je URL; antwoord met een 2xx en de couponcode in de body.
Elke request bevat een Webhook-Signature-header: een HMAC SHA-256 van de ruwe request-body, berekend met het signing secret van je endpoint. Controleer die voordat je de payload vertrouwt.
Handtekeningen controleren
Bereken de HMAC SHA-256 van de ruwe request-body opnieuw met je signing secret en vergelijk die in constante tijd met de waarde in de Webhook-Signature-header. Weiger alles wat niet overeenkomt.
# Header bij elke aanroep:
Webhook-Signature: 5f8c2e…
# Opnieuw berekenen en vergelijken (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
Hash altijd de ruwe request-body, vóór het parsen of opnieuw serialiseren van de JSON. Opnieuw encoderen kan bytes veranderen, waardoor de handtekening niet meer klopt.
Best practices
- Controleer elke handtekening. Het zijn maar een paar regels code, en het is het enige dat je beschermt tegen vervalste requests.
- Reageer snel. Stuur je coupon (of een
2xx) meteen terug, zodat de flow die erom vroeg niet hoeft te wachten. - Gebruik HTTPS. Couponwebhooks gaan alleen naar beveiligde endpoints.
- Houd het secret op de server. Vervang het via de instellingenpagina als het ooit uitlekt.