TF Fiscal

平台与集成

SSO 单点登录

2 个接口

基础 URL(生产)
https://api.tffiscal.com
认证
Headers: sign, timestamp, token
票据有效期
60 秒 — 一次性使用

SSO(单点登录)允许您的 ERP 为用户生成直接访问 TFiscal 的链接,用户无需输入凭据即可以所选语言自动登录到相应的公司。

工作原理:
  • ERP 调用 POST /api/sso/create_ticket 并发送公司令牌。
  • TFiscal 返回一个包含一次性不透明票据的 redirectUrl。
  • ERP 将用户浏览器重定向到该 URL。
  • 页面消费票据后,用户自动登录到公司面板。
⚠️ 安全: 真实的公司令牌永远不会出现在 URL 中。仅将短期票据(有效期 60 秒,一次性)暴露给浏览器。
POST/api/sso/create_ticket

生成自动登录链接

生成一个一次性票据,可在 60 秒内使用,将用户自动登录到与该令牌对应的公司面板。

必需的 Headers

Header类型描述
tokenstring公司令牌(与开具 NF-e 使用的相同)
signstringMD5 签名:MD5(token + path + body + timestamp)
timestampstringUnix 秒级时间戳(5 分钟窗口)

字段

字段必填类型描述
token是string公司令牌(w_company.token)— 与 /api/invoice/create 使用的相同
language否string界面语言:br、en、zh、es、ja、ko。默认:br
page否string登录后的着陆页。接受的值:emitir_nfe。为空或缺失时打开默认面板(/company/kanban)。

响应字段

字段类型描述
successboolean成功生成票据时为 true
ticketstring不透明票据(随机,32 字节 base64url)
redirectUrlstringERP 应将用户浏览器重定向到的完整 URL
expiresInSecondsnumber有效期秒数(始终为 60)
expiresAtstringUTC 过期时间(ISO 8601)

错误响应

消息原因
Token 为必填项body 中未发送 token 字段
无效的 Token令牌与任何已注册的公司不匹配
此令牌绑定了多家公司。请发送您要访问的特定公司令牌。集成商令牌绑定了多家公司 — 请发送具体公司的令牌
Rate limit exceeded同一令牌每分钟调用超过 30 次
POST/api/sso/consume_ticket

兑换登录票据

将 /api/sso/create_ticket 生成的票据兑换为 TFiscal 会话 JWT。此端点由前端(路由 /sso)调用,不需要 sign/timestamp 请求头 — 不透明的票据本身就是凭证。每个票据只能消费一次,60 秒后过期。

Body

字段类型说明
ticket *stringcreate_ticket 返回的票据

* 必填字段。

响应字段

字段类型说明
access_tokenstring会话 JWT(有效期 365 天)。在 TFiscal 调用的 Authorization 请求头中使用
typestring用户类型(user、admin 等)
uidint内部用户 ID
company_idintcreate_ticket 中选择的企业 ID
languagestringcreate_ticket 中选择的语言(始终规范化)
pagestring目标页面(未设置时为空字符串)

错误响应

消息原因
Ticket inválidoBody 中没有 ticket 字段
Ticket inválido ou expirado票据不存在、已被消费或超过 60 秒过期时间
Rate limit exceeded同一 IP 每分钟消费超过 60 次
Sessão inválida关联到该票据的用户不再存在

票据特性

特性值
有效期生成后 60 秒
使用一次性 — 消费后无法重用
速率限制每个令牌每分钟 30 个票据 · 每个 IP 每分钟 60 次消费
存储具有自动 TTL 的 MongoDB — 过期票据自动删除

导航限制

通过 SSO 认证的用户仅有权访问相应公司的页面(/invoice/company/*)。尝试访问其他区域(分销商面板、综合报表、管理)将自动重定向到公司面板。

登录后的会话

在将票据交换为 JWT 后,用户拥有 TFiscal 的正常会话(JWT 有效期 365 天,与传统登录相同)。60 秒仅是生成票据和打开链接之间的时间窗口 — 之后用户将保持正常登录直到注销。

⚠️ 重要: create_ticket 必须由 ERP 仅在服务器端调用。切勿直接从浏览器调用此端点 — 这会在前端暴露公司令牌。