Hello everyone,
I have a question on my API Signing code. The code below I have tested on
commands like createDomain, listTemplates, and listServices. Those all run like
expected, but I am running into trouble with createAccount.
function cloudstack_sign_sort($cmd)
{
$commands = explode('&', $cmd);
sort($commands);
$sort = implode('&', $commands);
return $sort;
}
function cloudstack_formatCmd($api, $cmd) {
$str = 'apiKey=' . $api . '&' . $cmd;
$str = strtolower(cloudstack_sign_sort($str));
return $str;
}
function cloudstack_encrypt($cmd, $secret) {
$hash = hash_hmac('sha1', $cmd, $secret, true);
$hash = base64_encode($hash);
return urlencode($hash);
}
function cloudstack_formattedUrl($baseUrl, $api, $cmd, $signature) {
$url = $baseUrl . '?' . $cmd . '&apiKey=' . $api . '&signature=' . $signature;
return $url;
}
function cloudstack_sign($command, $api, $secret, $baseUrl) {
$clean_command = substr($command, strpos($command, '?'));
$newCmd = cloudstack_formatCmd($api, $clean_command);
$signature = cloudstack_encrypt($newCmd, $secret);
$url = cloudstack_formattedUrl($baseUrl, $api, $clean_command, $signature);
return $url;
}
When I run the command it returns for createAccount I get 'Error: 401unable to
verify user credentials and/or request signature'.
Is there something wrong with my code?
Thanks,
Blake Ferkingstad