API Gravity Forms всегда 401

Я пытаюсь использовать остальные API гравитационных форм, https://www.gravityhelp.com/documentation/article/web-api/, но я получаю ошибку 401 независимо от того, что я пытаюсь сделать. Я пытался использовать все методы, перечисленные в документации и в статье Стивена Хенти, https://www.stevenhenty.com/gravity-forms-api/, но, похоже, это не работает.

Если я вошел на сайт WordPress как администратор, я не смогу использовать ссылку, например:

http://mydomain/gravityformsapi/forms/

Спасибо за любые предложения.


person grmdgs    schedule 12.08.2016    source источник


Ответы (4)


В моем случае это было то, что я не нажал кнопку обновления вкладки «Веб-API».

Убедитесь, что вы нажимаете кнопку «Обновить», хотя она показывает ключ API, но вам все же нужно нажать кнопку «Обновить», чтобы включить API.

person Sanjeev Singh    schedule 06.08.2017
comment
Спасибо за это, поставил меня в тупик на некоторое время! Подводя итог для всех остальных, после того, как вы установили флажок «Включено», чтобы разрешить доступ к API в настройках API Gravity Forms, и нажали кнопку «Обновить», вам нужно нажать кнопку «Обновить» СНОВА после того, как учетные данные API будут был сгенерирован. Не логично, я знаю, но, кажется, ответ! - person Matt Sims; 23.02.2018
comment
Та же проблема здесь. Совершенно не очевидно, что вы снова нажимаете, чтобы обновить, но это решило проблему. - person Josh Warren; 31.05.2018
comment
Поскольку это не так очевидно, как должно быть, кнопка API v1 Show/Hide QR Code появляется только в том случае, если включение остальных API прошло успешно. - person ChrisK; 18.07.2019

Я получал то же самое из-за некоторой странности конечной точки маршрута. При вычислении подписи вы не используете косую черту в конце маршрута: forms/1.

Но вы делаете использовать завершающую косую черту в URL (иначе я получаю 301 Moved Permanently):

http://demo.gravityforms.com/gravityformsapi/the_route/?api_key...

Это выглядит странно иметь /?api_key..., но это то, что работает для меня.

Вот пример Ruby. использовал с демонстрационными учетными данными:

GravityFormsAPI.generate_URL(site: 'demo.gravityforms.com', route: 'forms/1', public_api_key: '5b225f8382', private_api_key: 'fc6d1bc71d2ebfc')

Надеюсь это поможет.

person jmosesman    schedule 21.08.2016
comment
Если я хочу добавить feild_filters или получить одну запись по entry_Id, она всегда дает 401, независимо от того, что я делаю. Если я использую это с /, это то же самое, что и без него, это то же самое. Хотя браузер автоматически добавляет / в конце URL. Я пытаюсь реализовать это на iOS и следую github.com/ibjects/GFAPI-iOS - person Chaudhry Talha; 26.08.2016

Иногда я получал прерывистую ошибку 401 после долгих исследований, я нашел эту статью

Azure DocumentDB Периодическая ошибка 401 при запросе REST API через Obj-c

Если подпись содержит знак +, я получил ошибку 401

Может быть, это поможет другому человеку

Извините за мой английский текст

person Philippe Michaud    schedule 18.11.2016

Основываясь на решении здесь, я публикую этот ответ.
Представьте, что вы создали URL-адрес, и он не сработал, и вы получили 401. Затем через некоторое время вы поняли ошибку, которую упс! Параметры, которые я передал, нуждались в скобках, и вы снова запускаете код, и вы снова получаете 401. Почему это так?

Это связано с тем, что параметры apiKey, Signature и Expire time одинаковы, и вы изменили только другие параметры с помощью запроса GET. Однако эти три параметра используются для аутентификации пользователя, поэтому старая подпись, которая была сгенерирована для отказа в разрешении, будет отказывать снова, несмотря ни на что.

Поэтому, чтобы исправить это, я просто изменил время истечения срока действия с 1577922200 на 1577933200. Я мог бы изменить его на что угодно, но дело в том, что мне просто нужно дать что-то новое, чтобы можно было сгенерировать новую подпись. Поэтому, когда я изменил, он начал работать.

ДРУГАЯ ВОЗМОЖНАЯ ПРИЧИНА

При создании подписи с помощью SHA1 вы используете NSString *string_to_sign = [NSString stringWithFormat:@"%@:%@:%@:%@",api_key,http_method,route,expires]; согласно документации. Но для того, чтобы сделать CCHmac, вам нужно передать две вещи:

  1. Ключ
  2. Данные

и на основе ссылки создается как

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