Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Amazon MWS签名不匹配解决方案_Java_Amazon Mws - Fatal编程技术网

Java Amazon MWS签名不匹配解决方案

Java Amazon MWS签名不匹配解决方案,java,amazon-mws,Java,Amazon Mws,我得到以下错误: <Type>Sender</Type> <Code>SignatureDoesNotMatch</Code> − <Message> The request signature we calculated does not match the signature you provided. Check your AWS Secret Access Key and signing method. Consu

我得到以下错误:

<Type>Sender</Type>
<Code>SignatureDoesNotMatch</Code>
       −
<Message>
The request signature we calculated does not match the signature you provided. Check your AWS Secret Access Key and signing method. Consult the service documentation for details.
</Message>
尝试按照上的文档进行GetAuthData调用时


下面是计算签名的步骤。

以下是我为使其正常工作所做的操作:

  • 修改中的calculateStringToSignV2()方法以包含URL的尾部

        Map<String, String> sorted = new TreeMap<String, String>();
    sorted.putAll(parameters);
    
    // Set endpoint value
    URI endpoint = new URI(serviceUrl.toLowerCase());
    
    // Create flattened (String) representation
    StringBuilder data = new StringBuilder();
    data.append("POST\n");
    data.append(endpoint.getHost());
    data.append("\n/Sellers/2011-07-01"); //YOUR URL
    data.append("\n");
    
    Iterator<Map.Entry<String, String>> pairs =
            sorted.entrySet().iterator();
    while (pairs.hasNext()) {
        Map.Entry<String, String> pair = pairs.next();
        if (pair.getValue() != null) {
            data.append( pair.getKey() + "=" + pair.getValue());
        }
        else {
            data.append( pair.getKey() + "=");
        }
    
        // Delimit parameters with ampersand (&)
        if (pairs.hasNext()) {
            data.append( "&");
        }
    }
    
    return data.toString();
    }
    
    另外,我花了5-6个小时调试这个问题,并没有通过谷歌找到任何解决方案,所以我认为最好把它放在这里,以节省其他人的时间

    String dt = DateTime.now(DateTimeZone.UTC).toString(DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm:ss'Z"));
    
    parameters.put("Timestamp", urlEncode(dt));