Bonjour,
j'ai un petit problème de connexion au web service d'amazon afin de pouvoir faire une rechercher de livre.
J'ai une erreur, MISSING SIGNATURE, quelqu'un saurait-il comme créer une signature ou à quoi cela correspond?
Merci
Version imprimable
Bonjour,
j'ai un petit problème de connexion au web service d'amazon afin de pouvoir faire une rechercher de livre.
J'ai une erreur, MISSING SIGNATURE, quelqu'un saurait-il comme créer une signature ou à quoi cela correspond?
Merci
T'as posé la question à Google avant de venir chercher de l'aide ???
On trouve plein d'infos en moins de 2 minutes :
http://richardcummings.info/the-requ...ervices-error/
Oui j'ai demandé à Google et ça fait presque une semaine que je cherche, et rien car ton lien bah la solution ce n'est pas en utilisant SOAP
c'est quel service plus précisément ? a quelle fonction y'a l'erreur ?
Voici mon code
Je créé bien ma signature comme dit par amazon, la concaténation de la commande et de timestamp et ma clé secret.Code:
1
2
3
4
5
6
7
8
9
10 $Time = gmstrftime("%Y-%m-%dT%H:%M:%S.000Z"); $Signature = base64_encode(hash_hmac("sha256", "ItemSearch".$Time, $secret, true)); $client = new SoapClient('http://ecs.amazonaws.com/AWSECommerceService/2010-10-01/FR/AWSECommerceService.wsdl'); $params = array('AWSAccessKeyId' => 'AKIAITNKX5BOPDWLHQFQ', 'Timestamp' => $Time, 'Signature' => $Signature, 'Request' => array('SearchIndex' => 'Books', 'Keywords' => 'HARRY')); $res = $client->ItemSearch($params);
Mais j'ai toujours le message,Citation:
The HMAC-SHA256 signature calculated from the concatenation of the Action and Timestamp parameters, using your AWS Secret Access Key as the key (for information about authentication with HMAC signatures, see HMAC-SHA Signatures for REST Requests). For example, for a request to create a queue, the value of the Signature element would be the HMAC-SHA256 digest of a string like this: ItemLookup2010-10-16T00:00:00Z
Citation:
Fatal error: Uncaught SoapFault exception: [aws:Client.MissingParameter] The request must contain the parameter Signature. in /home/amazon.php:40
Stack trace:
#0 [internal function]: SoapClient->__call('ItemSearch', Array)
#1 /home/amazon.php(40): SoapClient->ItemSearch(Array)
#2 {main}
thrown in /home/amazon.php on line 40
Bonjour,
Je viens de tomber sur ton sujet car j'ai le même souci que toi :?
En revanche je pense que tu t'es planté sur un point :
Citation:
The HMAC-SHA256 signature calculated from the concatenation of the Action and Timestamp parameters,
Ceci récupère pas le timestamp ? il se récupère plutôt comme ceci :Code:$Time = gmstrftime("%Y-%m-%dT%H:%M:%S.000Z");
Si je trouve pour ton souci je te tiens au courant ;)Code:$timestamp = time();
edit : autant pour moi pour le format du timestamp mais tu avais bien raison :
Par contre tu rajoutes les centièmes de seconde ? pourquoi ?Citation:
string like this: ItemLookup2010-10-16T00:00:00Z
La creation de la signature avec timestamp comme dit par par amazon.
le timestamp d'amazon : 2010-10-16T00:00:00Z
Ton timestamp : %Y-%m-%dT%H:%M:%S.000Z
Il y a une différence.
Bonjour à tous, je viens de trouver une solution à ce problème qui marche pour moi. L'astuce c'est de placer les champsdans le header du paquet SOAP...Code:AWSAccessKeyId,Timestamp,Signature
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 <?php $Time = gmstrftime("%Y-%m-%dT%H:%M:%S.000Z"); $Signature = base64_encode(hash_hmac("sha256", "ItemSearch".$Time, 'Mon SECRETID', true)); $client = new SoapClient('http://ecs.amazonaws.com/AWSECommerceService/2010-11-01/FR/AWSECommerceService.wsdl', array('trace' => 1)); // Construction du header $header_arr = array(); $header_arr[] = new SoapHeader( 'http://security.amazonaws.com/doc/2007-01-01/', 'AWSAccessKeyId', "MA CLE AWS" ); $header_arr[] = new SoapHeader( 'http://security.amazonaws.com/doc/2007-01-01/', 'Timestamp', $Time ); $header_arr[] = new SoapHeader( 'http://security.amazonaws.com/doc/2007-01-01/', 'Signature', $Signature ); $client->__setSoapHeaders($header_arr); $params = array( 'AWSAccessKeyId' => 'MA CLE AWS', 'Request' => array( 'SearchIndex' => 'Books', 'Keywords' => 'Harry%20Potter' ) ); $res = $client->ItemSearch($params); ?>