亚马逊MWS签名

我在Delphi中编写了一个应用程序,以便在多个店面之间进行同步。 谈到签名,我似乎遇到了一个问题。 我的情况是这样的:

当我运行亚马逊的订单API时,它将接受签名并成功下载所有订单。 当谈到这个时,我没有任何问题。

现在当我切换到Reports API时,它不会除了签名。 这是我正在使用的签名功能

hmac_SHA256_inits(hmc, FSecretAccessKey);
s := StringToSign;
hmac_SHA256_update(hmc, @(s[1]), Length(s));
hmac_SHA256_final(hmc, hmd);
SetLength(sBin, 32);
for i := 0 to 31
 do sBin[i+1] := AnsiChar(hmd[i]);

Result := Base64Encode(sBin);
Result := StringReplace(Result, '+', '%2B', [rfReplaceAll]);
Result := StringReplace(Result, '=', '%3D', [rfReplaceAll]);

我甚至使用与MWS Scratchpad相同的时间戳来比较这些信号,并且它们有所不同。 然而,要签字的字符串也是一样的,一字一字,大写字母也一样。 我认为这可能是签名例程,但是如果例程错误,Orders API如何工作而没有任何问题? 我可以在两者中看到唯一的主要区别是您必须使用Orders API

POST /订单/ 2011-01-01 ParamterString

报告之一

POST / ParamterString

独奏斜线会导致签名失败吗? 我尝试了所有我能想到的方法来解决这个问题,实际上我正考虑放弃这个项目,转而采用不同的语言。

任何帮助将不胜感激


你的问题很可能在你的StringToSign函数中。 它应该看起来像这样:

StringToSign := 'POST'+ chr(13)+ 
                 AmazonMWShost + chr(13) + 
                 '/'+ APIurl + chr(13) + 
                 URLencodedParameters;

AmazonMWShost是美国商家的mws.amazonservices.com 。 APIurl是Orders/2011-01-01 API的Report API和Orders/2011-01-01的空字符串。

链接地址: http://www.djcxy.com/p/39007.html

上一篇: Amazon MWS Signature

下一篇: AWS SQS SendMessage Auth Signature Version 2