今天我一直無法針對aws的產品廣告API的「ItemSearch」請求提出請求。製作AWS產品廣告API請求iOS
首先,這是2月24日星期一工作,現在3月1日工作不起作用。我不知道是否有任何更新可能改變了AWS的工作方式。搜索時找不到任何東西。
我的第一個錯誤是:「申請已過期時間戳的日期是1403Z」這意味着我的請求「1403Z」進入時間爲15分鐘出什麼AWS已存儲的UTC時間範圍。我做了一些研究,最終改變了下面的代碼。
NSDateFormatter *UTCFormatter = [[NSDateFormatter alloc] init];
UTCFormatter.dateFormat = @"yyMMddHHmmss'Z'";
UTCFormatter.timeZone = [NSTimeZone timeZoneWithAbbreviation:@"UTC"];
NSString *timeStamp = [UTCFormatter stringFromDate:[NSDate date]];
我改變了@"yyMMddHHmmss'Z'"
到@"yyyy-MM-dd'T'HH:mm:ss'Z'"
重新運行的要求,我再次遇到了這個錯誤:「我們出的要求籤名不匹配您提供的簽名檢查您的AWS訪問密鑰。和簽署方法。「這意味着我計算的API調用的簽名部分在比較一個AWS收到我的請求時計算出的值時是錯誤的。
我已經使用這個鏈接Amazon Signature Examples作爲參考來檢查我的代碼。
// create HMAC with SHA256
const char *cKey = [secretKey cStringUsingEncoding:NSUTF8StringEncoding];
const char *cData = [canonicalString cStringUsingEncoding:NSUTF8StringEncoding];
unsigned char cHMAC[CC_SHA256_DIGEST_LENGTH];
CCHmac(kCCHmacAlgSHA256, cKey, strlen(cKey), cData, strlen(cData), cHMAC);
NSData *hashData = [NSData dataWithBytes:cHMAC length:CC_SHA256_DIGEST_LENGTH];
NSString *signature = [[DTBase64Coding stringByEncodingData:hashData] stringByURLEncoding];
我沒有看到我的代碼錯誤。我已經通過谷歌查看了一個應用程序,它可能能夠創建我想要的字符串以測試我的簽名是否正確,但AWS似乎沒有任何東西(我可以找到,我可以只是一個糟糕的Google員工)。
我的AWS密鑰有一個「/」字符。我認爲這可能與計算HMAC的算法有關。所以我創建了新的密鑰,直到亞馬遜給我生成了一個帶有奇數字符並測試它的密鑰。它沒有工作....
最終什麼,我想說明的是使用該信息
NSString *verb = @"GET";
NSString *hostName = @"webservices.amazon.com";
NSString *path = @"/onca/xml";
NSDictionary *params = @{
@"Service": @"AWSECommerceService",
@"AWSAccessKeyId": accessKey,
@"Operation": @"ItemSearch",
@"ResponseGroup": @"Large",
@"SearchIndex": @"Books",
@"Title": bookTitle,
@"AssociateTag" : trackingID
};
我已經取代敏感/動態信息與變量的AWS產品廣告API請求。
我已經通過文檔搜索PDF在AWS Product Advertising Documentation,似乎無法找出我的問題。
最令人困惑的部分是,我的代碼在6天前工作,我什麼也沒有改變。
嗨,A'sa,你找到了你的問題的解決方案,我面臨着同樣的問題... – BADRI
我做了noobie的錯誤,並註釋了編碼身體參數的代碼。如果你有類似的問題,我會驗證你的網址是否正確,並且主體有正確的參數:3 –