C# 通过ASP.NET将发票、付款、费用等添加到Quickbooks中

C# 通过ASP.NET将发票、付款、费用等添加到Quickbooks中,c#,asp.net,api,quickbooks,quickbooks-online,C#,Asp.net,Api,Quickbooks,Quickbooks Online,我有一个ASP.NET应用程序,我想连接到我的Quickbooks在线帐户,以编程方式输入新发票,根据这些发票付款,甚至输入新费用。似乎有各种各样的API和流程在这些年中经历了许多变化,所以我不知道从哪里开始。我不希望创建一个应用程序,我会发布到某种应用程序商店或任何东西,这只是个人使用(自动化等),我期待一个简单,直接的方法 似乎有各种各样的API和流程来实现这一点 这些年来经历了许多变化 这是轻描淡写的说法。Intuit是易混淆且实现不佳的API之王。:-) 我不想创建一个我会发布到某种应用

我有一个ASP.NET应用程序,我想连接到我的Quickbooks在线帐户,以编程方式输入新发票,根据这些发票付款,甚至输入新费用。似乎有各种各样的API和流程在这些年中经历了许多变化,所以我不知道从哪里开始。我不希望创建一个应用程序,我会发布到某种应用程序商店或任何东西,这只是个人使用(自动化等),我期待一个简单,直接的方法

似乎有各种各样的API和流程来实现这一点 这些年来经历了许多变化

这是轻描淡写的说法。Intuit是易混淆且实现不佳的API之王。:-)

我不想创建一个我会发布到某种应用程序中的应用程序 商店什么的

因为这只是供您内部使用,所以此时您唯一的选择是QuickBooks SDK/qbXML网关,用于QuickBooks Online

(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
    {
    }
string requestUrl=null;
请求URL=”https://apps.quickbooks.com/j/AppGateway";
HttpWebRequestWebRequestObject=null;
StreamReader sr=null;
HttpWebResponse WebResponseObject=null;
StreamWriter swr=null;
尝试
{
WebRequestObject=(HttpWebRequest)WebRequest.Create(requestUrl);
WebRequestObject.Method=“POST”;
WebRequestObject.ContentType=“应用程序/x-qbxml”;
WebRequestObject.AllowAutoRedirect=false;
字符串post=@“
%%客户日期时间%%

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

您可以使用(选中“OE”复选框,取消选中“US”复选框,使用屏幕顶部的“选择消息”下拉列表,并选择“XML Ops”选项卡)查看发送到QuickBooks Online的可用请求。如果您在列表中未看到,则QuickBooks Online API不支持该请求

似乎有各种各样的API和流程来实现这一点 这些年来经历了许多变化

这是一种轻描淡写的说法。Intuit是混乱和实现不佳的API之王。:-)

我不想创建一个我会发布到某种应用程序中的应用程序 商店什么的

因为这只是供您内部使用,所以此时您唯一的选择是QuickBooks SDK/qbXML网关,用于QuickBooks Online

(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
    {
    }
string requestUrl=null;
请求URL=”https://apps.quickbooks.com/j/AppGateway";
HttpWebRequestWebRequestObject=null;
StreamReader sr=null;
HttpWebResponse WebResponseObject=null;
StreamWriter swr=null;
尝试
{
WebRequestObject=(HttpWebRequest)WebRequest.Create(requestUrl);
WebRequestObject.Method=“POST”;
WebRequestObject.ContentType=“应用程序/x-qbxml”;
WebRequestObject.AllowAutoRedirect=false;
字符串post=@“
%%客户日期时间%%

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

您可以使用(选中“OE”复选框,取消选中“US”复选框,使用屏幕顶部的“选择消息”下拉列表,并选择“XML Ops”选项卡)查看发送到QuickBooks Online的可用请求。如果您在列表中未看到,则QuickBooks Online API不支持该请求