Amazon Product Advertising APIを使用して、サイトでの価格改定を行っています。それを知らない人にとっては、基本的には、Webページを掻き集めるなどの時間を費やす操作をすることなく、Amazonデータベースを相互参照することができます。それは私たちのために非常にうまくいく、または持っています。彼らは現在、このAPIを販売者向けに解散し、MWSサービスで新しいAPIに移行しています。Delphi 2007でAmazonへのHTTPS POSTコールを行う
私の見る限りでは、呼び出しは微妙に異なります。 2つの明らかな違いは、PAF APIがHTTPとGETを使用し、MWSがHTTPSとPOSTを使用している点です。
ハッシュで署名されたURLリクエストを作成する例があるため、Amazonのマニュアルの例が正しいことは完全にはわかりません。これは、GETメソッドが使用されていたPA-APIで正常に実行された方法です。しかしPOSTのためにそれを行うことはできますか?私はそれが可能だとは思わない、私は間違っているかもしれませんが、それは確かに例が意味するものです。
とにかく、署名付きURLを作成しても機能しません。だから私はDelphiで何らかの低レベルのHTTPS POSTを使用する行を調べることにしました。
私はここで検索しましたが、いくつかの異なる例がありますが、正しく動作するようにはできません。いくつかの例ではINDY 10を使用しているようですが、残念ながらINDY 9では互換性の理由でスタックされています.WININETラッパータイプの関数も見てきましたが、例外やエラー以外の結果を返すことはできません。
私はここにいくつかの助けを求めているのです。
デルファイを使用してAmazon MWSに正しくフォーマットされた呼び出しを行うにはどうすればよいですか?
How to make an HTTPS POST request in Delphi?
などなど、私が見つけることができるすべてのもの:私のようなページからの例を試してみました!
しかし、私は「悪い要求」(例外)のようなエラーを返す。
私は(他の場所で示唆したように)何が起こっているかを見るためにバイオリンを使用して試してみましたが、かなりまだそれのまわりで私の頭を取得することはできません(私が働くことで、コールを構成することができますが!)
をだから私はこれに関するいくつかの指針や方向性を探しています。私は本当にINDYをアップグレードしたり、新しいライブラリを追加したりしたくありません。私はただのものをそのまま保ち、私が利用できるものを使うことを好むでしょう。私たちはD2007を使用しています。
必要とされるもののアイデアを与えるために、私はコールのこの種(GetServiceStatus
が最も簡単なもの)を作成する必要があります。このエンドポイントへの
POST /Products/2011-10-01?AWSAccessKeyId=<ACCESSKEY>
&Action=GetServiceStatus
&SellerId=<SELLERID>
&SignatureVersion=2
&Timestamp=2012-02-14T13%3A26%3A42Z
&Version=2011-10-01
&Signature=dtAvv595blmv%2FnV0h2Yr5bCGzKYXid0hkOuCmZOb3bc%3D
&SignatureMethod=HmacSHA256
を:
https://mws.amazonservices.co.uk/Products/2011-10-01
I私の問題は私が試したすべての例にあると思う私はコールを正しく設定する方法を知らないので、おそらくバッドリクエストエラーが出るのです。
だから、すてきな簡単な解決策が最も高く評価されます。
ドキュメントのリンクと観測:
これは、APIの開発者向けのガイドです:
これは置き換え我々が使用するAPIの特定の部分(あります現在の商品広告API):
ここで最も基本的な機能は、GetServiceStatus関数です。パラメータは必要ありません。しかし、アマゾンからの資格情報(売り手ID、MWSアクセスキー、秘密鍵(署名を生成するため))を使って認証され、署名されている必要があります。休憩が続きますが、認証の問題は解決策を見つけることが非常に困難になることです。テストアカウントはありません。また、タイムスタンプ(したがって呼び出しの署名)も期限切れになり、数分です。
「移行ガイド」:。。
しかし、この文書は、例えば、エンドポイントが間違っているいくつかのエラーが含まれてい
私の最新のコードINC SSL、クッキーマネージャなど:
var
LHTTP : TIdHTTP;
IdSSLIOHandlerSocket : TIdSSLIOHandlerSocket;
IdCookieManager : TIdCookieManager;
LParams : TStringList;
LResponse : string;
begin
IdCookieManager:=TIdCookieManager.Create(self);
IdSSLIOHandlerSocket:=TIdSSLIOHandlerSocket.Create(self);
with IdSSLIOHandlerSocket do begin
SSLOptions.Method := sslvSSLv3;
end;
LHTTP := TIdHTTP.Create(Self);
with LHTTP do begin
CookieManager:=IdCookieManager;
AllowCookies:=true;
IOHandler:=IdSSLIOHandlerSocket;
Request.ContentType:='text/xml';
Port:=443;
HandleRedirects:=true;
Host:='mws.amazonservices.co.uk';
ProtocolVersion:=pv1_1
end;
LParams := TStringList.Create;
try
LParams.Add('AWSAccessKeyId=<ACCESSKEY>');
LParams.Add('Action=GetServiceStatus');
LParams.Add('SellerId=<SELLERID>)');
LParams.Add('SignatureVersion=2');
LParams.Add('Timestamp=2012-02-15T13%3A00%3A07Z');
LParams.Add('Version=2011-10-01');
LParams.Add('Signature=viPlDAbzEBwlTAwq4hNaZi%2Fa1Klf7qIXIP%2BKUsOcJTI%3D');
LParams.Add('SignatureMethod=HmacSHA256');
LResponse:=LHTTP.Post('https://mws.amazonservices.co.uk/Products/2011-10-01?', LParams);
ShowMessage(LResponse);
except
on E: Exception do
ShowMessage('ouch! ' + E.Message);
end;
LHTTP.Free;
IdSSLIOHandlerSocket.Free;
IdCookieManager.Free;
end;
これはAmazonがそのスクラッチパッドごとに受け取ることを期待しているものに基づいています。最後に、ユーザエージェントはオプションで、必要なものではなく、署名プロセスの一部ではありません。私はフィドラーから情報を取得しようとしてい
POST /Products/2011-10-01?AWSAccessKeyId=<ACCESSID>
&Action=GetServiceStatus
&SellerId=<SELLERID>
&SignatureVersion=2
&Timestamp=2012-02-15T13%3A00%3A07Z
&Version=2011-10-01
&Signature=viPlDAbzEBwlTAwq4hNaZi%2Fa1Klf7qIXIP%2BKUsOcJTI%3D
&SignatureMethod=HmacSHA256 HTTP/1.1
Host: mws.amazonservices.co.uk
x-amazon-user-agent: AmazonJavascriptScratchpad/1.0 (Language=Javascript)
Content-Type: text/xml
が、それはソフトウェアからのすべてのトラフィックを示していないが、それは必要があります「400の悪い要求」エラーを得るためにAmazonと通信している。奇妙な
に動作します実装する。 Delphiの開発者とAmazonの売り手の両方を待っている他の方法があるため、できるだけ簡単に誰かが手伝ってください。あなたが十分な仕事をするならば、私はアマゾンの売り手でなくてもこれを試すことができます:例えば、売り手でなくてもできる質問がありますか? Amazonは私たちが使用できるテストアカウントを提供していますか? –
こんにちはCosmin。コメントありがとう。もちろん、あなたは100%正しいです。私の脳はこれを整理しようとしているパテのようになっていて、ドキュメンテーションのリンクが役立つようになりました。私は仕事場でリンクしています。私は再び投稿することができます(私は初心者の投稿に制限があるようです)私はリンクを投稿します。残念ながら彼らはテストアカウントではありません。そして、署名プロセスは、売り手ID、mwsアクセスID&秘密鍵を使用してコールに署名することで非常に安全です。だから私は、これがこれをはるかに難しくしていく過程全体を理解することに感謝します。タイムスタンプに追加すると、まだ難しくなります。しかし、私は明日のdocリンクを投稿します。 – Trevor
あなたは「投稿する」とは思われません。あなたは現在の質問を編集し、関連する詳細を追加することになっています。あなたの質問のタグリストの下に 'edit'リンクがあります。それがこのサイトの仕組みです:議論の場ではなく、Q&Aサイトです。 –