2017-10-13 5 views
0

Wenn ich diesen Code ausführen, erhalte ich einen SignatureDoesNotMatch-Fehler Die Anfrage Signatur, die wir berechnet haben, stimmt nicht mit der Signatur, die Sie angegeben haben. Überprüfen Sie den geheimen AWS-Zugriffsschlüssel und die Signaturmethode. Weitere Informationen finden Sie in der Servicedokumentation.Amazon MWS Aufträge Unterschrift stimmt nicht

<?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); 
?> 

Antwort

0

Ihre Unterschrift Berechnung scheint gut. Sie berechnen jedoch eine Signatur basierend auf einem "POST", aber dann machen Sie tatsächlich ein GET. Ich schätze, das ist es, was die Signaturrechnung auf der anderen Seite abwirft.

+0

Ich versuchte beide GET & POST, aber beide werfen gleiche Unterschrift Miss Match Fehler –