2016-08-30 115 views
0

SignatureDoesNotMatch “[ ”消息“] =>串(178):” 我们出的要求签名不匹配您提供亚马逊API请求返回SignatureDoesNotMatch

这里签名代码

$keywords=$this->input->post('searchbook'); 
      if($keywords){ 
$associate_tag = " xxxxx"; 
$aws_secret_access_key = "xxxxx"; 
$aws_access_key_id = "xxxxx"; 
$item_page=10; 

$base_url = 'http://ecs.amazonaws.com/onca/xml?Service=AWSECommerceService&AWSAccessKeyId='. $aws_access_key_id .'&'; 
    $url_params = array(
     'Operation'=>'ItemSearch', 
     'ItemPage'=>$item_page, 
     'AssociateTag'=>$associate_tag, 
     'Version'=>'2013-08-01', 
     'ResponseGroup'=>'Images,ItemAttributes,EditorialReview', 
     'SearchIndex'=>'Books', 
     'Keywords'=>rawurlencode($keywords) 
    ); 
    $url_parts = array(); 
    foreach(array_keys($url_params) as $key) 
     $url_parts[] = $key."=".$url_params[$key]; 
    sort($url_parts); 
    $url = $base_url . implode('&',$url_parts); 
    $host = parse_url($base_url . implode('&',$url_parts),PHP_URL_HOST); 
    $timestamp = gmstrftime('%Y-%m-%dT%H:%M:%S.000Z'); 
    $url = $url. '&Timestamp=' . $timestamp; 
    $paramstart = strpos($url,'?'); 
    $workurl = substr($url,$paramstart+1); 
    $workurl = str_replace(",",",",$workurl); 
    $workurl = str_replace(":",":",$workurl); 
    $params = explode("&",$workurl); 
    sort($params); 
    $signstr = "GET\n" . $host . "\n/onca/xml\n" . implode("&",$params); 
    $signstr = base64_encode(hash_hmac('sha256', $signstr,$aws_secret_access_key, true)); 
    $signstr = urlencode($signstr); 
    $signedurl = $url . "&Signature=" . $signstr; 
    $request = $signedurl; 
     $request; 

    //Send request to AWS 
    $session = curl_init($request); 
    curl_setopt($session, CURLOPT_HEADER, false); 
    curl_setopt($session, CURLOPT_RETURNTRANSFER, true); 
    $response = curl_exec($session); 
    curl_close($session); 
    $parsed_xml = simplexml_load_string($response); 
    var_dump($parsed_xml);exit; 
    } 

如何解决它,哪里是问题 我想从亚马逊 书的细节,当我发送请求,然后返回SignatureDoesNotMatch

回答

0

当你不使用任何AWS SDK发送HTTP请求时,你必须处理签字热曲认为你自己。只有访问密钥&安全密钥是不够的。 请参考document