Я написал приложение в Delphi для синхронизации между несколькими витринами. Кажется, я столкнулся с проблемой, когда дело доходит до подписи. Мой сценарий таков:
Когда я запускаю Orders API для Amazon, он примет подпись и успешно загрузит все заказы. У меня не было никаких проблем, когда дело доходит до этого.
Теперь, когда я переключаюсь на 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, чтобы сравнить сигнатуры, и они получаются разными. Тем не менее, строка для подписи точно такая же, слово в слово, с заглавными буквами. Я бы подумал, что это может быть процедура подписания, но тогда как API заказов будет работать без каких-либо проблем, если процедура будет неправильной? Единственное существенное различие, которое я вижу в них, заключается в том, что для API заказов вы должны использовать
POST /Orders/2011-01-01 ParamterString
и отчет один
POST / ПараметрСтрока
Может ли сольная косая черта вызвать сбой подписи? Я перепробовал все, что мог, чтобы исправить это, и на самом деле я рассматриваю возможность отказа от проекта в пользу другого языка.
Любая помощь будет принята с благодарностью