lundi 1 juin 2015

Amazon product api call Response: SignatureDoesNotMatch in PHP

I am making a call like this to do some search in Amazon and the response I get back says

 SignatureDoesNotMatchThe request signature we calculated does not match
 thesignature you provided. Check your AWS Secret Access Key and signing method. 
 Consult the service documentation for details

Not sure why the signature is not matching..

    $base_url = "http://ift.tt/1f5d9Nk?";
     $url_params = array('Operation'=>"ItemSearch",'Service'=>"AWSECommerceService",
        'AWSAccessKeyId'=>$AWS_ACCESS_KEY_ID,'AssociateTag'=>"dtsearch-20",
     'Version'=>"2013-08-01",'Availability'=>"Available",'Condition'=>"All",
             'ItemPage'=>"1",'ResponseGroup'=>"Images,ItemAttributes,EditorialReview",
       'Keywords'=>"Laptop");

  // Add the Timestamp
    $url_params['Timestamp'] = gmdate("Y-m-d\TH:i:s.\\0\\0\\0\\Z", time());

   // Sort the URL parameters
  $url_parts = array();
   foreach(array_keys($url_params) as $key)
     $url_parts[] = $key."=".$url_params[$key];
      sort($url_parts);

   // Construct the string to sign
     $string_to_sign = "GET\ecs.amazonaws.com\n/onca/xml\n".implode("&",$url_parts);
   $string_to_sign = str_replace('+','%20',$string_to_sign);
   $string_to_sign = str_replace(':','%3A',$string_to_sign);
  $string_to_sign = str_replace(';',urlencode(';'),$string_to_sign);

     // Sign the request
 $signature = hash_hmac("sha256",$string_to_sign,$AWS_SECRET_ACCESS_KEY,TRUE);

  // Base64 encode the signature and make it URL safe
   $signature = base64_encode($signature);
   $signature = str_replace('+','%2B',$signature);
   $signature = str_replace('=','%3D',$signature);

      $url_string = implode("&",$url_parts);
      $url = $base_url.$url_string."&Signature=".$signature;
      print $url;

      $ch = curl_init();
     curl_setopt($ch, CURLOPT_URL,$url);
      curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
      curl_setopt($ch, CURLOPT_TIMEOUT, 15);
       curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
      $xml_response = curl_exec($ch);
         curl_close($ch);

     echo $xml_response;
    ?>

I have looked at other posts related to this but not sure how to write a function in the same page... I cannot add more php files... so I need to have all the code in this one page.




Aucun commentaire:

Enregistrer un commentaire