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调用时
下面是计算签名的步骤。以下是我为使其正常工作所做的操作:
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));