我已经用Delphi写了一个应用程序,以便在多个店面之间同步。当涉及到签名时,我似乎遇到了一个问题。我的场景是:
当我为Amazon运行Orders 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 /Orders/2011-01-01 ParamterString
其中一份报告是
POST / ParamterString
单独的斜杠会不会导致签名失败?我已经尝试了我能想到的所有方法来解决这个问题,实际上我正在考虑在这一点上放弃这个项目,转而使用一种不同的语言。
任何帮助都将不胜感激
发布于 2013-09-13 07:57:19
您的问题很可能出在StringToSign函数中。它应该看起来有点像这样:
StringToSign := 'POST'+ chr(13)+
AmazonMWShost + chr(13) +
'/'+ APIurl + chr(13) +
URLencodedParameters;其中AmazonMWShost是美国商家的mws.amazonservices.com。对于报表接口,APIurl为空字符串;对于订单接口,Orders/2011-01-01为空字符串。
https://stackoverflow.com/questions/18730236
复制相似问题