2

複数のストアフロント間で同期するために、Delphi でアプリケーションを作成しました。署名に関しては、問題が発生したようです。私のシナリオはこれです:

Orders API for Amazon を実行すると、署名が受け入れられ、すべての注文が正常にダウンロードされます。これに関しては、何の問題もありませんでした。

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 Scratchpad と同じタイムスタンプでこれを実行したところ、異なる結果が得られました。それでも、署名する文字列は、単語ごとに、大文字の使用もまったく同じです。私はそれが署名ルーチンであると思いますが、ルーチンが間違っていた場合、Orders API はどのように問題なく動作するのでしょうか? 2 つの唯一の大きな違いは、Orders API を使用する必要があることです。

POST /Orders/2011-01-01 ParamterString

そしてレポート1は

POST / パラメータ文字列

ソロスラッシュが署名の失敗の原因になっている可能性はありますか? これを修正するために考えられるすべてのことを試しましたが、実際には、この時点でプロジェクトを放棄して、別の言語を使用することを検討しています.

どんな助けでも大歓迎です

4

1 に答える 1

1

あなたの問題はあなたのStringToSign機能にある可能性が最も高いです。次のようになります。

StringToSign := 'POST'+ chr(13)+ 
                 AmazonMWShost + chr(13) + 
                 '/'+ APIurl + chr(13) + 
                 URLencodedParameters;

AmazonMWShost はmws.amazonservices.com米国の販売者向けです。APIurl は、Report API およびOrders/2011-01-01Order API の空の文字列です。

于 2013-09-12T23:57:19.230 に答える