2012-02-21 8 views
1

Amazon Webサービスを使用して商品価格を取得しています。Amazon product search API:Not Working

アマゾンが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

Amazonのコードを比較的簡単に修正できました。私はPHPを使用しています。私は呼んでその後

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

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

AWS署名リクエストがウルリッヒMierendorffによって作成され、サミールホウ酸によって変更された私は別のパラメータを追加しました。

+1

私はassociateTagパラメータを追加しましたが、このエラー: "私たちが計算したリクエスト署名は、あなたが提供した署名と一致しません。 – Rachit

+0

公式のAWSサポートフォーラムを試してみてください。別のドメインを使用して開発者キーを登録しましたか?私は詳細を覚えていませんが、あなたの公開鍵と秘密鍵はドメインに結びついています。少なくとも、いくつかのAPIがどのように動作しているかです。 – Muskie