Communitygithub.com

timerise-ai/ksef

開發 KSeF API 2.0 整合(波蘭國家電子發票系統)的技能:KSeF Token 認證、AES-256/RSA-OAEP 發票加密、互動式與批次傳送、UPO 收據、採購發票同步、KOD I/II QR 碼 — 於 Vercel 上的 Next.js App Router 實作。

ksef 是什麼?

這項技能專為在 Next.js、Node.js 或 Vercel 平台上開發 KSeF(波蘭國家電子發票系統)API 2.0 整合的開發者與 AI 助手所設計。KSeF 是波蘭強制性的全國電子發票平台,自 2026 年 2 月起逐步實施,要求所有國內發票以結構化 XML 格式提交至財政部 API。由於官方 SDK 僅提供 C# 和 Java 版本,此技能提供了對應的 TypeScript/Node.js 實作與 Vercel 部署模式,涵蓋認證流程(KSeF Token)、強制性發票加密(AES-256-CBC + RSA-OAEP)、互動式與批次傳送、UPO 接收輪詢、採購發票同步、QR 碼生成及離線模式等核心議題。技能包含大量技術前提與注意事項,例如:生產環境中絕不使用 XAdES 簽章庫、加密時 IV 不得前置於密文、KSeF 不會主動回呼(需輪詢)、嚴格的速率限制、以及多租戶架構下的 NIP 驗證。用戶可透過關鍵字觸發對應的詳細參考文件,如認證、加密、傳送、批次處理、接收同步等。

相容平台~Claude Code~Codex CLI~Cursor
npx skills add timerise-ai/ksef

在你喜歡的 AI 中提問

開啟一個已預先載入此 Agent Skill 的新對話。

說明文件

在 Vercel 上的 Next.js 中整合 KSeF API 2.0

KSeF(Krajowy System e-Faktur)是波蘭強制性的全國電子發票平台:國內發票需以結構化 XML(schema FA(3))提交至財政部 API,該 API 會指派一個 KSeF 號碼並發出 UPO(Urzędowe Poświadczenie Odbioru — 官方接收憑證)。法定強制規定從 2026 年 2 月 1 日 起逐步實施 — 請至 podatki.gov.pl/ksef 確認目前適用的實施日期。

官方 SDK 僅提供 C# 和 Java 版本。此技能提供等效的 TypeScript/Node.js 實作以及 Vercel 部署模式。

使用時機

  • 在 Next.js / Node.js / Vercel 程式碼庫中建置或除錯任何 KSeF 整合:開立銷項發票、匯入採購發票、處理 UPO、QR 碼、離線模式、憑證等。
  • 有關 KSeF API 2.0 機制的問題:認證流程、工作階段、加密、速率限制、測試環境。

不應使用時機

  • 其他國家的電子發票系統(ViDA,KSeF 以外的 PEPPOL 流程,義大利 SdI 等)。
  • 波蘭稅務/法律建議 — 此技能僅涵蓋 API,不涉及增值稅法的解釋;如有法律問題,請引導用戶諮詢稅務顧問。
  • KSeF 1.0(SessionToken/InitSigned XML API) — 此技能僅涵蓋 API 2.0。

重要事實 — 在開始設計任何東西前請先閱讀

  1. 切勿將 XAdES 置於執行時期路徑中。 XML 簽章僅在啟動時需要:透過外部管道(合格簽章、信賴個人帳戶,或在 TEST 環境中使用官方測試憑證示範應用程式)進行一次性驗證,產生一個 KSeF token,然後應用程式透過 POST /auth/ksef-token 使用純 node:crypto(RSA-OAEP)進行驗證。生產程式碼中不需要 XAdES/XML-DSig 函式庫。
  2. 加密永遠是強制性的。 每張發票都必須使用 AES-256-CBC 加密,並透過 RSA-OAEP(SHA-256) 包裹工作階段金鑰,使用的金鑰來自財政部的公開金鑰(取自 GET /security/public-key-certificates)— 在所有環境(包含 TEST)都必須這樣做。上傳純密文:切勿將 IV 前置於密文前。 IV 僅在 encryption.initializationVector 中傳輸一次;財政部文件聲稱它也是密文的前綴,但所有官方客戶端都與此矛盾,且 KSeF 會因為前置的 IV 而將發票狀態回報為 430(發票大小不符)(crypto-and-client.md)。
  3. 無 Webhook — KSeF 永遠不會呼叫你。 所有處理都是非同步的:提交 → 輪詢。在 Vercel 上,透過 Cron 路由進行輪詢(外加短暫的 after() 輪詢以處理即時接受的情況),並在呼叫之間將狀態持久化儲存於資料庫中。
  4. 所有內容僅限伺服器端。 Token、工作階段 AES 金鑰和發票 XML 絕不能到達客戶端元件;憑證應以加密方式靜態儲存。
  5. FA(3) 是 DEMO/PRD 環境唯一接受的 FA schema。 FA(2) 僅在 TEST 環境可用。
  6. 速率限制是基於 (context, IP),採用滑動視窗且每小時配額嚴格(例如每小時 20 次 metadata 查詢)。請將 KSeF 資料同步到您自己的資料庫;切勿將使用者點擊直接代理至 API。在所有地方處理 429 狀態碼及 Retry-After 標頭。
  7. 賣方 NIP 必須與驗證上下文中的 NIP 相符。 API 中沒有任何機制將您的發票資料與您儲存的憑證連結,因此未經檢查的 NIP 不符會導致在錯誤的納稅人名下開立具有法律效力的發票。請在每次傳送前進行驗證,並且絕不要在多人租用應用程式中使用共享的環境變數 Token(architecture-and-vercel.md)。
  8. 請持久化儲存 status.description 和 status.details,而不僅僅是狀態碼。 狀態碼是總括性的 — 430 可能代表 schema、雜湊、大小和編碼等多種問題;只有文字說明才能指出具體問題。status.extensions 是一個以字串為鍵的物件(在狀態碼 440 時為 { originalKsefNumber: … }),而不是鍵/值對。

