2012-02-21 4 views
1

아마존 웹 서비스를 사용하여 제품 가격을 받고 있습니다.Amazon 제품 검색 API : 작동하지 않습니다.

괜찮 았지만 Amazon이 associateTag가 필수 매개 변수가되는 API를 변경 한 후에 오류가 발생하기 시작했습니다.

tempQueryString =[NSString stringWithFormat:@"GET\necs.amazonaws.com\n/onca/xml\nAWSAccessKeyId=AKIAJ3A3LA5NYXWPSTGQ&IdType=ASIN&ItemId=B003VKR0J0&MerchantId=Amazon&AssociateTag=babyformu-20&Operation=ItemLookup&ResponseGroup=Large&Service=AWSECommerceService&SignatureVersion=2&SignatureMethod=HmacSHA256&Timestamp=%@T%@%@%@Z&Version=2010-01-01",str2,hour,mint,s]; 

지금은주고이 오류 : 그래서 나는 같은 요청에 관련된 태그를 넣어
"The request signature we calculated does not match the signature you provided. Check your AWS Secret Access Key and signing method. Consult the service documentation for details."

나는 서명 방법을 변경하지 않았다. 는 여기있다 :

NSString *key = @"9at/FN4mouFxnIV2SsoQTR4iO6x6AWVt2xFvEwmv"; // private key 
    NSLog(@"current: %@ ",queryString); 
    NSString *data = queryString; 
    const char *cKey = [key cStringUsingEncoding:NSASCIIStringEncoding]; 
    const char *cData = [data cStringUsingEncoding:NSASCIIStringEncoding]; 
    unsigned char cHMAC[CC_SHA256_DIGEST_LENGTH]; 
    CCHmac(kCCHmacAlgSHA256, cKey, strlen(cKey), cData, strlen(cData), cHMAC); 
    NSData *HMAC = [[NSData alloc] initWithBytes:cHMAC 
              length:sizeof(cHMAC)]; 
    hash = [HMAC base64Encoding]; 
    NSLog(@"hash value11 == %@",hash); 
    encodedString = (NSString *) CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault, (CFStringRef)hash, NULL, CFSTR(":/?#[]@!$&’()*+,;="), kCFStringEncodingUTF8); 

가 나는 제품 세부 정보를 얻기 위해이 API를 사용하고 있습니다 : 사전에

query=[NSString stringWithFormat:@"http://ecs.amazonaws.com/onca/xml?AWSAccessKeyId=AKIAJ3A3LA5NYXWPSTGQ&IdType=ASIN&ItemId=B003VKR0J0&AssociateTag=babyformu-20&MerchantId=Amazon&Operation=ItemLookup&ResponseGroup=Large&Service=AWSECommerceService&Timestamp=%@T%@:%@:%@Z&Version=2009-03-31&Signature=%@",str2,h,m,s,encodedString];

감사합니다.

+0

오늘도 같은 문제가 발생합니다. 이제 associateTag가 필요합니다. 나는 결과를 다시 가져 오지 않을 것입니다 ... 매우 실망합니다. – Standage

답변

0

아마존 코드를 비교적 쉽게 고칠 수있었습니다. PHP를 사용하고 있습니다. 내가 전화를 다음

$parameters["AssociateTag"] = myInfo::MY_AMAZON_ASSOCIATE_ID; 

:

aws_signed_request("com", $parameters, $this->public_key, $this->private_key) 

AWS 서명 요청은 울리히 Mierendorff에 의해 만들어지고 사미르 붕산염에 의해 수정 된 난 그냥 다른 매개 변수를 추가했다.

+1

associateTag 매개 변수를 추가했지만 지금은 제공하고 있습니다. 이 오류 : "계산 된 요청 서명이 사용자가 제공 한 서명과 일치하지 않습니다. AWS Secret Access Key 및 서명 방법을 확인하십시오. 자세한 내용은 서비스 설명서를 참조하십시오." – Rachit

+0

공식 AWS 지원 포럼을 사용해보십시오. 다른 도메인을 사용하여 개발자 키를 등록하셨습니까? 세부 사항은 기억이 나지 않지만 공개 키와 개인 키는 도메인에 연결되어 있습니다. 적어도 일부 API는 작동하는 방식입니다. – Muskie