2013-09-23 5 views
3

나는 아마존 MWS 스크래치 패드가 작동 얻기 위해 노력하고 있지만, 그것은 나에게 메시지를주고 계속 : 우리는 당신이 제공하는 서명과 일치하지 않습니다 계산아마존 MWS 스크래치 API

요청 서명. AWS Secret Access Key 및 서명 방법을 확인하십시오. 자세한 내용은 서비스 설명서를 참조하십시오.

나는 비슷한 주제를 찾고 있었지만 정말 도움이되지 않았습니다. 그래서, 여기에 코드입니다 : 내가 Amazon Scratchpad 요청 세부 사항 페이지, SHA 256 HMAC 필드와 비교있을 때

$params = array(
    'AWSAccessKeyId' => AWS_ACCESS_KEY_ID, 
    'Action'   => "GetLowestOfferListingsForASIN", 
    'SellerId'   => MERCHANT_ID, 
    'SignatureMethod' => "HmacSHA256", 
    'SignatureVersion' => "2", 
    'Timestamp'  => gmdate("Y-m-d\TH:i:s\Z", time()), 
    'Version'   => "2011-10-01", 
    'MarketplaceId' => MARKETPLACE_ID, 
    'ItemCondition' => "new", 
    'ASINList.ASIN.1' => "B001T6OP32"); 

$url = array(); 

foreach($params as $key => $val){ 
    $val = str_replace('%7E', '~', rawurlencode($val)); 
    $url[] = $key . '=' . $val;  
} 

$uri = implode('&', $url); 

$string_to_sign = 'POST'; 
$string_to_sign .= "\n"; 
$string_to_sign .= 'mws.amazonservices.co.uk' . "\n"; 
$string_to_sign .= '/Products/2011-10-01' . "\n"; 
$string_to_sign .= $uri; 

$signature = hash_hmac("sha256", $string_to_sign, AWS_SECRET_ACCESS_KEY, TRUE); 
$signature = base64_encode($signature); 
$signature = urlencode($signature); 
$signature = str_replace("%7E", "~", $signature); 

$url = 'https://mws.amazonservices.co.uk/'; 
$url .= 'Products/2011-10-01' . '?' . $uri . "&Signature=" . $signature; 

내가 print $signature로 인쇄하고있을 때 항상 % 심볼을 포함, 그 문제는 서명과 함께 내기, 그리고 - 아무 것도 없다.

내가 볼 수없는 것이 있습니까? 나는 Secret Access Key에서 공간을 확인하고 있었는데, 괜찮아 보인다.

많은 감사.

+0

서명 부분을 지나칠 때 바로 머리를 맞 춥니 다. 스크래치 패드는 XML 테스트를 시작할 때 전혀 도움이되지 않습니다. 스크래치 패드의 xml 섹션에 원하는 것을 입력 할 수 있으며, 유효하고 "200"응답을 제공합니다. –

답변

4

작업 버전 : 컬과 vualia와

$param = array(); 
$param['AWSAccessKeyId'] = AWS_ACCESS_KEY_ID; 
$param['Action']   = 'GetLowestOfferListingsForASIN'; 
$param['SellerId']   = MERCHANT_ID; 
$param['SignatureMethod'] = 'HmacSHA256'; 
$param['SignatureVersion'] = '2'; 
$param['Timestamp']  = gmdate("Y-m-d\TH:i:s.\\0\\0\\0\\Z", time()); 
$param['Version']   = '2011-10-01'; 
$param['MarketplaceId'] = MARKETPLACE_ID; 
$param['ItemCondition'] = 'new'; 
$param['ASINList.ASIN.1'] = << ITEM ASIN >>; 

$url = array(); 
foreach ($param as $key => $val) { 

    $key = str_replace("%7E", "~", rawurlencode($key)); 
    $val = str_replace("%7E", "~", rawurlencode($val)); 

    $url[] = "{$key}={$val}"; 
} 

sort($url); 

$arr = implode('&', $url); 

$sign = 'GET' . "\n"; 
$sign .= 'mws.amazonservices.co.uk' . "\n"; 
$sign .= '/Products/2011-10-01' . "\n"; 
$sign .= $arr; 

$signature = hash_hmac("sha256", $sign, AWS_SECRET_ACCESS_KEY, true); 
$signature = urlencode(base64_encode($signature)); 

$link = "https://mws.amazonservices.co.uk/Products/2011-10-01?"; 
$link .= $arr . "&Signature=" . $signature; 

로드 $link!

+1

다른 사람들을 도울 수있는 솔루션을 공유해 주셔서 감사합니다! 건배 – user177913

2

PHP에서 Amazon MWS에 액세스하려면 Amazon MWS API에 대한 클라이언트 라이브러리 (예 : Products API 참조)를 다운로드 할 수 있습니다.

src/MarketplaceWebServiceProducts/Samples 디렉토리에서 예제를 선택하고 고유 한 값을 채운 다음 실행하십시오.

이 예제는 MarketplaceWebServiceProducts_Client 클래스를 사용하여 src/MarketplaceWebServiceProducts/Client.php에있는 인증을 구현하며 요청을 성공적으로 서명하는 방법을 보여줍니다.

관련 문제