尝试在Coldfusion中设置Amazon MWS。超级简单的请求未获得授权

问题描述 投票:2回答:1

我只是想通过Coldfusion在Amazon MWS中启动并运行某些东西。这是我正在使用的代码...超级简单。当我用Amazon MWS暂存器网页中的确切查询字符串替换querystring部分时,我得到了完全相同的签名……所以我知道我的签名代码正在工作。但是尽管如此,我从亚马逊获得的唯一答复是“我们计算出的请求签名与您提供的签名不匹配。”因此,我只是认为它以某种方式发送,而不是实际签名。我尝试了很多不同的事情,花了很多时间,但是即使我可以使签名与在草稿板上运行的示例的签名完全匹配,也没有得到任何其他答复。

这是我的代码,其中显然带有相关的私有数据,作为我在实际代码中填写的变量:(请注意,我必须在服务器的时间上增加5个小时,以使Amazon对请求时间感到满意,所以您可能需要更改那)

<CFSET nowtime = DateAdd(‘h’, 5, Now())>
<CFSET awsaccesskey = “”>
<CFSET sellerid = “”>
<CFSET secretkey = “”>
<CFSET mwsaccess = “”>

<CFSET queryString = “AWSAccessKeyId=#awsaccesskey#&Action=ListAllFulfillmentOrders&MWSAuthToken=#mwsaccess#&QueryStartDateTime=2020-04-12T04%3A00%3A00Z&SellerId=#sellerid#&SignatureMethod=HmacSHA256&SignatureVersion=2&Timestamp=#dateFormat(nowtime, ‘yyyy-mm-dd’)#T#encodeForURL(timeFormat(nowtime, ‘HH:mm:ss’))#Z&Version=2010-10-01”>
<CFSET signaturestring = “POST#chr(10)#mws.amazonservices.com#chr(10)#/FulfillmentOutboundShipment/2010-10-01#chr(10)##listSort(queryString, ‘text’, ‘asc’, ‘&’)#”>
<CFSET signature = encodeForURL(toBase64(binaryDecode(hmac(signaturestring, “#secretkey#”, “HmacSHA256”, “UTF-8”), “hex”)))>
<CFHTTP method=“POST” url=“https://mws.amazonservices.com/FulfillmentOutboundShipment/2010-10-01/?#queryString#&Signature=#signature#” >
  <cfhttpparam type=“Header” name=“Content-Type” value=“application/x-www-form-urlencoded; charset=utf-8”/>
  <cfhttpparam type=“Header” name=“x-amazon-user-agent” value=“Whatever/test (Language=Coldfusion)”/>
</CFHTTP>
<CFDUMP var="#CFHTTP.FileContent#" />

这是一个非常简单的请求…但是我无法满足要求。任何帮助,将不胜感激。

coldfusion amazon-mws
1个回答
0
投票

sigh。亚马逊论坛上的一个人为我找到了解决方案。他的把柄是Autonomoose。无论如何,我在CFHTTP帖子行中有一个/。这个:

<CFHTTP method=“POST” url=“https://mws.amazonservices.com/FulfillmentOutboundShipment/2010-10-01/?#queryString#&Signature=#signature#” >

上面写着2010-10-01 /?...那个/那里。删除它,整个事情就可以了。

© www.soinside.com 2019 - 2024. All rights reserved.