将 ASP.NET 应用程序连接到 QuickBooks Online Edition
-
11-09-2019 - |
题
我正在尝试创建一个连接到 QuickBooks Online Edition 的 ASP.NET 页面,读取几个值并显示结果。到目前为止,我已经下载了 QuickBooks SDK,但我无法找到有关如何创建 asp.net 页面以连接到 QuickBooks Online 的简单分步示例。QuickBooks SDK 文档和 SDK 本身非常令人困惑和不知所措。任何人都知道关于从哪里开始的简单分步教程......或者也许是关于要做的第一件事的提示。
解决方案 2
以下是我为实现此目的所采取的所有步骤。特别感谢 基思·帕尔默 对于他的评论、回答和 他的网站 这确实帮助我完成了这项工作。
注册您的应用程序 在 http://appreg.quickbooks.com. 。这将为您提供应用程序 ID 和应用程序名称。我使用了这些设置:
- 目标应用:QBOE
- 环境:生产
应用类型:桌面
- (使用桌面使事情变得更容易,不需要证书)
验证密钥将发送到您的电子邮件地址,您需要在此向导的第 2 页上输入该地址。
- 设置您的 QBOE 连接. 。在步骤 1 中完成应用程序注册后,您将获得一个应用程序 ID。使用下面网址中的此 ID 来设置您的 QBOE 连接:
- https://login.quickbooks.com/j/qbn/sdkapp/confirm?serviceid=2004&appid=
APP_ID
- 笔记:确保将上述网址中的 APP_ID 替换为您注册应用程序时创建的应用程序 ID。
- 该向导将引导您完成以下步骤:
- 指定连接的名称。
- 授予访问权限 - 我授予了所有会计权限,因为这是最简单的。
- 指定登录安全性 - 我关闭了登录安全性。这很重要,因为它使向 QBOE 提交 xml 变得更加容易,因为您不需要为每个用户获取会话票证。
- 然后您将获得一个连接密钥。
- https://login.quickbooks.com/j/qbn/sdkapp/confirm?serviceid=2004&appid=
- 此时您现在拥有了 3条重要信息 以便访问您的 QuickBooks Online Edition (QBOE) 帐户。
- 应用名称
- 应用程序ID
- 连接键
将 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 { } }
需要注意的几点:
- 正如 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
无法下载它。