quickbooks - 调用 intuit.ipp.anywhere.setup() 的最佳实践?

标签 quickbooks intuit-partner-platform quickbooks-online

这是一个关于进行 JavaScript 调用的最佳实践的问题,该调用生成标准的“连接到 QuickBooks”按钮(用于通过 Intuit 的 v3 REST API 建立到 QuickBooks Harmony 的连接)。

如果我遵循 Intuit 的例子,我会:

  • 引用 https://appcenter.intuit.com/Content/IA/intuit.ipp.anywhere.js在脚本标签中。
  • 标记集放置在我希望“连接到 QuickBooks”按钮显示的位置
  • 交叉我的手指,希望 intuit.ipp.anywhere.js 不会重定向到停机消息,仍然存在
  • 调用 intuit.ipp.anywhere.setup()
  • 请参阅“连接到 QuickBooks”按钮

  • ......它有效(对于“作品”的许多值(value)),但感觉非常脆弱:
  • 如果 intuit.ipp.anywhere.js 正在重定向到停机消息(读取:不是 JavaScript)或以其他方式不可用,我将收到脚本错误。
  • 如果我收到脚本错误(或 Intuit 的脚本副本出现其他问题),则不会向用户提供任何反馈,只有“连接到 QuickBooks”按钮应位于的空白区域。

  • 为了使这一切更具弹性,我将对 intuit.ipp.anywhere.js 的引用和对 intuit.ipp.anywhere.setup() 的调用结合到 JQuery .ajax() 调用中:
        $.ajax({
         url: 'https://appcenter.intuit.com/Content/IA/intuit.ipp.anywhere.js', 
         type: 'GET',
         dataType: 'script',
         timeout: 4000,
         success: function(response) {
          if (typeof intuit !== 'undefined') {
           intuit.ipp.anywhere.setup({
            menuProxy: 'MYMENUPROXYURL.aspx',
            grantUrl: 'MYGRANTURL.aspx'
           });
          }
         },
         error: function(x, t, m) {
           // show some friendly error message about Intuit downtime
         }        
        });
    

    ...这也有效(对于“作品”的更多值(value)):
  • 我对 setup() 的调用包含在成功处理程序中(以及对 intuit 对象是否存在的额外检查),因此如果出现问题,我不应该收到脚本错误。
  • 如果 Intuit 脚本的 GET 超时(4000 毫秒后)或返回非脚本内容,我将向用户显示一条友好的错误消息。

  • 有没有其他人采取不同的方法?
    Intuit 重新上线了吗?

    最佳答案

    这与我们处理它的方式类似。我们已经将它封装在 jQuery.getScript 调用中,但显然 .fail 处理程序不适用于跨域脚本标签。我们的解决方案如下:

    <script type="text/javascript>
        var timeoutID;
        timeoutID = window.setTimeout(function () {
            $("#ippConnectToIntuit").replaceWith('<p class="error-message">There was a problem communicating with QuickBooks. The service may be down or in heavy use. Try again later.</p>');
            }, 5000);
        $.getScript("https://appcenter.intuit.com/Content/IA/intuit.ipp.anywhere.js")
            .done(function () {
                window.clearTimeout(timeoutID);
                intuit.ipp.anywhere.setup({
                    menuProxy: '/path/to/our/menu/proxy',
                    grantUrl: '/path/to/our/grant/url'
                });
            });
    </script>
    <div id="ippConnectToIntuit"><ipp:connecttointuit></ipp:connecttointuit></div>
    

    关于quickbooks - 调用 intuit.ipp.anywhere.setup() 的最佳实践?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21888826/

    相关文章:

    c# - 我如何添加(引用)Quick book 的 dll 到 silverlight 项目?

    java - Quickbooks 与 java API 集成

    quickbooks - 如何为 QuickBooks Web 连接器创建 .qwc 文件?

    c# - 删除条款中的NOT-Linq-To-SQL

    quickbooks - 在 QuickBooks API V3 中以 PDF 格式检索发票

    c# - 如何干燥这段代码

    api - 如何获取 Intuit Data Services (IDS) 测试版功能?

    intuit-partner-platform - 如何使用 API 在 QuickBooks Online UK 中导入增值税?

    php - 如何使用 Keith Palmer 的 QBO 框架设置自定义字段的值?

    wcf - 对 WCF 请求进行排队以便一次仅处理一个请求的最佳方法