Первый - мой вопрос:
При доступе к API Quickbooks v3 (как было навязано мне Intuit в эти выходные) я пытаюсь получить доступ к записям журнала (но следующая проблема сохраняется при любом другом запросе), и я пытаюсь использовать предписанный запрос? query=SELECT * FROM JournalEntry (что?).
https://qb.sbfinance.intuit.com/v3/company/<id>/query?query=SELECT * FROM JournalEntry
Я получаю в результате:
{"Fault":{"Error":[{"Message":"message=Exception authenticating OAuth; errorCode=003200; statusCode=401","code":"3200"}],"type":"AUTHENTICATION"},"requestId":"6f5e5f14af7d4867ad0d8f639ade7d04","time":"2013-11-12T16:10:44.724Z"}
Что, да, говорит мне, что произошла ошибка аутентификации. Однако, когда я получаю доступ к URL-адресу, который не включает этот нелепый синтаксис запроса, все работает нормально:
https://qb.sbfinance.intuit.com/v3/company/<id>/journalentry/<id>
У меня была аналогичная ошибка при доступе к v2 API, и это было плохое форматирование с моей стороны, но я не вижу, что не так с моим запросом.
И поскольку мой код для генерации токенов аутентификации и т. д. идентичен для обоих типов запросов, я сомневаюсь, что проблема связана с тем, как я аутентифицируюсь. Точно так же «исключение» говорит мне, что что-то идет не так, что API не идентифицирует. Вероятно, неправильное форматирование URL-адреса.
Я попытался заменить пробелы URL-адреса запроса как на «+», так и на «% 20», что возвращает ту же ошибку.
Я использую питон и рут. Код отлично работает для v2 (но он был объявлен устаревшим на выходных без предупреждения, и теперь он больше не документирован).
В качестве бонуса и потому, что, по-видимому, это основной способ общения Intuit со своими клиентами: я шокирован тем, что у Intuit больше нет частных билетов в службу поддержки, доступных на их веб-сайте, и что они полагаются на среду сообщества, такую как SO, для обеспечения поддержки. Меньшее, что они могли сделать, это обеспечить собственную поддержку. Особенно, если мы платим за использование API. Это абсолютно шокирует.
Кроме того, API возвращает противоречивые ответы (один и тот же запрос вернет ошибку или действительный результат, в зависимости от... вообще никаких изменений). Ошибка, о которой я сообщил через их заявки в службу поддержки, и они должным образом проигнорировали.
О, и документация говорит использовать
https://quickbooks.api.intuit.com/v3/v3/company/companyID/query?query=selectStmt
в то время как API Explorer использует:
https://qb.sbfinance.intuit.com/v3/company/<id>/query?query=SELECT * FROM JournalEntry
Кто-нибудь знает, какой из них я должен на самом деле использовать?
Изменить
Для ответа, который не работает, заголовки моих запросов:
{
'Content-Length': u'62',
'Accept-Encoding': 'gzip,
deflate,
compress',
'accept': 'application/json',
'User-Agent': 'python-requests/1.2.3CPython/2.7.5Darwin/13.0.0',
'Content-Type': 'application/x-www-form-urlencoded',
'authorization': 'OAuthrealm="<companyId>",
oauth_nonce="3ad98c5f71bc9f102cc31ac9815cb6d08994454e",
oauth_timestamp="1384280420",
oauth_consumer_key="<consumerKey>",
oauth_signature_method="HMAC-SHA1",
oauth_version="1.0",
oauth_token="<oauthToken>",
oauth_signature="<oauthSignature"'
}
Мой адрес:
https://quickbooks.api.intuit.com/v3/company/<id>/query?query=SELECT+*+FROM+JournalEntry&
И мои заголовки ответов:
{'content-length': '227', 'server': 'Apache/2.2.22 (Unix)', 'connection': 'close', 'date': 'Tue, 12 Nov 2013 18:20:20 GMT', 'content-type': 'application/json;charset=ISO-8859-1', 'www-authenticate': 'OAuth oauth_problem="signature_invalid"'}
Моя функция хеширования подписи верна. Это стандартная функция, используемая Rauth, и она работает подходит для более стандартных вызовов API (в которых нет пробелов или запросов выбора SQL).