Amazon MWS Подпись - Delphi
Я написал приложение в Delphi для синхронизации между несколькими витринами. Я, кажется, столкнулся с проблемой, когда дело доходит до подписи. Мой сценарий таков:
Когда я запускаю 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 Scratchpad, чтобы сравнить подписи, и они получаются разными. Тем не менее, строка для подписи точно такая же, слово в слово, а также заглавные буквы. Я мог бы подумать, что это может быть процедура подписания, но тогда как API заказов будет работать без проблем, если процедура будет неправильной? Единственное существенное отличие, которое я вижу в этих двух, состоит в том, что для API-интерфейсов заказов вы должны использовать
POST / Заказы /2011-01-01 ParamterString
и отчет один
POST / ParamterString
Может ли одиночная косая черта стать причиной провала подписи? Я перепробовал все, что мог придумать, чтобы исправить это, и на самом деле я собираюсь отказаться от проекта на данный момент в пользу другого языка.
Любая помощь будет принята с благодарностью
1 ответ
Ваша проблема, скорее всего, в вашем StringToSign
функция. Это должно выглядеть примерно так:
StringToSign := 'POST'+ chr(13)+
AmazonMWShost + chr(13) +
'/'+ APIurl + chr(13) +
URLencodedParameters;
Где AmazonMWShost mws.amazonservices.com
для американских торговцев. APIurl - это пустая строка для API отчета и Orders/2011-01-01
для API заказа.