Try converting the '@' to %40 Erik
Den mandag 30. mars 2015 skrev Blake Ferkingstad <bferkings...@acentek.net> følgende: > Hi Erik, > > I tried adding html_entity_decode(), just in case and I am still getting > the same error. > > When I sort my values this is what I get. > accounttype=0 > > &apikey=douqimqhlbwe9-lmlahndfpo8h7nsmrs1iot9b1fo9hctilunfzsoj0iuz-giqa55puhopate2xsmnugk0ebrg > &command=createaccount > &domainid=6f0189f4-2753-426a-afe6-aa7ce0bab82e > &email=devt...@test.com <javascript:;> > &firstname=devtest > &lastname=devtest > &password=testpassword > &username=devtest > > http://localhost:8080/client/api?command=createAccount > &username=DEVtest > &email=devt...@test.com <javascript:;> > &firstname=DEVtest > &lastname=DEVtest > &password=testpassword > &domainid=6f0189f4-2753-426a-afe6-aa7ce0bab82e > &accounttype=0 > > &apiKey=DOuQimQHLbwe9-LmLahndFPO8H7NsMrs1iOt9B1fo9hctILUnFZsoJ0IuZ-GiQA55PUHOpatE2XsMNuGK0eBRg > &signature=3UAD6iGfRS7ZSBExrov9LnfaNKA%3D > > The thing that seems strange to me is that it works with other commands. > What I have noticed is that it seems to work with commands that don't have > an attribute that is alphabetically greater than apiKey, like accounttype. > > > -----Original Message----- > From: Erik Weber [mailto:terbol...@gmail.com <javascript:;>] > Sent: Monday, March 30, 2015 11:09 AM > To: users@cloudstack.apache.org <javascript:;> > Subject: Re: API Signing Issue > > No html entities or similar in $cmd that could be exploded and mistaken as > a parameter? > > Erik > > Den mandag 30. mars 2015 skrev Blake Ferkingstad <bferkings...@acentek.net > <javascript:;>> > følgende: > > > 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 > > > > >