Вопрос

Я пытаюсь создать страницу ASP.NET, которая подключается к QuickBooks Online Edition, читает пару значений и отображает результаты.На данный момент я загрузил QuickBooks SDK, но мне не удалось найти простой пошаговый пример создания страницы asp.net для подключения к QuickBooks Online.Документация QuickBooks SDK и сам SDK очень запутаны и запутаны.Кто-нибудь знает простое пошаговое руководство о том, с чего начать...или, может быть, намек на самое первое, что нужно сделать.

Это было полезно?

Решение 2

Вот все шаги, которые я предпринял, чтобы это заработало.Особая благодарность Кейт Палмер за его комментарии, ответы и его сайт что действительно помогло мне заставить это работать.

  1. Зарегистрируйте свое приложение в http://appreg.quickbooks.com.Это даст вам ваш идентификатор приложения и имя приложения.Я использовал эти настройки:

    • Целевое применение:QBOE
    • Среда:Производство
    • Тип приложения:Рабочий стол

      • (использование Desktop значительно упростило задачу, поскольку сертификаты не требовались)
    • Ключ подтверждения будет отправлен на ваш адрес электронной почты, который вам необходимо ввести на странице 2 этого мастера.

  2. Настройте соединение QBOE.Как только вы завершите регистрацию приложения на шаге 1, у вас появится идентификатор приложения.Используйте этот идентификатор в URL-адресе ниже, чтобы настроить соединение QBOE:
    • https://login.quickbooks.com/j/qbn/sdkapp/confirm?serviceid=2004&appid=APP_ID
    • ПРИМЕЧАНИЕ:Обязательно замените APP_ID в приведенном выше URL-адресе на идентификатор приложения, который был создан при регистрации вашего приложения.
    • Мастер проведет вас через следующие шаги:
      1. Указание имени для вашего подключения.
      2. Предоставление прав доступа. Я предоставил права «Все учетные записи», так как это было проще всего.
      3. Укажите безопасность входа в систему — я отключил безопасность входа.Это важно, поскольку это значительно упрощает отправку XML-файла в QBOE, поскольку вам не нужно получать билет сеанса для каждого пользователя.
      4. После этого вам будет предоставлен ключ подключения.
  3. На данный момент у вас есть 3 важные информации чтобы получить доступ к вашей учетной записи QuickBooks Online Edition (QBOE).
    • Имя приложения
    • Идентификатор приложения
    • Ключ подключения
  4. Опубликуйте 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
            {
            }
        }
    
  5. Пара вещей, на которые стоит обратить внимание:

    • Как отметил Кейт Палмер, версия 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

Пока не удалось скачать.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top