SG SettleGen 企业结算云 登录

API 文档

将结算凭证接入您的业务系统 · API v1

概览

SettleGen 开放 API 允许认证企业以自己的主体身份程序化开具结算凭证。所有接口均为 HTTPS JSON API(本演示环境为 HTTP),基础路径为 /api/v1

认证

在工作台「API 密钥」页创建密钥(形如 sk_xxxx,明文仅创建时展示一次)。请求时通过任一方式携带:

X-API-Key: sk_your_api_key
# 或
Authorization: Bearer sk_your_api_key

密钥绑定企业主体;撤销后立即失效。企业处于待审核 / 已驳回状态时接口返回 403 unvalidated_enterprise

开具凭证

POST/api/v1/receipts

开具一张结算凭证。默认返回 JSON(含 PDF base64);加查询参数 ?format=pdf 直接返回 PDF 字节流。

CA 数字签署通道(企业开通后自动启用):若企业已完成 CA 开通,凭证走君子签自动签署: 响应中 receipt.signStatesigningchargedpending_ca_signpdfBase64 为空;签署成功后才扣费(轮询 GET /receipts/{serial}signState=signed 后再取 ?format=pdf,未完成时返回 409 sign_not_ready)。 签署失败用 POST /receipts/{serial}/sign-retry 重试(复用原编号,不重复计费)。

请求示例(curl)

curl -X POST "http://127.0.0.1:4173/api/v1/receipts" \
  -H "X-API-Key: sk_your_api_key" \
  -H "Content-Type: application/json" \
  -d '{
    "customNo": "REC-2026-0042",
    "issueDate": "2026-09-04",
    "buyerName": "上海某某贸易有限公司",
    "buyerTaxId": "91310100MA1EXAMPLE",
    "issuer": "李开票",
    "remark": "2026 年 Q3 服务费",
    "items": [
      { "name": "技术服务费", "unit": "次", "quantity": "1", "unitPrice": "20000" }
    ]
  }'

响应(201)

{
  "receipt": {
    "serial": "SG20260904000007",
    "customNo": "REC-2026-0042",
    "status": "active",
    "signChannel": "local",   // local=平台电子印章(同步完成);junziqian=CA 数字签署(异步)
    "signState": "signed",    // signing / signed / failed / charge_pending
    "applyNo": "",            // CA 通道的君子签签署流水号
    "buyerName": "上海某某贸易有限公司",
    "amountTotal": 20000,
    "issueDate": "2026-09-04",
    "issuedVia": "api",
    "verifyUrl": "http://127.0.0.1:4173/verify?no=SG20260904000007",
    "sha256": "…"
  },
  "charged": "free",          // free=本月免费额度;credits=充值额度扣 1 张;pending_ca_sign=CA 签署成功后扣费
  "balanceAfter": 200,
  "freeRemaining": 5,
  "pdfBase64": "JVBERi0xLjcK…"
}

Node.js 示例

const response = await fetch(`${BASE_URL}/api/v1/receipts`, {
  method: "POST",
  headers: { "X-API-Key": process.env.SETTLEGEN_KEY, "Content-Type": "application/json" },
  body: JSON.stringify({
    issueDate: "2026-09-04",
    buyerName: "上海某某贸易有限公司",
    items: [{ name: "技术服务费", quantity: "1", unitPrice: "20000" }],
  }),
});
const result = await response.json();
fs.writeFileSync(`${result.receipt.serial}.pdf`, Buffer.from(result.pdfBase64, "base64"));

凭证字段说明

字段类型必填说明
templatestring票据风格:classic(默认,传统票据 · 行业通用版式)、modern(现代商务蓝)或 red(红色收据 · 参考件原样版式)。非法值回退默认。
customNostring外部单号,1-24 位字母 / 数字 / 连字符,企业内唯一;留空时凭证面打印系统编号。
issueDatestring开具日期 YYYY-MM-DD,默认当天。
buyerNamestring购买方单位名称,≤60 字。
buyerTaxIdstring购买方统一社会信用代码,≤24 字。
issuerstring开票人姓名,≤18 字。
remarkstring备注,≤180 字,打印在凭证备注栏。
itemsarray结算项目,1-6 项,至少一项有名称。
items[].namestring项目名称(至少一项非空)。
items[].spec / unitstring规格型号、单位。
items[].quantity / unitPricestring数量、单价;金额留空时按 数量 × 单价 自动计算。
items[].amountstring显式金额(字符串数字,避免浮点误差)。
autoUppercaseboolean默认 true 自动生成大写金额;false 时使用 uppercaseOverride
uppercaseOverridestring自定义大写金额,≤42 字。
sealTextstring印章类型:财务专用章 / 结算专用章 / 收款专用章,默认取企业认证时配置的类型。

