我正在尝试创建一个连接到QuickBooks Online Edition的ASP.NET页面,读取几个值,并显示结果。到目前为止,我已经下载了QuickBooks SDK,但是我无法找到关于如何创建asp.net页面以连接到QuickBooks Online的简单分步示例。 QuickBooks SDK文档和SDK本身非常令人困惑和压倒性。任何人都知道一个简单的一步一步的教程,从哪里开始...或者可能是第一件事要做的提示。
答案 0 :(得分:4)
Yishai的回答是部分正确,但不完全正确。
您可以让您的ASP .NET应用程序登录并发出请求,而无需将用户发送到页面中的QuickBooks Online登录确保在将应用程序连接到QuickBooks Online Edition时正确设置安全首选项。
在应用程序注册过程/连接过程中,它会询问您是否要通过以下提示打开或关闭登录安全性。如果您希望能够访问QuickBooks Online Edition数据而不,则必须告诉它您希望关闭登录安全性,以强制用户每次登录。提示符如下:
“你想打开登录安全性吗?”
您必须选择: “不。任何可以登录[应用程序名称]的人都可以使用连接”。
除此之外,Yishai对这个过程是正确的。简而言之,要重新进行迭代:
我的QuickBooks development and integration wiki上有一些其他文档和一些示例请求,特别是QuickBooks Online Edition integration页面。
我已经构建了一个解决方案来完成你在PHP中所要求的,它可以在QuickBooks Online Edition中添加,修改和查询数据,而无需用户每次登录,它就像一个冠军。它在PHP购物车(VirtueMart)和QuickBooks Online Edition之间推送和提取订单数据。 PHP代码可在此处获得: QuickBooks PHP Framework
作为旁注,除非您非常熟悉生成SSL证书并通过HTTPS POST发送它们,否则使用DESKTOP通信模型而不是HOSTED模型可以省去很多麻烦。只需确保安全加密连接票证即可。
此外,Yishai的建议是:“一个是以编程方式点击他们的登录页面并提交凭证,就像你是一个用户一样。我确信它不是”支持“但它可能会起作用。”专门针对反对安全/开发人员指南Intuit和SDK提出。如果他们抓住你这样做,他们将禁止你的应用程序连接到QuickBooks。
答案 1 :(得分:4)
以下是我为实现这一目标而采取的所有步骤。特别感谢Keith Palmer提供了他的评论,答案和his website,这些确实帮助我实现了这一目标。
在http://appreg.quickbooks.com注册您的应用。这将为您提供您的App ID和应用程序名称。我使用了这些设置:
应用程序类型:桌面
验证密钥将发送到您需要在此向导第2页上输入的电子邮件地址。
APP_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
{
}
}
需要注意的事项:
答案 2 :(得分:0)
QBSDK文档的第7章概述了你要做的事情(至少在我拥有的SDK的7.0版本中)。您必须打开测试帐户并获得连接其服务器的权限。
设置帐户后,基本身份验证过程包括将用户重定向到QuickBooks Online站点以进行登录,一旦用户完成此操作,QuickBooks将使用带有故障单的HTTPS帖子回拨您的应用程序,基本上是一个会话句柄,您可以将其用于您的请求,以便系统知道您已通过身份验证。当您得到该响应时,您将解析它并根据您返回的内容向系统发送您自己的登录请求。
然后(如果我正确理解了文档)你基本上是在使用QuickBooks请求进行xml文件的Https POSTS,并且你得到了你必须解析的XML响应以获得你想要的数据。
我希望能让你开始。
SDK的其余部分是文档(您需要知道如何形成请求并解析您的响应),其他一切都与如何与桌面产品通信有关。从其他文档中你唯一需要的是如何进行错误处理,这对于将数据发布到QuickBooks来说非常重要。如果您只是阅读,那么无关紧要(无论您的请求是否成功,您都不必担心是否需要重试或者是否会导致数据重复)。
编辑:鉴于您的具体用例,我看到两个选项。 (你并不疯狂,只是不是典型的QuickBooks Online场景)。
一种是以编程方式点击其登录页面并提交凭据,就像您是用户一样。我确信它不是“支持”但它可能会有用。
另一种方法是缓存结果(你可能应该这样做),并有一个管理界面,有人在线登录QuickBooks并每天早上或晚上更新结果或任何有意义的结果。
在大多数小型企业中,他们会选择第一种选择,但第二种选择会更加一致,稳健,并且如果您遇到问题,实际上会得到Intuit的支持。
答案 3 :(得分:-2)
这看起来非常接近您的需求:www.QuickbooksConnector.com
无法下载。