Signature des requêtes
Toutes les requêtes envoyées sur vos endpoint sont signées à l'aide de la clé secrète liée au endpoint.
Côté Cards, la signature est créée à l'aide du payload, encrypté avec votre clé :
$payloadJson = json_encode($payload);
$signature = hash_hmac('sha256', $payloadJson, $secret_endpoint_key);
Cette signature est présente dans l'en-tête de la requête, dans la variable Cards-Signature
.
Voilà un exemple de code PHP pour récupérer la requête et la vérifier :
// secret key of the webhook endpoint
$endpoint_secret = 'xxxx';
// get payload
$payload = @file_get_contents('php://input');
// get signature
$signature_header = '';
$headers = apache_request_headers();
if (isset($headers['Cards-Signature']) and !empty($headers['Cards-Signature'])) {
$signature_header = $headers['Cards-Signature'];
}
// verify signature
$buildHash = hash_hmac('sha256', $payload, $secret_endpoint_key);
if ($buildHash !== $signature_header) {
// key is incorrect
http_response_code(400);
exit();
}
// get payload data
$event_type = false;
if (isset($payload) and !empty($payload)) {
$payload = json_decode($payload);
$event_type = $payload->type;
}
// handle the request
if ($event_type == 'survey-complete') {
// a survey has been complete
} elseif ($event_type == 'quiz-complete') {
// a quiz has been complete
} elseif ($event_type == 'chapter-complete') {
// a chapter has been complete
} elseif ($event_type == 'training-complete') {
// a training has been complete
}
Dernière mise à jour