保利威文档中心

幫助中心

線上續費開票介面

更新時間:2026-07-23 15:10:32

本文件包含線上續費流程中供前端使用的五個開票介面:開票抬頭查詢、開票申請提交、單訂單及批量開票進度查詢和電子發票下載。

通用約定

  • 介面前綴:/v3/console/package-renewal-order
  • 介面需要使用控制台現有的登入態呼叫。使用者身份和訂單歸屬由服務端從登入態取得,無需且不能在請求中傳入 unionId
  • POST 請求的 Content-Typeapplication/json
  • 成功回應統一為:{ "code": 200, "status": "success", "data": ... }
  • 失敗回應的 statuserror,錯誤詳情位於 error.codeerror.desc。前端應使用 status === "success" 判斷業務成功。

訂單列表開票資格欄位

GET /v3/console/package-renewal-order/list 的每個訂單項新增以下欄位:

欄位 類型 說明
canApplyInvoice Boolean 是否可申請線上發票。僅當訂單為 live_console 線上續費訂單、支付狀態為支付成功,且建立時間不早於 ONLINE_INVOICE_LAUNCH_AT 配置的上線時間時為 true
invoiceApplicationStatus String 當前發票申請狀態。canApplyInvoice=false 時為 null;可開票但未申請時為 NOT_APPLIED;已申請時為 PROCESSING(處理中)、ISSUED(已開票)或 FAILED(申請失敗)。

前端僅對 canApplyInvoice=true 的訂單處理發票入口:NOT_APPLIED 顯示「申請開票」,ISSUED 顯示「下載發票」,其餘狀態展示申請進度。批量查詢介面可用於局部刷新狀態。

服務端狀態同步

客戶提交申請後,申請狀態先為 PROCESSING。支付服務會按 ONLINE_INVOICE_POLL_INTERVAL_SECONDS 配置週期輪詢 PCS/CRM,並將 ISSUEDFAILED、發票號碼、PDF 位址和失敗原因寫回申請表;終態不再輪詢。輪詢採用資料庫租約,避免多實例重複更新同一申請。前端不需要依賴頁面刷新來推進狀態。

1. 查詢歷史開票抬頭

按公司名稱查詢 CRM 中已有的開票抬頭,用於自動回填納稅人識別號。未查詢到記錄時返回空陣列,不代表請求失敗。

請求

GET /v3/console/package-renewal-order/invoice-title

參數 位置 類型 必填 說明
companyName Query String 公司名稱;按完整名稱查詢。

請求範例:

GET /v3/console/package-renewal-order/invoice-title?companyName=广州保利云科技有限公司

回應資料

data 為陣列:

欄位 類型 說明
companyName String 開票抬頭(公司名稱)。
taxpayerId String 納稅人識別號。

回應範例:

{
  "code": 200,
  "status": "success",
  "data": [
    {
      "companyName": "广州保利云科技有限公司",
      "taxpayerId": "91440101MA5XXXXXXX"
    }
  ]
}

前端建議在使用者完成公司名稱輸入後呼叫;若返回多筆記錄,允許使用者選擇對應的納稅人識別號。

2. 提交開票申請

為當前登入使用者的線上續費訂單提交電子發票申請。服務端會校驗訂單歸屬及可開票條件,並對同一訂單的重複提交進行冪等處理。

請求

POST /v3/console/package-renewal-order/invoice-application

請求體欄位:

欄位 類型 必填 說明
orderId String 線上續費訂單 ID。
invoiceType String 發票類型:VAT_SPECIAL(增值稅專用發票)或 VAT_NORMAL(增值稅普通發票)。
companyName String 開票抬頭(公司名稱),不能為空。
taxpayerId String 納稅人識別號,不能為空。

請求範例:

{
  "orderId": "renewal_order_123456",
  "invoiceType": "VAT_NORMAL",
  "companyName": "广州保利云科技有限公司",
  "taxpayerId": "91440101MA5XXXXXXX"
}

回應資料

data 為開票申請資訊:

欄位 類型 說明
orderId String 續費訂單 ID。
requestNo String 開票申請流水號,用於關聯本次申請。
invoiceType String 發票類型,取值同請求參數。
companyName String 開票抬頭。
taxpayerId String 納稅人識別號。
amountCent Long 開票金額,單位為分;展示金額需除以 100
status Integer 開票狀態碼;狀態列舉以服務端回傳為準。
statusName String 開票狀態名稱,前端可直接用於展示。
invoiceApplicationStatus String 與訂單列表一致的狀態列舉:NOT_APPLIEDPROCESSINGISSUEDFAILED。有申請記錄時不會回傳 NOT_APPLIED
invoiceNo String 發票號碼;未開票時可能為空。
pdfUrl String 電子發票 PDF 位址;未開票時可能為空。
failureReason String 開票失敗原因;僅失敗時可能回傳。

回應範例:

{
  "code": 200,
  "status": "success",
  "data": {
    "orderId": "renewal_order_123456",
    "requestNo": "invoice_request_123456",
    "invoiceType": "VAT_NORMAL",
    "companyName": "广州保利云科技有限公司",
    "taxpayerId": "91440101MA5XXXXXXX",
    "amountCent": 99800
  }
}

