首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >亚马逊MWS产品SignatureDoesNotMatch

亚马逊MWS产品SignatureDoesNotMatch
EN

Stack Overflow用户
提问于 2014-07-24 20:00:47
回答 5查看 1.9K关注 0票数 0

当我运行这段代码时,我会得到一个SignatureDoesNotMatch错误。我没发现问题所在。我甚至注释了sort(),以保持数组的自然顺序。任何帮助都将不胜感激。

代码语言:javascript
复制
    $params = array(
    'AWSAccessKeyId' => "*********",
    'Action' => "GetCompetitivePricingForASIN",
    'SellerId' => "********",
    'SignatureVersion' => "2",
    'Timestamp' => gmdate("Y-m-d\TH:i:s.\\0\\0\\0\\Z", time()),
    'Version' => "2011-10-01",
    'SignatureMethod' => "HmacSHA256",
    'MarketplaceId' => "ATVPDKIKX0DER",
    'AsinList.ASIN.1' => $asin


    );

    $url_parts = array();
    foreach (array_keys($params) as $key)
    $url_parts[] = $key . "=" . str_replace('%7E', '~', rawurlencode($params[$key]));
    //sort($url_parts);
    $url_string     = implode("&", $url_parts);
    $string_to_sign = "GET\nmws.amazonservices.com\n/Products/2011-10-01\n" .     $url_string;
    $signature = hash_hmac("sha256", $string_to_sign, AWS_SECRET_ACCESS_KEY, TRUE);
    $signature = urlencode(base64_encode($signature));
    $url = "https://mws.amazonservices.com/Orders/2011-10-01" . '?' . $url_string .  "&Signature=" . $signature;
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
    $response = curl_exec($ch);
    $xml      = simplexml_load_string($response);

    echo $xml->asXML();
EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2014-07-25 17:38:00

我花了两天时间才意识到

代码语言:javascript
复制
 $string_to_sign = "GET\nmws.amazonservices.com\n/Products/2011-10-01\n"

代码语言:javascript
复制
 $url = "https://mws.amazonservices.com/Orders/2011-10-01" . '?' . $url_string

只是不合作。产品和订单不是一回事。谢谢大家的帮助。菜鸟弄错了。

票数 1
EN

Stack Overflow用户

发布于 2014-07-25 05:15:41

签名错配是一个很常见的错误,也很难找出准确的错误!我个人的建议是将请求与Amazon的便签请求进行比较。这对我的案子总是有帮助的。而仿真器必须是字母顺序才能匹配签名。在这里尝试您的API请求:https://mws.amazonservices.in/scratchpad/index.html并单击request选项卡查看完整的请求url、签名、md5哈希等。

票数 4
EN

Stack Overflow用户

发布于 2017-05-16 15:15:57

这花费了我几个小时的时间,我希望这可以帮助任何人遇到简单但不太明显的SignatureDoesNotMatch错误原因。

当调用所需的方法为POST时,请确保在生成的签名字符串和curl选项中指定该方法:

代码语言:javascript
复制
curl_setopt($ch, CURLOPT_POST, 1);
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24942912

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档