忽略字段:请求中的 sellerName / sellerTaxId / stamp.* / qr.* / footerText 等身份字段一律被服务端覆写为认证主体与平台查验文案,提交不生效。

批量开具

POST/api/v1/receipts/batch

两种请求体:{"items": [凭证对象, …]}(最多 50 个),或 {"csv": "表格文本"}(与网页批量模板同格式)。逐张独立成败,额度不足时中断剩余行。

curl -X POST "http://127.0.0.1:4173/api/v1/receipts/batch" \
  -H "X-API-Key: sk_your_api_key" \
  -H "Content-Type: application/json" \
  -d '{
    "items": [
      { "buyerName": "北京某某科技有限公司", "items": [{ "name": "服务费", "amount": "8000" }] },
      { "buyerName": "广州某某设计工作室", "items": [{ "name": "设计费", "amount": "5600" }] }
    ]
  }'

响应(200,节选)

{
  "issued":  [ { "index": 1, "serial": "SG20260904000008", "amountTotal": 8000, "charged": "free" } ],
  "failures": [ { "index": 2, "code": "validation_failed", "message": "…" } ],
  "zipBase64": "UEsDBBQ…",   // 已开具 PDF 的 ZIP 包
  "balanceAfter": 199,
  "freeRemaining": 4
}

查询与作废

GET/api/v1/receipts

分页查询本企业凭证:?offset=0&limit=20

GET/api/v1/receipts/{serial}

查询单张详情(含完整打印数据 payload);?format=pdf 直接下载 PDF(CA 签署中返回 409 sign_not_ready,轮询至 signState=signed 后再取)。仅能访问本企业的凭证。

POST/api/v1/receipts/{serial}/sign-retry

CA 签署失败后重试:复用原凭证编号重新提交君子签签署,成功前不计费。仅 signState=failed 的凭证可调用。

POST/api/v1/receipts/{serial}/void

作废凭证,请求体 {"reason": "开具有误"}。作废后查验页显示「已作废」,额度不退还;CA 签署中的凭证需等待签署完成或失败后才能作废(409 sign_in_progress)。带 CA 签名的已签文件物理上不可撤回,作废为平台状态标记。

账户与用量

GET/api/v1/account

返回企业信息、充值额度余额、当月免费剩余与价格配置。

GET/api/v1/account/usage?month=2026-09

返回指定账期(默认当月)的计费流水与汇总。

Python 示例

import os, requests

BASE = "http://127.0.0.1:4173"
headers = {"X-API-Key": os.environ["SETTLEGEN_KEY"]}

account = requests.get(f"{BASE}/api/v1/account", headers=headers).json()
print(account["balance"], account["freeRemaining"])

错误码

所有错误返回统一信封:{"error": {"code": "…", "message": "…", "issues": [{"field": "…", "message": "…"}]}}

HTTPcode说明
400validation_failed凭证数据校验未通过,issues 给出逐字段问题。
400invalid_json请求体不是有效 JSON。
401unauthorized缺少 / 错误 / 已撤销的 API 密钥。
402insufficient_balance免费与充值额度均不足,请充值后重试。
403unvalidated_enterprise企业主体未通过认证审核。
404not_found凭证或资源不存在(或不属于本企业)。
409sign_not_readyCA 签署尚未完成(或失败 / 待扣费),暂不能下载 PDF。
409sign_in_progress凭证正在 CA 签署中,暂不能作废。
413payload_too_large请求体超过 10MB。
429rate_limited超出限流,响应头含 Retry-After
500server_error服务器内部错误(已记录日志)。

限流与计费