Выполнение запроса API рекламы продуктов AWS iOSIOS

Программируем под IOS
Ответить
Anonymous
 Выполнение запроса API рекламы продуктов AWS iOS

Сообщение Anonymous »

Сегодня мне не удалось отправить запрос «ItemSearch» для API рекламы продуктов для AWS.
Во-первых, это работало в понедельник, 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]];
Я изменил @"yyMMddHHmmss'Z'" на @"yyyy-MM-dd'T'HH:mm:ss'Z'"< /p>
При повторном запуске запроса я столкнулся с этой ошибкой:

"Рассчитанная нами сигнатура запроса не соответствует не соответствует предоставленной вами подписи. Проверьте свой секретный ключ доступа 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];
Я не вижу ошибок в своем коде. Я искал через Google приложение, которое могло бы создать нужную мне строку, чтобы проверить правильность моей подписи, но в AWS, похоже, ничего не было (что я мог найти, я мог бы просто быть плохой гуглёр).
В моем секретном ключе для 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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «IOS»