如何为 Xero 构建自定义 Zapier 集成

How to build custom Zapier integration for Xero

我正在尝试在 zapier 中构建我自己的集成,这将允许我在 Xero 中创建引号(目前本机不支持的功能)。我一直在使用这个 and this reference 来帮助我。

我已经到了创建动作并使用测试数据对其进行测试的地步。不幸的是,我得到的响应是 "Got 400 calling POST https://identity.xero.com/connect/token, expected 2xx." 也许我发送的 json 数据不正确。我试过使用 'pretty' 和 'raw' 发送数据的方式:

zapier "expert" 可以帮我解决这个问题吗?也许通过创建自己的 xero 集成?

编辑

不确定是否有必要,但屏蔽了 ID。虽然我现在看到我没有为第一个 post 中的 contactID 这样做哈哈...

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

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

XERO

  1. 创建帐户
  2. 创建 Xero App 并将 Zapier OAuth 重定向 URL 添加到 Xero 重定向部分(来自 'step 2' 上的 'Zapier Dev' 应用)。

ZAPIER

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

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

  5. 刷新令牌('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 是否正确,并确保您的 Headers 符合 xero 的要求(请参阅底部的 link)。

  6. 添加名为 createQuote 的操作

    -添加输入联系人ID

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

    -添加输入tenantId

  7. 将 POST 添加到 API 配置 url https://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;
      });
    
  8. 插入测试 contactID、tenantID、lineitems 并进行测试

完成此操作后,您需要创建一个搜索操作来获取 contactID 和 tenantID(如果您希望全部自动化)。如果您遇到问题,我发现 start-up doc 很有用。