我已經在Delphi中編寫了一個應用程序,以便在多個店面之間進行同步。 當涉及到簽名時,我似乎遇到了一個問題。我的情況是這樣的:亞馬遜MWS簽名 - 德爾福
當我運行亞馬遜的訂單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便籤比較signaures運行此簽名功能,就出來不同。然而,要簽字的字符串也是一樣的,一字一字,大寫字母也一樣。我認爲這可能是簽名例程,但是如果例程錯誤,Orders API如何工作而沒有任何問題?唯一的主要區別我可以在這兩個看到的是,對於訂單API,你必須使用
POST /訂單/ 2011-01-01 ParamterString
,報告一個是
POST / ParamterString
單獨的斜槓可能導致簽名失敗?我嘗試了所有我能想到的方法來解決這個問題,實際上我正考慮放棄這個項目,轉而採用不同的語言。
任何幫助,將不勝感激
你正在使用的SHA256功能的起源是什麼?你寫了他們,第三方圖書館還是......? – alcalde
你解決了這個問題嗎?我也試圖在Delphi中爲我的MWS請求生成一個簽名。如果你成功了,你會介意指向什麼SHA/HMAC庫使用的正確方向? – user1595471