首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Amazon MWS签名- Delphi

Amazon MWS签名- Delphi
EN

Stack Overflow用户
提问于 2013-09-11 07:15:29
回答 1查看 753关注 0票数 2

我已经用Delphi写了一个应用程序,以便在多个店面之间同步。当涉及到签名时,我似乎遇到了一个问题。我的场景是:

当我为Amazon运行Orders API时,它将接受签名并成功下载所有订单。当涉及到这个问题时,我没有任何问题。

现在,当我切换到Reports API时,它不会排除签名。下面是我正在使用的签名函数

代码语言:javascript
复制
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

单独的斜杠会不会导致签名失败?我已经尝试了我能想到的所有方法来解决这个问题,实际上我正在考虑在这一点上放弃这个项目,转而使用一种不同的语言。

任何帮助都将不胜感激

EN

回答 1

Stack Overflow用户

发布于 2013-09-13 07:57:19

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

代码语言:javascript
复制
StringToSign := 'POST'+ chr(13)+ 
                 AmazonMWShost + chr(13) + 
                 '/'+ APIurl + chr(13) + 
                 URLencodedParameters;

其中AmazonMWShost是美国商家的mws.amazonservices.com。对于报表接口,APIurl为空字符串;对于订单接口,Orders/2011-01-01为空字符串。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18730236

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档