使用php5.2 API检索Amazon MWS响应

使用php5.2 API检索Amazon MWS响应,php,amazon-web-services,php-5.2,amazon-mws,Php,Amazon Web Services,Php 5.2,Amazon Mws,我很难从Amazon获得一个简单的xml答案,它总是报告我: Sender InvalidParameterValue Either Action or Operation query parameter must be present. 如果我请求他们的支持,他们也帮不了我他们看不到缺少的参数。。。 他们的建议是遵循他们的示例,但我的Webhost只支持PHP5.2,因此自动加载程序无法工作 <?php #header("Content-Type:text/xml");

我很难从Amazon获得一个简单的xml答案,它总是报告我:

Sender
    InvalidParameterValue
    Either Action or Operation query parameter must be present.
如果我请求他们的支持,他们也帮不了我他们看不到缺少的参数。。。 他们的建议是遵循他们的示例,但我的Webhost只支持PHP5.2,因此自动加载程序无法工作

<?php
#header("Content-Type:text/xml");
$sellerID = 'SELLEDERID';
$aws = 'AWSKEY';
$secret = 'SECRET';


$action = 'GetReportList';

$timestamp = gmdate("Y-m-d\TH:i:s\Z");
$signature = $action . $timestamp;
$sig = base64_encode(hash_hmac("sha256", $signature, $secret, true));
$service = 'https://mws.amazonservices.com/?';

$url  = 'AWSAccessKeyId='.$aws;
$url .= '&Action='.$action;
$url .= '&Merchant='.$sellerid;
$url .= '&SignatureVersion=2';
$url .= '&Timestamp=2013-01-10T12:22:48Z';
$url .= '&Version=2009-01-01';
$url .= '&Signature='.$sig;
$url .= '&SignatureMethod=HmacSHA256';
$awsURL = $service.urlencode($url);

$curl = curl_init();
curl_setopt_array($curl, array(
    CURLOPT_RETURNTRANSFER => 1,
    CURLOPT_URL => $awsURL,
    CURLOPT_USERAGENT => 'Request'
));
$resp = curl_exec($curl);
curl_close($curl);
echo "<pre>";
var_dump($resp);
var_dump($awsURL);
echo "</pre>";
?> 

我们在您的请求中没有看到任何错误”可能指的是您在Scratchpad中输入的请求,而不是您通过php发出的请求,因为您的签名计算太离谱了

关于如何计算sig,请参阅或(第12页,“如果您创建自己的客户端库”)


实际的错误消息似乎很奇怪。我希望一旦你签名正确,它就会改变。还请注意,相当多的MWS API调用需要HTTP POST,因此,如果您打算在其他地方重用该代码,您最好相应地更改代码。

您能否展开“他们看不到缺少的参数”?他们确认你的url包含正确的参数了吗?或者只是将您送回他们的示例?您的web主机需要升级——PHP5.2已经不受支持两年了;它已知的安全缺陷尚未修复,也不会修复。没有一个服务器管理员会允许它仍然在他的服务器上运行。如果您的web主机愿意在其服务器上运行过时且已知不安全的软件,那么他们显然不关心其用户;你使用了错误的web主机。@Chris,他们只说“我们看不到你的请求有错误”,但我用Amazon Scratchpad()@SDC创建了查询,我知道这一点,但web空间上的软件是用ZEND加密的,需要PHP 5.2。顺便说一下,你说自动加载器不工作,因为你使用的是5.2。。。但是PHP5.2支持自动加载器。