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

Reply via email to