Запрос на подпись CloudStack API - PHP - PullRequest
0 голосов
/ 17 июня 2020

Я хочу запускать команды Cloudstack через вызовы API, но, очевидно, у меня не получается создать подпись.

<?php

$baseurl = "http://localhost:8080/client/api?";

$response = "response=json";

$command = "command=listUsers";
$apikey = "Z-dr9dp6gZbKmrl9stAm6uGBSWqSonMhc2i-nqVlSG6MlpvqWFWW1uVJEZnrrwq_drQXDWRFTGwZ1p_qarLzwQ";
$secretkey = "p_iiuI3oDxBCxmUgceAHYf-f9uotX9B-uK2qxmVAT_bbYfPdhiePnlPRjbL6CvtPH8gDbjIh8uGPmP1KjN6HBQ";


$hash = hash_hmac("sha1",strtolower($apikey . "&" . $command),$secretkey, true);
$base64encoded = base64_encode($hash);
$signature = "signature=" . urlencode($base64encoded);

$link = $baseurl . "apikey=" . $apikey . "&" . $command . "&" . $response . "&" . $signature;


$responseconents = file_get_contents($link);


print $link;

?>

Сгенерированная ссылка на URL: http://localhost:8080/client/api?apikey=Z-dr9dp6gZbKmrl9stAm6uGBSWqSonMhc2i-nqVlSG6MlpvqWFWW1uVJEZnrrwq_drQXDWRFTGwZ1p_qarLzwQ&command=listUsers&response=json&signature=H57C0kDRw4CZjEPQvFvrrPEJ%2FiM%3D

Ошибка i ' m получение:

Ошибка HTTP-запроса! HTTP / 1.1 401 Неавторизованный

Используется это руководство (из слайда 11) в качестве ссылки, но оно для python.

EDIT

после попытки предложения @CBroe

$baseurl = "http://localhost:8080/client/api?";

$response = "response=json";

$command = "command=listUsers";
$apikey = "apikey=Z-dr9dp6gZbKmrl9stAm6uGBSWqSonMhc2i-nqVlSG6MlpvqWFWW1uVJEZnrrwq_drQXDWRFTGwZ1p_qarLzwQ";
$secretkey = "p_iiuI3oDxBCxmUgceAHYf-f9uotX9B-uK2qxmVAT_bbYfPdhiePnlPRjbL6CvtPH8gDbjIh8uGPmP1KjN6HBQ";


$hash = hash_hmac("sha1",strtolower($apikey . "&" . $command . "&" . $response),$secretkey, true);
$base64encoded = base64_encode($hash);
$signature = "signature=" . urlencode($base64encoded);

$link = $baseurl  . $apikey . "&" . $command . "&" . $response . "&" . $signature;


$responsecontents = file_get_contents($link);

$responsejson = json_decode($responsecontents);

print $responsejson

Если я удаляю строку печати без вывода, при добавлении print $responsejson получаю

PHP Устранимая фатальная ошибка: объект класса stdClass не удалось преобразовать в строку

Кажется, у меня больше нет ошибки 401, но теперь я не могу видеть вывод команды.

EDIT II

После добавив

var_dump($responsecontents);

в конце, все работает как положено, теперь я могу видеть пользователей в формате JSON.

Спасибо @ CBroe

...