7

我正在努力让我的第一段代码与 AWS 一起工作的最后一部分——我已经做到了这一点,我在 VS 中附加了网络参考,这有

amazon.AWSECommerceService service = new amazon.AWSECommerceService();

// prepare an ItemSearch request
amazon.ItemSearchRequest request = new amazon.ItemSearchRequest();
request.SearchIndex = "DVD";
request.Title = "scream";
request.ResponseGroup = new string[] { "Small" };

amazon.ItemSearch itemSearch = new amazon.ItemSearch();
itemSearch.AssociateTag = "";
itemSearch.Request = new ItemSearchRequest[] { request };
itemSearch.AWSAccessKeyId = ConfigurationManager.AppSettings["AwsAccessKeyId"];

itemSearch.Request = new ItemSearchRequest[] { request };
ItemSearchResponse response = service.ItemSearch(itemSearch);

// write out the results
foreach (var item in response.Items[0].Item)
{
    Response.Write(item.ItemAttributes.Title + "<br>");
}

我得到错误

The request must contain the parameter Signature.

我知道您现在必须“签署”请求,但无法弄清楚我会在哪里执行此操作或如何执行此操作?任何帮助非常感谢?

4

2 回答 2

2

您必须添加到 SOAP 请求标头,包括您的 Amazon 访问密钥 ID、时间戳以及请求操作的 SHA256 哈希和时间戳。为此,您需要在 SOAP 消息即将发送之前访问它。我在http://flyingpies.wordpress.com/2009/08/01/17/上有一个演练和一个示例项目。

于 2010-05-29T18:58:16.263 回答
1

作为记录:

出现此错误的另一个原因是其中包含空格的关键字。

例子:

'http://ecs.amazonaws.com/onca/xml?Service=AWSECommerceService&AWSAccessKeyId=xxx&AssociateTag=usernetmax-20&Version=2011-08-01&Operation=ItemSearch&ResponseGroup=Medium,Offers&SearchIndex=All&Keywords=婴儿推车&MerchantId=All&Condition=All&Availability=Available&ItemPage=1&Timestamp =2012-05-16T02:17:32Z&签名=ye5c2jo99cr3%2BPXVkMyXX8vMhTC21UO4XfHpA21%2BUCs%3D'

它应该是:

'http://ecs.amazonaws.com/onca/xml?Service=AWSECommerceService&AWSAccessKeyId=xxx&AssociateTag=usernetmax-20&Version=2011-08-01&Operation=ItemSearch&ResponseGroup=Medium,Offers&SearchIndex=All&Keywords= Baby%20Stroller &MerchantId=All&Condition=All&Availability=Available&ItemPage= 1&时间戳=2012-05-16T02:17:32Z&签名=ye5c2jo99cr3%2BPXVkMyXX8vMhTC21UO4XfHpA21%2BUCs%3D'

PHP解决方案:

$Keywords = str_replace(' ', '%20', $Keywords);

或者

$Keywords = urlencode($Keywords);
于 2012-05-16T02:22:10.390 回答