首页 > 解决方案 > 如何为 Xero 构建自定义 Zapier 集成

问题描述

我正在尝试在 zapier 中构建自己的集成,这将允许我在 Xero 中创建引号(当前本地不支持的功能)。我一直在使用这篇文章这篇参考资料来帮助我。

我已经到了创建动作并使用测试数据对其进行测试的地步。不幸的是,我得到的响应是“得到 400 调用 POST https://identity.xero.com/connect/token,预期为 2xx。” 也许我错误地发送了 json 数据。我尝试过使用“漂亮”和“原始”方式发送数据:

zapier“专家”可以帮助我吗?也许通过创建自己的 xero 集成?

编辑

在此处输入图像描述 在此处输入图像描述 在此处输入图像描述 在此处输入图像描述

不确定是否有必要,但屏蔽了 ID。虽然我现在看到我没有为第一篇文章中的联系人 ID 这样做哈哈...... 在此处输入图像描述

标签: jsonapioauth-2.0zapierxero-api

解决方案


以下是如何完成它,但请记住,您需要执行搜索操作来查找所需 ID 的信息。鉴于您的错误,我认为问题在于您没有应该在标题中定义的tenantId,如下所示:'xero-tenant-id': 'YOURNUMBERHERE'。请参阅下面的第 8 步以将其与您的进行比较。

如果你找不到它,这些是我采取的步骤:

XERO

  1. 创建帐号
  2. 创建Xero 应用并将 Zapier OAuth 重定向 URL 添加到 Xero 重定向部分(来自“步骤 2”中的“Zapier Dev”应用)。

扎皮尔

  1. 在您的开发应用程序中,将来自 xero 的客户端 ID 和密码添加到“Zapier Dev step 3”中的相应部分
  2. 添加 带有 HTTP 标头的POST端点(在“Zapier Dev step 4”中请求) :https://login.xero.com/identity/connect/authorize

    response_type: code
    client_id: {{process.env.CLIENT_ID}}
    redirect_uri: {{bundle.inputData.redirect_uri}}
    state: {{bundle.inputData.state}}
    
  3. 添加范围:openid profile email accounting.transactions

  4. 可以使用以下方法获取刷新令牌('Zapier Dev step 4: Access Token'):

    REFRESH TOKEN: POST https://identity.xero.com/connect/token
    TEST CALL: GET https://api.xero.com/connections
    

    - 保留返回的tenantId 以备后用

    - 测试身份验证。它有效吗?如果是,请继续执行步骤 7。

    - 如果测试失败:检查拼写错误,检查正确的 url 并确保您的标题符合 xero 的要求(请参阅底部的链接)。

  5. 添加名为 createQuote 的操作

    -添加输入联系人ID

    - 添加带有描述标签的输入项目

    -添加输入tenantId

  6. 在 url 添加 POST 到 API Confighttps://api.xero.com/api.xro/2.0/Quotes

    示例 POST:

    const options = {
      url: 'https://api.xero.com/api.xro/2.0/Quotes/',
      method: 'POST',
      headers: {
        'Content-Type': 'application/json',
        'Accept': 'application/json',
        'Authorization': `Bearer ${bundle.authData.access_token}`,
        'xero-tenant-id': bundle.inputData.tenantID
      },
      params: {
      },
      body: {
        "Contact": { 
        "ContactID": bundle.inputData.ContactID
        },
        "Date": "2019-11-29",
        "LineItems": [
        {
          "Description": bundle.inputData.LineItems
        }
        ]
      }
    }
    
    return z.request(options)
      .then((response) => {
        response.throwForStatus();
        const results = z.JSON.parse(response.content);
        return results;
      });
    
  7. 插入测试contactID、tenantID、lineitems并测试出来

完成此操作后,如果您希望全部自动化,您将需要创建一个搜索操作来获取联系人 ID 和租户 ID。如果您有问题,我发现启动文档很有用。


推荐阅读