Vba 亚马逊产品广告API退货”;“签名不匹配”;当请求url包含“时”&引用;
我制作了一个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
时
或(
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”)结束函数
然后包含这些字符的请求工作了。遗憾的是,它们的结果与我从请求字符串中输入这些字符时的结果完全相同。