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 заказа.

Другие вопросы по тегам