Подключение приложения ASP.NET к QuickBooks Online Edition
-
11-09-2019 - |
Вопрос
Я пытаюсь создать страницу ASP.NET, которая подключается к QuickBooks Online Edition, читает пару значений и отображает результаты.На данный момент я загрузил QuickBooks SDK, но мне не удалось найти простой пошаговый пример создания страницы asp.net для подключения к QuickBooks Online.Документация QuickBooks SDK и сам SDK очень запутаны и запутаны.Кто-нибудь знает простое пошаговое руководство о том, с чего начать...или, может быть, намек на самое первое, что нужно сделать.
Решение 2
Вот все шаги, которые я предпринял, чтобы это заработало.Особая благодарность Кейт Палмер за его комментарии, ответы и его сайт что действительно помогло мне заставить это работать.
Зарегистрируйте свое приложение в http://appreg.quickbooks.com.Это даст вам ваш идентификатор приложения и имя приложения.Я использовал эти настройки:
- Целевое применение:QBOE
- Среда:Производство
Тип приложения:Рабочий стол
- (использование Desktop значительно упростило задачу, поскольку сертификаты не требовались)
Ключ подтверждения будет отправлен на ваш адрес электронной почты, который вам необходимо ввести на странице 2 этого мастера.
- Настройте соединение QBOE.Как только вы завершите регистрацию приложения на шаге 1, у вас появится идентификатор приложения.Используйте этот идентификатор в URL-адресе ниже, чтобы настроить соединение QBOE:
- https://login.quickbooks.com/j/qbn/sdkapp/confirm?serviceid=2004&appid=
APP_ID
- ПРИМЕЧАНИЕ:Обязательно замените APP_ID в приведенном выше URL-адресе на идентификатор приложения, который был создан при регистрации вашего приложения.
- Мастер проведет вас через следующие шаги:
- Указание имени для вашего подключения.
- Предоставление прав доступа. Я предоставил права «Все учетные записи», так как это было проще всего.
- Укажите безопасность входа в систему — я отключил безопасность входа.Это важно, поскольку это значительно упрощает отправку XML-файла в QBOE, поскольку вам не нужно получать билет сеанса для каждого пользователя.
- После этого вам будет предоставлен ключ подключения.
- https://login.quickbooks.com/j/qbn/sdkapp/confirm?serviceid=2004&appid=
- На данный момент у вас есть 3 важные информации чтобы получить доступ к вашей учетной записи QuickBooks Online Edition (QBOE).
- Имя приложения
- Идентификатор приложения
- Ключ подключения
Опубликуйте XML в QBOE с тремя частями информации о доступе и фактическим запросом в вашу базу данных QBOE.Вот пример кода C#, который будет отправлен на шлюз QBOE.Это вернет всех клиентов в вашу базу данных QuickBooks.Обязательно обновите приведенный ниже XML-файл, указав имя вашего приложения, идентификатор приложения и ключ подключения.
string requestUrl = null; requestUrl = "https://apps.quickbooks.com/j/AppGateway"; HttpWebRequest WebRequestObject = null; StreamReader sr = null; HttpWebResponse WebResponseObject = null; StreamWriter swr = null; try { WebRequestObject = (HttpWebRequest)WebRequest.Create(requestUrl); WebRequestObject.Method = "POST"; WebRequestObject.ContentType = "application/x-qbxml"; WebRequestObject.AllowAutoRedirect = false; string post = @"<?xml version=""1.0"" encoding=""utf-8"" ?> <?qbxml version=""6.0""?> <QBXML> <SignonMsgsRq> <SignonDesktopRq> <ClientDateTime>%%CLIENT_DATE_TIME%%</ClientDateTime> <ApplicationLogin>APPLICATION_LOGIN</ApplicationLogin> <ConnectionTicket>CONNECTION_TICKET</ConnectionTicket> <Language>English</Language> <AppID>APP_ID</AppID> <AppVer>1</AppVer> </SignonDesktopRq> </SignonMsgsRq> <QBXMLMsgsRq onError=""continueOnError""> <CustomerQueryRq requestID=""2"" /> </QBXMLMsgsRq> </QBXML>"; post = post.Replace("%%CLIENT_DATE_TIME%%", DateTime.Now.ToString("yyyy-MM-ddTHH:mm:ss")); XmlDocument xmlDoc = new XmlDocument(); xmlDoc.LoadXml(post); post = xmlDoc.InnerXml; WebRequestObject.ContentLength = post.Length; swr = new StreamWriter(WebRequestObject.GetRequestStream()); swr.Write(post); swr.Close(); WebResponseObject = (HttpWebResponse)WebRequestObject.GetResponse(); sr = new StreamReader(WebResponseObject.GetResponseStream()); string Results = sr.ReadToEnd(); } finally { try { sr.Close(); } catch { } try { WebResponseObject.Close(); WebRequestObject.Abort(); } catch { } }
Пара вещей, на которые стоит обратить внимание:
- Как отметил Кейт Палмер, версия qbxml должна быть 6.0 (хотя в унифицированном экранном справочнике IDN указана версия 7.0).
- Мне нужно было включить атрибут onError="continueOnError".
- Требуется установка свойства WebRequestObject.ContentLength.
- Тип контента должен быть «application/x-qbxml».
- И, наконец, я получил множество сообщений «Удаленный сервер возвратил ошибку:(400) Bad Request.» исключения, которые совсем не помогли, но в конце концов мне удалось отследить их, что-то не так с xml.Поэтому, если вы получаете это исключение, посмотрите на свой xml как на источник проблемы.
Другие советы
Ответ Ишая частично верно, но не совсем.
Ты может попросите ваше приложение ASP .NET войти в систему и отправить запросы без необходимость отправить пользователя на страницу входа в QuickBooks Online если вы правильно установили настройки безопасности когда вы подключаете свое приложение к QuickBooks Online Edition.
Во время процесса регистрации/подключения приложения вас спросят, хотите ли вы включить или отключить безопасность входа в систему, с помощью подсказки, как показано ниже.Вы должны сказать, что хотите выключать безопасность входа в систему, если вы хотите иметь доступ к данным QuickBooks Online Edition без заставляя пользователя каждый раз входить в систему.Подсказка выглядит примерно так:
«Хотите включить безопасность входа?»
Вы должны выбрать:"Нет.Любой, кто может войти в [Имя приложения], может использовать соединение».
В остальном Ишай прав относительно этого процесса.Повторюсь, в двух словах:
- Зарегистрируйте учетную запись QBOE
- Зарегистрируйте свое интегрированное приложение с помощью службы Intuit AppReg.
- Перейдите по конкретной ссылке, чтобы связать свое приложение AppReg с вашей учетной записью QBOE (обязательно отключите безопасность входа в систему, когда вас об этом спросят!)
- Отправьте HTTPS POST-запросы к серверам Intuit для входа в систему, используя билет подключения, который Intuit предоставит вам.
- Выполняйте запросы HTTPS POST для отправки запросов qbXML на серверы Intuit, которые вы можете использовать для добавления, изменения, удаления и запроса записей в QuickBooks Online Edition.
На моем сайте есть дополнительная документация и несколько примеров запросов. Wiki для разработки и интеграции QuickBooks, в частности Интеграция QuickBooks Online Edition страница.
Я создал решение, которое делает то, что вы просите, на PHP: добавляет, изменяет и запрашивает данные в QuickBooks Online Edition, не требуя от пользователя каждый раз входить в систему, и оно работает как чемпион.Он передает и передает данные о заказах между корзиной покупок PHP (VirtueMart) и QuickBooks Online Edition.PHP-код доступен здесь:PHP-фреймворк QuickBooks
В качестве примечания: если вы не очень хорошо знакомы с генерацией сертификатов SSL и отправкой их через HTTPS POST, вы избавите себя от многих проблем, используя модель связи DESKTOP, а не модель HOSTED.Просто убедитесь, что ваш билет на подключение надежно зашифрован.
Также предложение Ишая:«Один из них — это программно открыть страницу входа в систему и отправить учетные данные, как если бы вы были пользователем.Я уверен, что это не «поддерживается», но, скорее всего, это сработает». против рекомендации по безопасности/разработчикам, изложенные Intuit и SDK.Если вас поймают на этом, они запретят вашему приложению подключаться к QuickBooks.
Схема того, что вам нужно сделать, изложена в главе 7 документации QBSDK (по крайней мере, в имеющейся у меня версии SDK 7.0).Вам необходимо открыть тестовую учетную запись и получить разрешение на подключение к их серверам.
После того, как вы настроили свою учетную запись, базовая процедура аутентификации состоит из перенаправления вашего пользователя на сайт QuickBooks Online для входа в систему, и как только пользователь это сделает, QuickBooks перезвонит вашему приложению с сообщением HTTPS с билетом, который по сути представляет собой дескриптор сеанса, который вы можете использовать для своих запросов, чтобы система знала, что вы прошли аутентификацию.Когда вы получаете этот ответ, вы анализируете его и отправляете в систему свой собственный запрос на вход на основе того, что вы получили обратно.
Затем (если я правильно понял документацию) вы в основном выполняете Https POSTS XML-файлов с запросами QuickBooks и получаете XML-ответы, которые вам нужно проанализировать, чтобы получить нужные вам данные.
Надеюсь, это поможет вам начать.
Остальная часть SDK — это документация (которая вам понадобится, чтобы знать, как формировать запросы и анализировать ответы), а все остальное связано с тем, как взаимодействовать с настольным продуктом.Единственное, что вам понадобится из остальной документации, — это обработка ошибок, что действительно важно только в том случае, если вы публикуете данные в QuickBooks.Если вы просто читаете, это не имеет значения (либо ваш запрос будет выполнен, либо нет, вам не нужно беспокоиться о том, нужно ли вам повторять попытку или это приведет к дублированию данных).
РЕДАКТИРОВАТЬ:Учитывая ваш конкретный вариант использования, я вижу два варианта.(Вы не сумасшедший, просто это не типичный сценарий QuickBooks Online).
Один из них — программно открыть страницу входа в систему и отправить учетные данные, как если бы вы были пользователем.Я уверен, что он не «поддерживается», но, скорее всего, сработает.
Другой — кэшировать результаты (что вам, вероятно, все равно следует делать) и иметь экран администратора, где кто-то может войти в QuickBooks онлайн и обновлять результаты каждое утро или вечер или что-то еще, что имеет смысл.
В большинстве малых предприятий они выберут первый вариант, но второй будет работать более последовательно, надежно и фактически будет поддерживаться Intuit, если у вас возникнут проблемы.
Это выглядит очень близко к тому, что вам нужно: www.QuickbooksConnector.com
Пока не удалось скачать.