Я разрабатываю приложение Node.js, и я борюсь за проверку запроса Mandrill Webhook.Подтвердить подпись Mandrill X-Mandrill
Как указано здесь http://help.mandrill.com/entries/23704122-Authenticating-webhook-requests это должно быть что-то вроде этого в PHP:
/**
* Generates a base64-encoded signature for a Mandrill webhook request.
* @param string $webhook_key the webhook's authentication key
* @param string $url the webhook url
* @param array $params the request's POST parameters
*/
function generateSignature($webhook_key, $url, $params) {
$signed_data = $url;
ksort($params);
foreach ($params as $key => $value) {
$signed_data .= $key;
$signed_data .= $value;
}
return base64_encode(hash_hmac('sha1', $signed_data, $webhook_key, true));
}
Так что я пришел с этим:
var url = "http://....";
var post = "<POST Data>";
require('crypto').createHmac("SHA1", "<Webhook Signature Key>").update(url+post).digest("base64");
К сожалению, это не работает. Я получаю другую подпись.
данные POST приходит urlencoded, например:
mandrill_events=%5B%7B%22event%22%3A%22inbound ...
Urldecoded:
mandrill_events=[{"event":"inbound ...
Док Mandrill говорит, что ограничитель не должен быть включен, так что это строка, я использую (без =
):
mandrill_events[{"event":"inbound ...
Любые идеи о том, что?
PS: Я дважды проверил URL-адрес и ключ Webhook :-).
Чтобы быть понятным здесь, mandrillEventsParamVal должен ссылаться на часть запроса URL-адреса, правильно? Что-нибудь после «?» в URL. – Brant