2014-01-13 1 views
0

나는 Amazon 광고 API를 사용하여 델파이 애플리케이션을 보유하고 있습니다. ItemSearch를 얻으려고하면 항상 HTTP 오류 400 Bad Request가 발생합니다.왜 Amazon 광고 API에서 항상 잘못된 요청 400이 표시됩니까?

요점은 어디입니까?

내 요청 :

ts := '2014-01-13T15:28:52Z'; 
sig := GetBase64_HMAC_SHA256(MYSECRETKEY, 'ItemSearch' + ts); 

아마존 SOAP의 URL 내가 사용 : 내가 그렇게 서명을 만들

<?xml version="1.0"?> 
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" 
        xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
<SOAP-ENV:Header> 
    <SOAP-ENV:Timestamp>2014-01-13T15:28:52Z</SOAP-ENV:Timestamp> 
    <SOAP-ENV:AWSAccessKeyId>MYACCESSKEYID</SOAP-ENV:AWSAccessKeyId> 
    <SOAP-ENV:Signature>rzNprsyKGKN2J4JZ8b/GvHqYPqs+kTJe0O5bjdnvHV8=</SOAP-ENV:Signature> 
</SOAP-ENV:Header> 
<SOAP-ENV:Body> 
    <ItemSearch xmlns="http://webservices.amazon.com/AWSECommerceService/2011-08-01"> 
     <AWSAccessKeyId>MYACCESSKEYID</AWSAccessKeyId> 
     <Request> 
      <Keywords>Harry</Keywords> 
      <SearchIndex>All</SearchIndex> 
     </Request> 
    </ItemSearch> 
</SOAP-ENV:Body> 
</SOAP-ENV:Envelope> 

rio.URL := 'https://webservices.amazon.de/onca/soap?Service=AWSECommerceService'; 

UPDATE :

내 델파이 코드 :

Cred := TSOAPCredentials.Create; 
rio := THTTPRIO.Create(nil); 
rio.OnAfterExecute := HTTPRIOAfterExecute; 
rio.OnBeforeExecute := HTTPRIOBeforeExecute; 
rio.SOAPHeaders.Send(cred); 

rio.URL := 'https://webservices.amazon.com/onca/soap?Service=AWSECommerceService'; 

req := ItemSearchRequest.Create; 
req.SearchIndex := 'All'; 
req.Keywords := 'Harry'; 
SetLength(ss, 1); 
ss[0] := 'Small'; 
req.ResponseGroup := ss; 
SetLength(reqs, 1); 
reqs[0] := req; 


isearch := ItemSearch.Create; 
isearch.AWSAccessKeyId := MYACCESSKEYID; 
isearch.Request := reqs; 

res := GetAWSECommerceServicePortType(false, '', rio).ItemSearch(isearch); 
+0

감사합니다 메이슨, 나는 약간의 미친 오류가 하루 후에. – mad

+0

코드를 수정하여 비누 고장을 일으킬 수 있습니까? 내가 구성 비누 UI를 사용 하여이 API를 시도하고 비누 오류로 오류가 발생했습니다 "요청 서명 매개 변수를 포함해야합니다." 그래서 나는 내 대답에 언급 된 요청을 보내려고했는데 당신의 타임 스탬프가 만료되었거나 액세스 키가 이러한 메시지와 같은 유효한 것이 아니라는 것과 같은 반응을 얻고있다. – kingAm

답변

0
<soap:Header 
    xmlns:aws="http://security.amazonaws.com/doc/2007-01-01/"> 
    <aws:AWSAccessKeyId>AKIAIOSFODNN7EXAMPLE</aws:AWSAccessKeyId> 
    <aws:Timestamp>2008-02-10T23:59:59Z</aws:Timestamp> 
    <aws:Signature>SZf1CHmQnrZbsrC13hCZS061ywsEXAMPLE</aws:Signature> 
</soap:Header> 

헤더 위 같이해야합니다. 나는 당신의 경우에 "aws"가 무엇인지 모릅니다.

delphi 코드에서 rio.URL은 문제에서 언급 한 SOAP URL과 다릅니다.

+0

감사합니다. REST 형식으로갔습니다. 비누가 너무 오래 작동하지 않았습니다. – mad

관련 문제