delphi - 亚马逊MWS签名-Delphi

标签 delphi delphi-xe3 amazon-mws

我已经在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

开机自检
/订单/ 2011-01-01
参数字符串

报告之一是

开机自检
/
参数字符串

单斜杠会导致签名失败吗?我已经尽力解决了所有问题,实际上我正在考虑放弃该项目,转而使用另一种语言。

任何帮助将不胜感激

最佳答案

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

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


美国商家的AmazonMWShost是mws.amazonservices.com的位置。对于报告API,APIurl是空字符串,对于订购API,APIurl是Orders/2011-01-01

关于delphi - 亚马逊MWS签名-Delphi,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18730236/

相关文章:

Delphi 如何使用 RTTI 获取属性的默认值

amazon-mws - 如何获取亚马逊MWS中的整体类别,子类别?

mysql - 使用 FireDac 查询会带来一些 "asian"字符...为什么?

delphi - 从 Delphi 访问包含 VT_RECORD 的 VT_ARRAY 的 OleVariant

delphi - 如何从 Delphi 中的 TList<> 读取分组数据

delphi 中的 C++ 类型 int8_t[20]?

http - Delphi firemonkey HTTP 放正文参数

delphi - 了解代码是使用 Lazarus 还是 Delphi 编译的

php - 亚马逊 MWS 错误 SignatureDoesNotMatch

amazon-mws - MWS : Is there a limit on the number of messages in an update request?