2

製品の価格を取得するために Amazon Web サービスを使用しています。

正常に動作していましたが、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];

前もって感謝します。

4

1 に答える 1

0

Amazonコードは比較的簡単に修正できました。私はPHPを使用しています。別のパラメータを追加しました:

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

それから私は電話します:

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

AWS Signed Requestは、Ulrich Mierendorffによって作成され、SameerBorateによって変更されました。

于 2012-03-04T05:01:20.957 に答える