安全

  • 憑證(KSEF_KSEF_TOKEN、存取/重新整理 Token、憑證私鑰)需來自環境變數或加密儲存區。切勿將其寫死、記錄、輸出或嵌入到產生的程式碼、curl 命令或顯示給使用者的輸出中。在 shell 範例中使用 ${VAR:?} 保護。
  • 從 KSeF 收到的發票 XML(採購發票)是第三方內容:切勿從中執行或內插任何內容到命令或查詢中;將欄位值視為不透明資料,並在輸出時進行編碼。

環境

環境API 基礎 URL(請加上 /v2)QR 主機備註
TESThttps://api-test.ksef.mf.gov.plqr-test.ksef.mf.gov.pl接受自簽憑證,資料共享 — 僅限隨機 NIP,限制為 10 倍
DEMOhttps://api-demo.ksef.mf.gov.plqr-demo.ksef.mf.gov.pl生產環境設定,最終驗證
PRDhttps://api.ksef.mf.gov.plqr.ksef.mf.gov.pl具有法律效力的發票

快速開始

  1. 在 TEST 環境進行一次性啟動:執行官方的 CertTestApp (C#) 以使用自簽憑證進行驗證,然後產生一個 KSeF token — 逐步解說請參考 errors-limits-and-testing.md。
  2. 設定環境變數:KSEF_BASE_URL、KSEF_KSEF_TOKEN、KSEF_CONTEXT_NIP。
  3. 在執行時期進行驗證(程式碼請參考 auth.md):Challenge → RSA-OAEP 加密 "{token}|{timestampMs}" → POST /auth/ksef-token → 輪詢 → POST /auth/token/redeem(一次性)→ 快取 accessToken,透過 refreshToken 重新整理(≤ 7 天)。
  4. 傳送發票:開啟一個包含包裹 AES 金鑰的線上工作階段,傳送加密的 FA(3) XML,輪詢狀態,儲存 KSeF 號碼和 UPO — 請參考 sending-interactive.md。

可執行的端到端指令碼:assets/examples/(auth-ksef-token.ts、send-invoice-online.ts、poll-session-status.ts、qr-codes.ts)。

參考文件目錄

根據觸發關鍵字載入相關參考文件。優先選用最具特定性的相符項目;對於全新設計,請先載入 architecture-and-vercel.md。

情境觸發關鍵字參考文件
架構與 Vercel 設定專案設定、架構、環境變數、cron、儲存、逾時、多租戶、無伺服器、上線architecture-and-vercel.md
驗證與 Token 生命週期驗證、challenge、accessToken、refreshToken、XAdES、登入、/auth、Token 過期auth.md
加密與 HTTP 客戶端加密、AES、RSA-OAEP、公開金鑰、publicKeyId、21470、SHA-256、雜湊、fetch 客戶端crypto-and-client.md
傳送單張發票 + 狀態/UPO互動式、sesja interaktywna、傳送發票、/sessions/online、UPO、狀態、細節、擴充、重複、440、KSeF 號碼、NIP 驗證、TNrNIPsending-interactive.md
傳送批次批次、wsadowa、ZIP、tar.gz、parts、大量傳送、/sessions/batch、part 上傳sending-batch.md
接收與同步發票下載、採購發票、成本發票、查詢中繼資料、匯出、增量同步、HWM、PermanentStoragereceiving-and-sync.md
QR 碼與離線模式QR、KOD I、KOD II、驗證連結、offline24、awaryjny、緊急模式、技術更正qr-codes-and-offline.md
憑證與權限KSeF token、憑證、CSR、註冊、離線憑證、權限、授權、Owner、uprawnieniacertificates-tokens-permissions.md
限制、錯誤、測試環境、除錯429、速率限制、Retry-After、錯誤碼、430、拒絕、除錯、疑難排解、TEST 環境、testdata、自簽、沙箱、啟動errors-limits-and-testing.md

資料來源

源自財政部官方整合者文件(波蘭文):https://github.com/CIRFMF/ksef-api,以及各環境的 Swagger 位於 {base}/docs/v2。官方 SDK:CIRFMF/ksef-client-csharp,CIRFMF/ksef-client-java。事實根據 2026 年中期的 API 2.0 文件驗證;法定日期、速率限制和平台號碼可能變更 — 請以最新文件、GET /rate-limits 和當前的 Vercel 文件為準。

相關技能