2012-01-22 2 views
0

У меня есть эта функция в PHP в Windows с easyPHP, чтобы подписать запрос на API рекламы продукта Amazon, но он не работает, потому что результат не генерирует правильную подпись, и я не нахожу Не знаю почему. Когда я делаю запрос с генерировать URL, Amazon говорит, что SignatureDoesNotMatchПолучите подписанный URL-адрес для рекламного API продукта Amazon

function amazon_get_signed_url($searchTerm) { 
    $keyword = $searchTerm; // The keywords you're searching for 
    $aws = array(); 
    $keyword = urlencode($keyword); 
    $url = "http://webservices.amazon.com/onca/xml?Service=AWSECommerceService"; 
    $url .= "&AWSAccessKeyId=".AWS_ACCESS_KEY_ID; 
    $url .= "&Operation=ItemSearch"; 
    $url .= "&SearchIndex=DVD"; 
    $url .= "&Keywords=".$keyword.""; 
    $url .= "&ResponseGroup=Small,OfferFull,Images,Reviews,ItemAttributes,SalesRank"; 
    $url .= "&Timestamp=".gmdate('Y-m-d\TH:i:s\Z'); 
    $url = str_replace("+",urlencode("+"),$url); 
    $url_a = parse_url($url); 
    $url_a['query'] = str_replace(',',urlencode(','),$url_a['query']); 
    $url_a['query'] = str_replace(';',urlencode(':'),$url_a['query']); 
    parse_str($url_a['query'],$params); 
    uksort($params, 'strnatcmp'); 
    $qstr = ''; 
    foreach ($params as $key => $val) { 
    $qstr .= "=".rawurlencode($val); 
    } 
    $qstr = substr($qstr, 1); 
    $qstr = str_replace('%20',urlencode('+'),$qstr); 
    $qstr = str_replace(',',urlencode(','),$qstr); 
    $qstr = str_replace(';',urlencode(':'),$qstr); 
    $sig = "GET\nwebservices.amazon.com\n/onca/xml\n".$qstr; 
    $sig = base64_encode(hash_hmac('sha256', $sig, AWS_SECRET_ACCESS_KEY, true)); 
    $sig = str_replace('+','%2B',$sig); 
    $sig = str_replace('=','%3D',$sig); 
    $params['Signature'] = $sig; 
    $p = array(); 
    foreach($params as $k=>$v) { 
    $p[]=$k."=".$v; 
    } 
    $qstr = implode("&",$p); 
    $rebuilt_url = $url_a['scheme']."://".$url_a['host'].$url_a['path']."?".$qstr; 
    $aws['url'] = $url."&Signature=".$sig; 
    return $aws['url']; 
} 

ответ

0

я получил эту работу, хотя я должен был изменить его. Google Sameer Borate и Ulrich Mierendorff Я использую их код.

Мой код найден here

Но, кажется, что-то не так с моим хостинга прямо сейчас. :-(

+0

Прошу вас, любезно позвольте мне указать ваш адрес электронной почты? Мой может быть найден на моей странице пользователя. – Trix

+0

Мой адрес электронной почты находится в моем профиле пользователя, я легко найти в Google, есть ссылка на мой сайт выше. – Muskie