Основываясь на решении здесь, я публикую этот ответ.
Представьте, что вы создали URL-адрес, и он не сработал, и вы получили 401. Затем через некоторое время вы поняли ошибку, которую упс! Параметры, которые я передал, нуждались в скобках, и вы снова запускаете код, и вы снова получаете 401. Почему это так?
Это связано с тем, что параметры apiKey, Signature и Expire time одинаковы, и вы изменили только другие параметры с помощью запроса GET. Однако эти три параметра используются для аутентификации пользователя, поэтому старая подпись, которая была сгенерирована для отказа в разрешении, будет отказывать снова, несмотря ни на что.
Поэтому, чтобы исправить это, я просто изменил время истечения срока действия с 1577922200
на 1577933200
. Я мог бы изменить его на что угодно, но дело в том, что мне просто нужно дать что-то новое, чтобы можно было сгенерировать новую подпись. Поэтому, когда я изменил, он начал работать.
ДРУГАЯ ВОЗМОЖНАЯ ПРИЧИНА
При создании подписи с помощью SHA1
вы используете NSString *string_to_sign = [NSString stringWithFormat:@"%@:%@:%@:%@",api_key,http_method,route,expires];
согласно документации. Но для того, чтобы сделать CCHmac
, вам нужно передать две вещи:
- Ключ
- Данные
и на основе ссылки создается как
const char *cKey = [api_private_key cStringUsingEncoding:NSASCIIStringEncoding];
const char *cData = [string_to_sign cStringUsingEncoding:NSASCIIStringEncoding];
Итак, я ошибся, что использовал API Key
в cKey
вместо API Private Key
. Поэтому я меняю его, как сказано в учебнике, и это сработало. В противном случае я получал 401
независимо от того, что я пытался.
person
Chaudhry Talha
schedule
01.09.2016