Я пытаюсь подключиться к API, используя PHP, и мне нужна правильная подпись.
Их документация дословно:
Командную строку необходимо хэшировать с использованием алгоритма хеширования HMAC SHA-1.
против секретного ключа API. Полученный байтовый массив должен быть Base64
закодирован в формате UTF-8, чтобы его можно было передать через http.
Чтобы сгенерировать подпись, вы должны в нижнем регистре полный список
параметры запроса и сортировать их в алфавитном порядке через поле для каждого
пара поле-значение. Результирующая строка для подписи из предыдущего
пример с секретным ключом VDaACYb0LV9eNjTetIOElcVQkvJck_J_QljX будет
быть:
apikey = mivr6x7u6bn_sdahobpjnejpgest35exqjb8cg20 & команда = deployvirtualmachine & serviceofferingid = 21624abb-764e-4def-81d7-9fc54b5957fb & templateid = 54c83a5e-c548-4d91-8b14-5cf2d4c081ee & ZoneId = 1128bd56-b4d9-4ac6-a7b9-c715b187ce11
В результате значение подписи:
ahlpA6J1Fq6OYI1HFrMSGgBt0WY% 3D
Пример попытки:
$string = 'apikey=mivr6x7u6bn_sdahobpjnejpgest35exqjb8cg20&command=deployvirtualmachine&serviceofferingid=21624abb-764e-4def-81d7-9fc54b5957fb&templateid=54c83a5e-c548-4d91-8b14-5cf2d4c081ee&zoneid=1128bd56-b4d9-4ac6-a7b9-c715b187ce11
';
$string = utf8_encode(strtolower($string));
$key = 'VDaACYb0LV9eNjTetIOElcVQkvJck_J_QljX';
$signature = hash_hmac('sha1', $string , $key);
print 'SIGNATURE:'.$signature.'<br>';
if($signature=='ahlpA6J1Fq6OYI1HFrMSGgBt0WY%3D'){
print 'SUCCESS';
}else{
print 'FAIL';
}
РЕЗУЛЬТАТ: 9077d90baa7ab8913811b64a50814b640dce60eb
Предположим, что это: ahlpA6J1Fq6OYI1HFrMSGgBt0WY% 3D
ВОПРОС: Результат НЕ соответствует их документации. Есть идеи, что я сделал не так?