目前行為
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 成功傳送發票。
重現步驟
- 建立發票。
- 新增 QuickBooks「傳送發票」節點。
- 提供有效的發票 ID。
- 提供有效的電子郵件地址。
- 執行節點。
環境
- 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 參數時遇到問題,請告訴我!
我們已經查看過這個問題,看起來可能已在最近的版本中修復。請進行更新,看看您是否仍然遇到同樣的問題。
感謝你的說明。這類錯誤看起來像是設定問題時可能會令人困惑,所以有根本原因的解釋會讓排查問題變得容易得多。