为QuickBooks Online编写一次性脚本的最佳方法是什么?

时间:2014-04-07 21:21:58

标签: c# quickbooks-online

行,

我真的花了几个小时在这上面 - 而且对于我的生活 - 无法弄清楚。

我想做一些非常简单的事情 - 我想为所有过期发票的客户推荐我的QuickBooks Online实例。在某个时刻,我想向他们发送警告电子邮件,如果他们过了30天,我想在我的SaaS应用程序中暂停他们的实例。

我希望执行此操作的引擎在周二和周四醒来,我的目的是编写一个C#应用程序并使用Windows任务计划程序按照所述计划运行它。

现在 - 我已经遍布平台API和Intuit应用程序中心,它的页面数量很多,但不知何故,语无伦次。看来,为了在线集成w / QuickBooks,我需要使用"蓝点"或某种需要UI的联合/ OAuth身份验证 - 但是,由于我的App 没有UI,因此这不适合我。其他帖子告诉大家看看QBSDK,但这似乎只适用于QuickBooks桌面。

不知道为什么这么难 - 它应该是一个简单的用例。有人可以帮忙吗?如果我能得到示例代码,它就会很漂亮。

安德鲁

1 个答案:

答案 0 :(得分:1)

要让您前往的几点澄清:

  • 需要蓝点菜单。忽略任何相关的事情。

  • 需要使用任何“联合”(已弃用)。

  • 需要使用OAuth, 需要有一个GUI,但是只有GUI出现一旦之后,您将获得存储并用于连接所有未来会话的长期令牌。即只有第一个连接需要GUI(这是大多数OAuth应用程序的典型),之后它可以在没有GUI的情况下无人值守运行。如果你真的不想构建一个GUI,你可以使用Intuit提供的OAuth游乐场工具来生成一个(例如使用他们的GUI代替你的GUI)。

这是允许您生成那些长寿命令牌的游乐场:

从那里,使用您选择的OAuth库(如果您浏览developer.intuit.com,Intuit会提供一些)来向Intuit的端点发出REST请求。

您需要使用标准Invoice API端点 - 文档在此处:

基本上你要点击这个端点(使用OAuth进行身份验证):

https://quickbooks.api.intuit.com/v3/company/(your company ID)/query?query=SELECT * FROM Invoice WHERE Balance > 0

你将会像这样找回一大堆XML:

<IntuitResponse xmlns="http://schema.intuit.com/finance/v3" time="2013-04-23T08:30:37.983-07:00">
  <QueryResponse startPosition="1" maxResults="1" totalCount="1">
    <Invoice domain="QBO" sparse="false">
      <Id>44</Id>
      <SyncToken>1</SyncToken>
      <MetaData>
        <CreateTime>2013-04-23T08:30:17-07:00</CreateTime>
        <LastUpdatedTime>2013-04-23T08:30:18-07:00</LastUpdatedTime>
      </MetaData>
      <CustomField>
        <Name>Custom 1</Name>
        <Type>StringType</Type>
      </CustomField>
      <CustomField>
        <Name>Custom 2</Name>
        <Type>StringType</Type>
      </CustomField>
      <CustomField>
        <Name>Custom 3</Name>
        <Type>StringType</Type>
      </CustomField>
      <DocNumber>1014</DocNumber>
      <TxnDate>2012-04-20</TxnDate>
      <CurrencyRef name="United States Dollar">USD</CurrencyRef>
      <Line>
        <Id>1</Id>
        <LineNum>1</LineNum>
        <Amount>15.00</Amount>
        <DetailType>SalesItemLineDetail</DetailType>
        <SalesItemLineDetail>
          <ItemRef name="Sales">1</ItemRef>
          <TaxCodeRef>NON</TaxCodeRef>
        </SalesItemLineDetail>
      </Line>
      <Line>
        <Amount>15.00</Amount>
        <DetailType>SubTotalLineDetail</DetailType>
        <SubTotalLineDetail/>
      </Line>
      ...