API
Terug naar website
Webhooks

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.

Een aanroep controleren
# 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