範例僅展示核心欄位;實際回應會按上表回傳開票狀態及發票資訊。提交前應禁用重複點擊;即使因網路重試重複提交,服務端也會按訂單處理冪等。申請提交成功僅表示申請已受理。

3. 查詢開票進度

查詢當前登入使用者指定續費訂單的開票申請狀態。介面會同步 CRM 中的最新狀態,適合在申請提交後或訂單詳情頁刷新時呼叫。

請求

GET /v3/console/package-renewal-order/invoice-application

參數 位置 類型 必填 說明
orderId Query String 線上續費訂單 ID。

請求範例:

GET /v3/console/package-renewal-order/invoice-application?orderId=renewal_order_123456

回應資料

data 的完整欄位與第 2 節「提交開票申請」的回應資料一致。重點關注以下欄位:

欄位 類型 說明
status Integer 開票狀態碼;狀態列舉以服務端回傳為準。
statusName String 開票狀態名稱,可直接用於頁面展示。
invoiceApplicationStatus String 與訂單列表一致的申請狀態:未申請時為 NOT_APPLIED,已申請時為 PROCESSINGISSUEDFAILED
invoiceNo String 已開票時回傳發票號碼。
pdfUrl String 已產生電子發票時回傳 PDF 位址。
failureReason String 開票失敗時回傳失敗原因。

回應範例:

{
  "code": 200,
  "status": "success",
  "data": {
    "orderId": "renewal_order_123456",
    "requestNo": "invoice_request_123456",
    "statusName": "开票中",
    "invoiceApplicationStatus": "PROCESSING"
  }
}

訂單尚未申請時,介面回傳:

{
  "code": 200,
  "status": "success",
  "data": {
    "orderId": "renewal_order_123456",
    "invoiceApplicationStatus": "NOT_APPLIED"
  }
}

4. 批量查詢開票進度

用於訂單列表批量判斷操作項。介面僅接受當前登入使用者的、已支付且支援線上開票的續費訂單;任一訂單不滿足條件時,整個請求回傳業務失敗。

請求

POST /v3/console/package-renewal-order/invoice-application/batch

請求體欄位:

欄位 類型 必填 說明
orderIds String[] 訂單 ID 列表,不能為空,單次最多 100 個;重複 ID 會自動去重。

請求範例:

{
  "orderIds": [
    "renewal_order_123456",
    "renewal_order_654321"
  ]
}

回應資料

data 為以訂單 ID 為鍵的物件。每個值均含有 invoiceApplicationStatus,其取值與訂單列表欄位一致;未申請的訂單僅回傳 orderIdinvoiceApplicationStatus=NOT_APPLIED

{
  "code": 200,
  "status": "success",
  "data": {
    "renewal_order_123456": {
      "orderId": "renewal_order_123456",
      "statusName": "已开票",
      "invoiceApplicationStatus": "ISSUED",
      "invoiceNo": "1234567890",
      "pdfUrl": "https://example.com/invoices/invoice_request_123456.pdf"
    },
    "renewal_order_654321": {
      "orderId": "renewal_order_654321",
      "invoiceApplicationStatus": "NOT_APPLIED"
    }
  }
}

訂單列表展示規則:invoiceApplicationStatus=NOT_APPLIED 時顯示「申請開票」;ISSUED 時顯示「下載發票」;其他狀態展示申請進度。不要使用 status 數值做前端分支。

5. 取得電子發票 PDF 下載位址

取得當前登入使用者已開票續費訂單的電子發票 PDF 位址。訂單尚未開票時,服務端會回傳業務失敗回應。

請求

GET /v3/console/package-renewal-order/invoice-download

參數 位置 類型 必填 說明
orderId Query String 線上續費訂單 ID。

請求範例:

GET /v3/console/package-renewal-order/invoice-download?orderId=renewal_order_123456

回應資料

data 的完整欄位與第 2 節「提交開票申請」的回應資料一致,其中 pdfUrl 為本介面的核心欄位。前端取得 pdfUrl 後可在新視窗開啟或按現有下載策略處理。

回應範例:

{
  "code": 200,
  "status": "success",
  "data": {
    "orderId": "renewal_order_123456",
    "requestNo": "invoice_request_123456",
    "invoiceNo": "1234567890",
    "pdfUrl": "https://example.com/invoices/invoice_request_123456.pdf"
  }
}

推薦呼叫順序

  1. 使用者填寫公司名稱後,呼叫「查詢歷史開票抬頭」回填或選擇納稅人識別號。
  2. 使用者確認開票資訊後,呼叫「提交開票申請」。
  3. 在訂單列表呼叫「批量查詢開票進度」;在訂單詳情頁或申請結果頁呼叫「查詢開票進度」,並依據 statusNamefailureReason 展示狀態。
  4. 已開票後呼叫「取得電子發票 PDF 下載位址」,使用回傳的 pdfUrl 下載或預覽發票。
联系客服,在线咨询