2013-09-10 3 views
2

여러 상점 앞에서 동기화하기 위해 Delphi에서 응용 프로그램을 작성했습니다. 서명과 관련하여 문제가있는 것 같습니다. 내 시나리오는 다음과 같습니다.Amazon MWS Signature - Delphi

Amazon 용 주문 API를 실행하면 서명을 수락하고 모든 주문을 성공적으로 다운로드합니다. 나는이 문제에 관해서 어떤 문제도 가지지 않았다.

이제 Reports API로 전환하면 서명을 제외하고는 표시되지 않습니다. 여기에 내가 내가 signaures을 비교하는 MWS 스크래치와 같은 타임 스탬프이 실행도 한

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]); 

을 사용하고 서명 기능, 그리고 서로 다른 나와. 그러나 서명 할 문자열은 단어와 대문자가 정확히 동일합니다. 나는 그것이 서명 루틴일지도 모른다고 생각 하겠지만, Orders API는 루틴이 잘못 되었다면 아무런 문제없이 어떻게 작동 할까? 나는 두에서 볼 수있는 유일한 큰 차이는 주문 API에 대한 사용해야한다는 것입니다

POST /주문/2011-01-01 ParamterString

및 보고서 하나가

POST입니다 / ParamterString

솔로 슬래시로 인해 서명이 실패 할 수 있습니까? 이 문제를 해결하기 위해 내가 생각할 수있는 모든 것을 시도했으며 현재 프로젝트를 포기하고 다른 언어를 선호하고 있습니다.

어떤 도움을 크게 감상 할 수

+0

사용중인 SHA256 기능의 근원은 무엇입니까? 쓰지 않았습니까, 제 3 자 라이브러리 또는 ...? – alcalde

+0

해결 했습니까? 나도 델파이에서 MWS 요청에 대한 서명을 생성하려고 애 쓰고있다. 성공했다면, SHA/HMAC 라이브러리를 사용할 올바른 방향을 지적 해 주시겠습니까? – user1595471

답변

1

귀하의 문제는 StringToSign 기능에 가능성이 높습니다. 그것은 다음과 같이 다소 보일 것입니다 : AmazonMWShost 미국의 판매자에 대한 mws.amazonservices.com입니다

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

합니다. APIurl은 보고서 API의 경우 빈 문자열이며 Order API의 경우 Orders/2011-01-01입니다.

+0

나는 이것이 오래된 끈이라고 알고있다. 그러나 이것은 아마 다른 사람들에게 도움이 될 것이다. 아마존이 사용하는 줄 끝 문자는 Chr (13)이 아니라 Chr (13)이다. 또한 Indy를 사용하여 데이터를 POST하는 경우 호스트 헤더 항목에 추가하기 때문에 올바른 서명을 계산하기 위해 엔드 포인트의 끝에 443을 추가해야합니다 (AmazonMWShost + ': 443'). 아마존은 그 가치를 이용하여 그들의 서명을 계산할 것입니다. – user1595471