0

我有一个 ASP.NET 应用程序,我想将它连接到我的 Quickbooks Online 帐户,以编程方式输入新发票、根据这些发票付款,甚至输入新费用。多年来,似乎有各种各样的 API 和流程已经发生了很多变化,所以我不知道从哪里开始。我不想创建一个我会发布到某种 App Store 或任何东西的应用程序,这仅供个人使用(自动化等)我正在寻找一种简单、直接的方法。

4

1 回答 1

3

似乎有各种各样的 API 和流程多年来经历了许多变化

这是轻描淡写。Intuit 是令人困惑且实施不佳的 API 之王。:-)

我不想创建一个我会发布到某种 App Store 或任何东西的应用程序

由于这仅供您内部使用,此时您唯一的选择是 QuickBooks Online 的 QuickBooks SDK/qbXML 网关。

(IPP/Intuit Anywhere 是最新的 API,但正如常见问题解答所述,目前 Intuit Anywhere 仅适用于您转售给他人的 SaaS 应用程序。)

开始使用 qbXML 和 QuickBooks Online 的最简单方法是通过 HTTP 将数据直接发送到网关。一些示例代码如下所示:

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
    {
    }

请注意,要使用该示例代码,您需要一个应用程序登录名和连接票证。您可以按照我们的QuickBooks 集成 wiki上的 DESKTOP REGISTRATION 演练获得这些。

如果您需要更多的抽象,您还可以使用 SDK 中包含的 QBFC 库。请注意,“QBOEConnector”.NET 组件过去对人们来说一直是个问题(出于某种奇怪的原因,它们需要一些奇怪的注册表编辑和东西......)。

您可以使用QuickBooks OSR(选中“OE”复选框,取消选中“US”复选框,使用屏幕顶部的“Select Message”下拉菜单,然后选择“XML Ops”选项卡)查看可用请求发送到 QuickBooks Online。如果您没有在列表中看到它,则 QuickBooks Online API 不支持它。

于 2013-03-25T10:49:41.280 回答