我正在尝试创建一个连接到 QuickBooks Online Edition 的 ASP.NET 页面,读取几个值并显示结果。到目前为止,我已经下载了 QuickBooks SDK,但我无法找到有关如何创建 asp.net 页面以连接到 QuickBooks Online 的简单分步示例。QuickBooks SDK 文档和 SDK 本身非常令人困惑和不知所措。任何人都知道关于从哪里开始的简单分步教程......或者也许是关于要做的第一件事的提示。

有帮助吗?

解决方案 2

以下是我为实现此目的所采取的所有步骤。特别感谢 基思·帕尔默 对于他的评论、回答和 他的网站 这确实帮助我完成了这项工作。

  1. 注册您的应用程序http://appreg.quickbooks.com. 。这将为您提供应用程序 ID 和应用程序名称。我使用了这些设置:

    • 目标应用:QBOE
    • 环境:生产
    • 应用类型:桌面

      • (使用桌面使事情变得更容易,不需要证书)
    • 验证密钥将发送到您的电子邮件地址,您需要在此向导的第 2 页上输入该地址。

  2. 设置您的 QBOE 连接. 。在步骤 1 中完成应用程序注册后,您将获得一个应用程序 ID。使用下面网址中的此 ID 来设置您的 QBOE 连接:
    • https://login.quickbooks.com/j/qbn/sdkapp/confirm?serviceid=2004&appid=APP_ID
    • 笔记:确保将上述网址中的 APP_ID 替换为您注册应用程序时创建的应用程序 ID。
    • 该向导将引导您完成以下步骤:
      1. 指定连接的名称。
      2. 授予访问权限 - 我授予了所有会计权限,因为这是最简单的。
      3. 指定登录安全性 - 我关闭了登录安全性。这很重要,因为它使向 QBOE 提交 xml 变得更加容易,因为您不需要为每个用户获取会话票证。
      4. 然后您将获得一个连接密钥。
  3. 此时您现在拥有了 3条重要信息 以便访问您的 QuickBooks Online Edition (QBOE) 帐户。
    • 应用名称
    • 应用程序ID
    • 连接键
  4. 将 XML 发布到 QBOE 将 3 条访问信息和实际请求写入您的 QBOE 数据库。以下是将发布到 QBOE 网关的示例 C# 代码。这将返回 QuickBooks 数据库中的所有客户。确保使用您的应用程序名称、应用程序 ID 和连接密钥更新下面的 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. 需要注意的几点:

    • 正如 Keith Palmer 所指出的,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 数据,请确保登录安全 没有 强制用户每次都登录。提示是这样的:

“您要打开登录安全性吗?”

您必须选择:“不。任何可以登录[应用程序名称]的人都可以使用该连接”。

除此之外,Yishai 对整个过程的看法是正确的。重申一下,简而言之:

  • 注册QBOE账户
  • 使用 Intuit 的 AppReg 服务注册您的集成应用程序
  • 访问特定链接,将您的 AppReg 应用程序绑定到您的 QBOE 帐户(请确保在它要求您时关闭登录安全性!)
  • 向 Intuit 服务器发出 HTTPS POST 请求,以使用 Intuit 为您提供的连接票证进行登录
  • 发出 HTTPS POST 请求以将 qbXML 请求发送到 Intuit 的服务器,您可以使用该服务器在 QuickBooks Online Edition 中添加、修改、删除和查询记录。

我的网站上有一些额外的文档和一些示例请求 QuickBooks 开发和集成 wiki, ,具体来说 QuickBooks 在线版集成 页。

我已经构建了一个解决方案,可以执行您在 PHP 中要求的操作,它可以在 QuickBooks Online Edition 中添加、修改和查询数据,而无需用户每次都登录,而且它的工作方式非常出色。它在 PHP 购物车 (VirtueMart) 和 QuickBooks Online Edition 之间推送和拉取订单数据。PHP 代码可在此处获取:QuickBooks PHP 框架

附带说明一下,除非您非常熟悉生成 SSL 证书并通过 HTTPS POST 发送它们,否则使用 DESKTOP 通信模型(而不是 HOSTED 模型)将为您省去很多麻烦。只需确保您的连接票证安全加密即可。

另外,Yishi 建议:“一种是以编程方式打开他们的登录页面并提交凭据,就像您是用户一样。我确信它不“受支持”,但它可能会起作用。”具体地说 反对 Intuit 和 SDK 规定的安全/开发人员指南。如果他们发现您这样做,他们将禁止您的应用程序连接到 QuickBooks。

这是你必须做的大纲在QBSDK文件(至少在7.0版本,我有SDK)的第7章进行了概述。你必须打开一个测试帐户,并得到允许连接到他们的服务器。

一旦你有你的帐户设置,基本的身份验证过程包括重定向用户到QuickBooks的在线网站登录的,一旦用户已经这样做了,QuickBooks的回调与HTTPS后有一票,你的应用程序,它基本上,你可以使用你的请求,让系统知道您进行身份验证会话句柄。当你得到回应,你分析它,并发送自己的登录请求,根据你得到了什么回来的系统。

然后(如果我理解正确的文档)你基本上是在做与QuickBooks的请求XML文件的Https的帖子,你会得到你要解析,以得到你想要的数据的XML响应。

我希望得到你开始。

该SDK的其余部分文件(你需要知道如何形成请求和解析您的数据),其余的都关心如何与桌面产品之间进行通信。你会从文档的其余部分需要的唯一的事情是怎么做的错误处理,如果你发布的数据QuickBooks的这实在是唯一重要的。如果你只是读,也没关系(无论您的要求进行工作或没有,你不必担心,如果你需要重试或是否会导致重复数据)。

编辑:鉴于您的具体使用情况下,我看到两个选项。 (你是不是疯了,只是没有典型的QuickBooks的在线场景)。

一是以编程方式击中了他们的登录页面,仿佛你是一个用户提交的凭据。我敢肯定,它不是“支持”,但它可能会工作。

另外就是每天早晨或晚上缓存结果(你应该做的大概无论如何),并有一个管理屏幕,在这里有人不登录到QuickBooks的在线和更新的结果或任何有意义的。

在大多数小企业来说,他们会选择第一个选项,但第二个是要更稳定的工作,有力和实际Intuit公司的支持,如果你有一个问题。

这看起来相当接近你所需要的: www.QuickbooksConnector.com

无法下载它。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top