Vba 亚马逊产品广告API退货”;“签名不匹配”;当请求url包含“时”&引用;

Vba 亚马逊产品广告API退货”;“签名不匹配”;当请求url包含“时”&引用;,vba,amazon,amazon-product-api,Vba,Amazon,Amazon Product Api,我制作了一个VBA程序,使用亚马逊产品广告API。通常它工作得很好,但是当请求url包含时或(API返回错误代码SignatureDesNotMatch。但是,我的程序发送的签名和URL与生成的签名和URL完全相同(因此生成的URL也会得到错误) 该错误是由(,),*,!和“引起的 @/[]{}+-=,:;\\\\\?\$%和^ ~`不要(似乎它们只是被忽略了。) 从参数中删除这些字符是一个解决方案。但如果有人知道问题的原因和/或更好的解决方案,请告诉我 入口点是“main.searchBook

我制作了一个VBA程序,使用亚马逊产品广告API。通常它工作得很好,但是当请求url包含
API返回错误代码
SignatureDesNotMatch
。但是,我的程序发送的签名和URL与生成的签名和URL完全相同(因此生成的URL也会得到错误)

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

@/[]{}+-=,:;\\\\\?\$%和^ ~`
不要(似乎它们只是被忽略了。)

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

入口点是“main.searchBookInfo”和“helper.getSignature”生成签名

示例:

未签名的URL: 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 http://ecs.amazonaws.jp/onca/xml?AWSAccessKeyId=AKIAIL7NZCKP32A32LQQ&AssociateTag=attentiveada-20&Author=&Operation=ItemSearch&Publisher=&ResponseGroup=itemsattributes&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 得到 ecs.amazonaws.jp /onca/xml AWSAccessKeyId=AKIAIL7NZCKP32A32LQQ&AssociateTag=Attentiada-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
fmQKEfrtYkdWoJNHUryWIPoybM%2FqzOdFFmlgrQkBS2E%3D

我能够重现这个(
签名不匹配
)通过而不是
字符进行编码。因此,我假设如果在签名之前对
字符进行编码,那么这将起作用。其他字符可能也是如此,尽管我没有测试它们


仅供参考,当使用
作为
项目搜索
操作的
标题
参数时,我确实得到了结果。

请在问题正文中包含相关的代码片段,而不是场外链接。让你的问题变得独立。抱歉,谢谢你的建议。下次我会更加小心。谢谢你,乔纳森。我发现我正在使用的JavaScript组件没有编码!、(、)和*,Amazon API希望对它们进行编码。因此我将它们替换为:
函数urlEncode(str As String)As String Dim sc As Variant Set sc=CreateObject(“ScriptControl”)sc.Language=“Jscript”urlEncode=replace(replace(Replace(Replace)(sc.CodeObject.encodeURIComponent(str),“!”,“%21”),“(,“%28”),”,“%29”),“*”,“%2A”)结束函数
然后包含这些字符的请求工作了。遗憾的是,它们的结果与我从请求字符串中输入这些字符时的结果完全相同。