亚马逊MWS订单签名不匹配

时间:2017-10-13 07:40:31

标签: php amazon-web-services curl amazon-mws

当我运行此代码时,我收到SignatureDoesNotMatch错误 我们计算的请求签名与您提供的签名不匹配。检查您的AWS Secret Access Key和签名方法。有关详细信息,请参阅服务文档。

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

1 个答案:

答案 0 :(得分:0)

您的签名计算似乎很好。但是,您正在根据“POST”计算签名,但实际上您正在进行GET。我猜这就是在另一方丢掉签名计算的原因。