当请求网址包含“!”时,Amazon Product Advertising API会返回“SignatureDoesNotMatch”

时间:2011-12-03 12:23:34

标签: vba amazon amazon-product-api

我制作了一个使用亚马逊产品广告API的VBA程序。通常它运行良好,但当请求网址包含!(时,API会返回错误代码SignatureDoesNotMatch。但是,我的程序发送的签名和URL与http://associates-amazon.s3.amazonaws.com/signed-requests/helper/index.html生成的签名和URL完全相同(因此生成的URL也会出错)。

错误是由(, ), *, !'引起的。

@ / [ ] { } + - = . , : ; \ | _ ? " # $ % & ^ ~ `没有。 (看起来他们只是被忽略了。)

从参数中删除这些字符是一种解决方案。但如果有人知道问题的原因和/或更好的解决方案,请告诉我。

The program is here.入口点是“main.searchBookInfo”,“helper.getSignature”生成签名。

示例:

未签名的网址:     

http://ecs.amazonaws.jp/onca/xml?AWSAccessKeyId=AKIAIL7NZCKP32A32LQQ&AssociateTag=attentiveada-20&Author=&Operation=ItemSearch&Publisher=&ResponseGroup=ItemAttributes&SearchIndex=Books&Service=AWSECommerceService&Timestamp=2011-12-03T20%3A26%3A16%2B0900&Title=!&Version=2011-08-01

要签名的字符串:     

GET
ecs.amazonaws.jp
/onca/xml
AWSAccessKeyId=AKIAIL7NZCKP32A32LQQ&AssociateTag=attentiveada-20&Author=&Operation=ItemSearch&Publisher=&ResponseGroup=ItemAttributes&SearchIndex=Books&Service=AWSECommerceService&Timestamp=2011-12-03T20%3A26%3A16%2B0900&Title=!&Version=2011-08-01

签名:     

fmQKEfrtYkdWoJNHUryWIPoybM%2FqzOdFFmlgrQkBS2E%3D

1 个答案:

答案 0 :(得分:1)

我能够通过SignatureDoesNotMatch字符进行编码来重现此问题(!)。因此,我假设如果您在签名之前对!字符进行编码,那么这将起作用。虽然我没有对它们进行测试,但其他角色可能也是如此。

仅供参考,我使用!作为Title操作的ItemSearch参数,确实取得了结果。