2012-11-27 49 views
2

我想通过PHP的Curl库发送请求到亚马逊卖家API的ListOrders函数。我能够连接,但我从他们的服务得到一个AccessDenied错误。该文件说,这意味着我想没有HTTPS连接,但我连接到网址为https://mws.amazonservices.com/PHP Curl连接到亚马逊MWS卖家API

这里是我的卷曲请求

private function send_request() 
{ 
     $string = ''; 
     $count = 0; 
     foreach ($this->options as $k => $v) 
      { 
      $string .= rawurlencode($k) . "=" . rawurlencode($v); 
      $string .= ($count == count($this->options) -1)? '': "&"; 
      $count++; 
      } 
     $options = array(
       CURLOPT_CAINFO=> <<Cert location>>, 
       CURLOPT_RETURNTRANSFER=>true, 
       CURLOPT_POST=>true, 
       CURLOPT_PORT=>443, 
       CURLOPT_POSTFIELDS=> $string, 
       CURLOPT_SSL_VERIFYHOST=>2, 
       CURLOPT_SSL_VERIFYPEER=> TRUE, 
       CURLOPT_FOLLOWLOCATION => 1, 
       CURLOPT_VERBOSE => 1, 
       CURLOPT_HEADER=>true, 
       CURLOPT_PROTOCOLS=> CURLPROTO_HTTPS, 
       CURLINFO_HEADER_OUT=>true 
     ); 
     $session = curl_init($this->url); 
     curl_setopt_array($session, $options); 
     $results = curl_exec($session); 
     $errors = curl_error($session); 
     $info = curl_getinfo($session); 
     curl_close($session); 
     echo htmlentities($results);//var_dump($errors); 
     echo "<br /><br />"; 
     print_r($info); 
     return $results; 
} 

我得到的错误是:

<?xml version="1.0"?> <ErrorResponse xmlns="https://mws.amazonservices.com/Orders/2011-01-01"> 
<Error> 
    <Type>Sender</Type> 
    <Code>AccessDenied</Code> 
    <Message>Access to Orders.ListOrders is denied</Message> 
</Error> 
<RequestID>4e60baef-b2a4-44aa-a18f-dd6fe8b07cf5</RequestID> </ErrorResponse> 

和我卷曲的信息输出的方法是:

 Array 
(
    [url] => https://mws.amazonservices.com/Orders/2012-11-27 
    [content_type] => text/xml 
    [http_code] => 401 
    [header_size] => 362 
    [request_size] => 494 
    [filetime] => -1 
    [ssl_verify_result] => 0 
    [redirect_count] => 0 
    [total_time] => 1.42 
    [namelookup_time] => 0.016 
    [connect_time] => 0.078 
    [pretransfer_time] => 1.342 
    [size_upload] => 345 
    [size_download] => 310 
    [speed_download] => 218 
    [speed_upload] => 242 
    [download_content_length] => 310 
    [upload_content_length] => 345 
    [starttransfer_time] => 1.42 
    [redirect_time] => 0 
    [certinfo] => Array 
     (
     ) 

我的数据是FO正确匹配请求(签名有效等)。这个问题是我从一个非SSL保护站点发出这个请求的结果(即使我连接到了他们的https站点),还是有其他的东西丢失了?

感谢您的帮助。

+0

你用于连接的端口是什么? * CURLOPT_PORT *应该是433 – Eray

+0

当我切换到端口433时,我得到一个curl_error f =无法连接到主机。我从他们的PHP库curl提交中拿走了端口443的东西。 – Mike

+0

对不起,应该是443而不是433。 443有效? – Eray

回答

2

由于元素标记中的错误,访问被拒绝。亚马逊文档声明您可以使用Merchant或SellerId,我使用的是Merchant,并且需要SellerId。上面的脚本正确地将请求发送给Amazon。