2012-02-21 131 views
1

我正在使用亞馬遜網絡服務獲取產品價格。亞馬遜產品搜索API:不工作

它工作正常,但是在亞馬遜在其中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 2012-02-21 21:17:03

回答

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祕密訪問密鑰和簽名方法。有關詳細信息,請參閱服務文檔。 – Rachit 2012-04-03 09:51:36

+0

聽起來像你應該嘗試官方的AWS支持論壇。您是否使用不同的域名註冊開發人員密鑰?我不記得具體細節,但你的公鑰和私鑰與域相關,至少這是一些API的工作原理。 – Muskie 2012-04-25 21:20:00