QuickBooks Send Invoice 節點拋出「無法設定 undefined 的屬性(設定 'Content-Type')」錯誤

目前行為

QuickBooks「傳送發票」節點在傳送請求前失敗。

錯誤:

TypeError: Cannot set properties of undefined (setting ‘Content-Type’)

堆棧追蹤:

TypeError: Cannot set properties of undefined (setting ‘Content-Type’)
at ExecuteContext.quickBooksApiRequest
(…/nodes/QuickBooks/GenericFunctions.ts:70:35)

預期行為

該節點應使用 QuickBooks API 成功傳送發票。

重現步驟

  1. 建立發票。
  2. 新增 QuickBooks「傳送發票」節點。
  3. 提供有效的發票 ID。
  4. 提供有效的電子郵件地址。
  5. 執行節點。

環境

  • n8n 版本:2.29.9
  • 部署:自託管
  • 二進制數據模式:filesystem

其他資訊

  • 在本機和自託管執行個體上都發生相同錯誤。
  • 硬編碼的發票 ID 和電子郵件會產生相同的錯誤。
  • 失敗發生在請求到達 QuickBooks 之前。
  • QuickBooks API 文件為此端點指定 Content-Type: application/octet-stream。

@ankitsingh3112 歡迎!
那個堆疊追蹤落在節點自身的代碼中(quickBooksApiRequest 在 GenericFunctions.ts:70),它在一個未定義的標頭物件上設定 Content-Type,所以「傳送發票」在任何請求離開 n8n 之前就會拋出錯誤。這是節點中的錯誤,不是你的設定問題,這就是為什麼硬編碼的 ID 和兩個實例都以相同方式失敗。

在修復前,可以使用 HTTP Request 節點並使用你的 QuickBooks Online OAuth2 憑證(Authentication: Predefined Credential Type)繞過該操作。向傳送端點發送一個空的主體,附上 octet-stream 標頭,在 URL 中放入你的公司(realm)ID、發票 ID 和收件人:

POST https://quickbooks.api.intuit.com/v3/company/{realmId}/invoice/{invoiceId}/send?sendTo={email}
Header  Content-Type: application/octet-stream

如果該呼叫返回 401,那是 HTTP Request 節點上的 QBO 憑證的一個單獨已知問題,不是這個端點:

值得記錄該節點錯誤以便它能夠被修復:

@ankitsingh3112 嘿!如果你在 HTTP Request 節點上使用預定義的 QBO 認證時遇到 401 授權失敗,這是因為 n8n 對自訂 HTTP 模組的令牌重新整理流程處理不正確。

繞過 401 的快速方法是在 HTTP Request 節點內使用 Generic OAuth2 認證,而不是預定義的 QBO 認證。

將授權 URL 設定為:
https://appcenter.intuit.com/connect/oauth2

並將存取令牌 URL 設定為:
https://oauth.platform.intuit.com/oauth2/v1/tokens/bearer

然後輸入你的 QBO 用戶端 ID 和密鑰。一旦以這種方式授權,對 /send 端點的 POST 請求每次都會成功進行身份驗證。如果你在設定自訂 OAuth2 參數時遇到問題,請告訴我!

我們已經查看過這個問題,看起來可能已在最近的版本中修復。請進行更新,看看您是否仍然遇到同樣的問題。

感謝你的說明。這類錯誤看起來像是設定問題時可能會令人困惑,所以有根本原因的解釋會讓排查問題變得容易得多。