Во-первых, это работало в понедельник, 24 февраля, а теперь и 1 марта. это не работает. Я не знаю, были ли какие-либо обновления, которые могли изменить работу AWS. Я ничего не нашел при поиске.
Моя первая ошибка:
"Срок действия запроса истек. . Дата отметки времени: 140301235753Z"
Это означает, что время, которое я ввожу для запроса "140301235753Z", составляет 15 минут. диапазон того, что AWS сохранил для времени UTC. Я провел небольшое исследование и в конечном итоге изменил код ниже.
Код: Выделить всё
NSDateFormatter *UTCFormatter = [[NSDateFormatter alloc] init];
UTCFormatter.dateFormat = @"yyMMddHHmmss'Z'";
UTCFormatter.timeZone = [NSTimeZone timeZoneWithAbbreviation:@"UTC"];
NSString *timeStamp = [UTCFormatter stringFromDate:[NSDate date]];
При повторном запуске запроса я столкнулся с этой ошибкой:
"Рассчитанная нами сигнатура запроса не соответствует не соответствует предоставленной вами подписи. Проверьте свой секретный ключ доступа AWS. и метод подписи."
Это означает, что часть подписи вызова API, которую я вычисляю, неверна при сравнении с той, которую AWS вычисляет при он получает мой запрос.
Я использовал эту ссылку «Примеры подписей Amazon» в качестве ссылки для проверки моего кода ниже.
Код: Выделить всё
// 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 был символ «/». Я подумал, что это может мешать алгоритмам расчета HMAC. Поэтому я создавал новые секретные ключи, пока Amazon не сгенерировала мне ключ без нечетных символов и не протестировала его. Это не сработало....
В конечном итоге я пытаюсь сделать запрос API рекламы продуктов AWS, используя эту информацию:
Код: Выделить всё
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
};
Я просмотрел PDF-файлы документации в разделе «Рекламная документация по продуктам AWS» и не смог найти разберитесь в моей проблеме.
Самое непонятное то, что мой код работал 6 дней назад, и я ничего не изменил.
Подробнее здесь: https://stackoverflow.com/questions/221 ... equest-ios
Мобильная версия