PHP Curl 连接至 Amazon MWS 卖家 API

标签 php ssl curl amazon-mws

我正在尝试通过 PHP 的 Curl 库向亚马逊卖家 API 的 ListOrders 函数发送请求。我能够连接,但我从他们的服务中收到 AccessDenied 错误。文档说这意味着我正在尝试不使用 HTTPS 进行连接,但我要连接的 url 是 https://mws.amazonservices.com/

这是我的 curl 请求

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>

我的 curl 信息打印输出是:

        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
        (
        )

我的数据格式符合请求(签名有效等)。这个问题是我从非 SSL 保护站点发出此请求的结果(即使我连接到他们的 https 站点),还是我还缺少其他内容?

感谢您的帮助。

最佳答案

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

关于PHP Curl 连接至 Amazon MWS 卖家 API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13594939/

相关文章:

php - 如果订单甚至没有完成,如果重定向到 paypal 等第三方,我的库存会被空购物车扣除

php - 一个 php session 变量导致重定向时取消 session 设置

php - 将太少的参数传递给函数时,PHP 7 是否会引发错误?

php - 为什么 laravel 应用程序无法正常启动?

ssl - WebSphereMQ 与 HermesJMS

java - SSL 握手和服务器响应

jquery - ASP.NET MVC 中启用 SSL 的内容交付网络

curl SSL 认证错误

php - 如何在 PHP 和 Azure 中调试curl

php - 如何通过 curl 获取 facebook token 代码?