2017-10-13 1 views
0

이 코드를 실행하면 SignatureDoesNotMatch 오류가 발생합니다. 계산 된 요청 서명이 사용자가 제공 한 서명과 일치하지 않습니다. AWS Secret Access Key 및 서명 방법을 확인하십시오. 자세한 내용은 서비스 설명서를 참조하십시오.Amazon MWS 주문 서명이 일치하지 않습니다.

<?php 
    $param = array(); 
    $param['AWSAccessKeyId'] = 'AWSAccessKeyId'; 
    $param['Action'] = 'ListOrders'; 
    $param['MWSAuthToken'] = 'MWSAuthToken'; 
    $param['MarketplaceId'] = 'A21TJRUUN4KGV'; 
    $param['FulfillmentChannel.Channel.1'] = 'MFN'; 
    $param['PaymentMethod.Method.1'] = 'COD'; 
    $param['OrderStatus.Status.1'] = 'Pending'; 
    $param['OrderStatus.Status.2'] = 'PendingAvailability'; 
    $param['SellerId'] = 'AGNFZGZRZBUP1'; 
    $param['SignatureMethod'] = 'HmacSHA256'; 
    $param['SignatureVersion'] = '2'; 
    $param['CreatedAfter'] = "2017-09-01T13:41:49Z"; 
    $param['Timestamp'] = gmdate("Y-m-d\TH:i:s.\\0\\0\\0\\Z", time()); 
    $param['Version'] = '2013-09-01'; 
    $secret = 'secret key'; 

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

     $val = str_replace("%7E", "~", rawurlencode($val)); 
     $url[] = $key . "=" . $val; 
    } 

    sort($url); 

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

    $sign = 'POST' . "\n"; 
    $sign .= 'mws.amazonservices.in' . "\n"; 
    $sign .= '/Orders/2013-09-01' . "\n"; 
    $sign .= $arr; 


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

    $link = "https://mws.amazonservices.in/Orders/2013-09-01?"; 
    $link .= $arr; 
    $link .= "&Signature=" . $signature; 
    echo($link); //for debugging - you can paste this into a browser and see if it loads. 



    $ch = curl_init($link); 
    curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-type: application/xml')); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); 
    $response = curl_exec($ch); 
    $info = curl_getinfo($ch); 
    curl_close($ch); 

    echo "<pre>"; 
    print_r($response); 
    print_r($info); 
?> 

답변

0

서명 계산이 정상적으로 처리되었습니다. 그러나 "POST"를 기반으로 서명을 계산하지만 실제로는 GET을 수행하고 있습니다. 나는 그것이 상대방의 서명 계산을 포기할 것이라고 생각합니다.

+0

나는 GET & POST를 시도했지만 모두 동일한 서명 누락 오류를 던졌습니다. –

관련 문제