向亚马逊MWS服务发布请求
我已经在这个问题上浪费了几天...主要问题是 - 我不知道如何POST数据。 我想首先获取OrderReferenceDetails。 通过查看MWS Scratchpad(API部分:关闭亚马逊支付,操作:GetOferenceDetails)。
据我了解,我应该做的第一件事就是计算签名。 所以,通过使用这个Amazon开发人员指南,并使用scratchpad中的示例获取值,我创建了字符串,从中计算签名。 这个字符串看起来像这样
POST
mws.amazonservices.com
/offamazonpayments_sandbox/2013-01-01
Action=GetOrderReferenceDetails&AmazonOrderReferenceId=[_my order reference id_]&AWSAccessKeyId=[_my access key_]&SellerId=[_my seller id_]&SignatureMethod=HmacSHA256&SignatureVersion=2&Timestamp=2014-11-04T12%3a15%3a38.1988397Z&Version=2013-01-01
所以我散列这个并得到一个签名,然后我应该将它添加到查询参数行,如&Signature=[_my clalculated signature]
函数我用来计算签名:
private static String sign(String data, String secretKey)
{
String result = null;
KeyedHashAlgorithm algorithm = new HMACSHA256();
Encoding encoding = new UTF8Encoding();
algorithm.Key = encoding.GetBytes(secretKey);
result = Convert.ToBase64String(algorithm.ComputeHash(encoding.GetBytes(data.ToCharArray())));
return result;
}
问题从这里开始(我认为)。 Scratchpad提供“数据”发布,但我不明白,如何使用它(从scratchpad复制粘贴):
POST /OffAmazonPayments_Sandbox/2013-01-01?AWSAccessKeyId=
&Action=GetOrderReferenceDetails
&SellerId=
&SignatureVersion=2
&Timestamp=2014-11-04T12%3A37%3A58Z
&Version=2013-01-01
&Signature=rEqRKP27Pklu%2BAmRLR%2ByRpUtfhNsVOWuGTQ7s%2FgkB2w%3D
&SignatureMethod=HmacSHA256
&AmazonOrderReferenceId= HTTP/1.1
Host: mws.amazonservices.com
x-amazon-user-agent: AmazonJavascriptScratchpad/1.0 (Language=Javascript)
Content-Type: text/xml
这是什么? 我熟悉这样做的要求:
HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest;
request.Method = "POST";
request.ContentType = "text/xml";
request.Host = "whatever host I need to use";
request.ContentLength = Encoding.UTF8.GetByteCount(dataAsString);
byte[] byteArray = Encoding.UTF8.GetBytes(dataAsString);
using (Stream dataStream = request.GetRequestStream())
{
dataStream.Write(byteArray, 0, byteArray.Length);
}
try
{
HttpWebResponse response = request.GetResponse() as HttpWebResponse;
using (var streamReader = new StreamReader(response.GetResponseStream()))
{
string responseAsString = streamReader.ReadToEnd();
}
}
catch (WebException exception)
{
HttpWebResponse exceptionalResponse = exception.Response as HttpWebResponse;
using (var streamReader = new StreamReader(exceptionalResponse.GetResponseStream()))
{
String responseAsString = streamReader.ReadToEnd();
}
}
问题是:
我是否正确计算签名?
如何构建Web请求?
感谢您阅读并尝试帮助!
编辑:
那么,我终于得到了亚马逊MWS的回应,那不是一个错误! 我为了使它工作而采取的步骤:
构造将由手工签名的字符串 - 查询参数的顺序非常重要。
构建我将用手发布数据的url - 再次,顺序很重要,但与以前签名的字符串不同。 签名字符串中的键应该使用字典字节顺序进行排序。 那么,我不知道那是一种什么样的动物,所以这就是为什么我通过手工做了所有事情,例如拿着便签纸。
链接地址: http://www.djcxy.com/p/6645.html上一篇: Posting request to Amazon MWS services
下一篇: Amazon Email Service