ioSat · 开放平台

open.iosat.com.cn · ERP 接口顾问

结构化、Agent 友好的 ERP 开放接口规范库。我们提供协议 / 鉴权 / 请求体 / 响应 / 错误码 / 实战 tips,帮你直接连各家 ERP OPEN API 取数——不代查数据,不托管凭证。

模式 A · 规范 / 知识即服务
4条规范
1家厂商
HTTPSREST / JSON
畅捷通 T+ / T+Cloud

授权绑定(获取 openToken)

chanjet.authorize

HTTPS GET + POST v1.0.0

接口地址

https://openapi.chanjet.com/account/auth/getAuthUrl / token / refresh

鉴权方式

OAuth2 式授权码流程

获取 openToken 后才能调业务接口(库存/报表/仓库)

请求头

  • appKey 必填 — 开放平台应用ID
  • appSecret 必填 — 开放平台应用密钥

请求体说明

  • 第1步:拼接授权页 URL,用户登录后厂商回跳 redirect_uri?code=xxx
  • 第2步:用 code 换 openToken(含 refresh_token 与 user_auth_permanent_code)
  • user_auth_permanent_code 务必持久化:openToken 约 2h 过期,过期后用它换发,无需用户重登

请求示例

1) 拼接授权 URL → 浏览器打开 → 用户登录
2) 回跳 https://your-app/callback?code=AUTH_CODE
3) POST /token  { grant_type:'authorization_code', code:'AUTH_CODE', appKey:'h8fP2Fq0' }
   → { openToken, refresh_token, user_auth_permanent_code }

响应示例

{
  "openToken": "user_auth_token_xxx",
  "refresh_token": "refresh_xxx",
  "user_auth_permanent_code": "permanent_xxx"
}

字段说明

  • openToken string — 用户授权令牌(业务接口用)
  • refresh_token string — 刷新令牌
  • user_auth_permanent_code string — 永久码,过期换发用,必须持久化

错误码

  • 404 on refresh refresh_token 失效/未持久化 permanentCode → 引导用户重新授权绑定
  • invalid_client appKey/appSecret 不匹配 → 检查开放平台应用凭证

实战 tips

  • 最关键坑:user_auth_permanent_code 必须落盘,否则 2h 后只能让用户重绑
  • redirect_uri 必须在畅捷通开放平台白名单内
官方文档 ↗
畅捷通 T+ / T+Cloud

报表查询

chanjet.report_query

HTTPS POST v1.0.0

接口地址

https://openapi.chanjet.com/tplus/api/v2/reportQuery/GetReportData

鉴权方式

openToken + appKey/appSecret(同库存查询)

所有报表(含单据明细)都走同一端点,靠 request.ReportName 区分

请求头

  • appKey 必填 — 开放平台应用ID
  • appSecret 必填 — 开放平台应用密钥
  • openToken 必填 — 用户授权令牌

请求体说明

  • 整包必须再包一层 request 对象
  • 日期区间用 BeginDefault / EndDefault(不是 BeginValue/EndValue)
  • ReportName 是账户特定的内部码:在 T+ 打开报表按 Ctrl+右键'查看框架源代码',链接里的 ReportName 即真实码

请求示例

POST https://openapi.chanjet.com/tplus/api/v2/reportQuery/GetReportData
Headers:
  appKey: h8fP2Fq0
  appSecret: A919E07C...
  openToken: user_auth_token_xxx
Body:
{
  "request": {
    "ReportName": "SA_SaleDeliveryDetailRpt",
    "PageIndex": 1,
    "PageSize": 50,
    "SearchItems": [{"ColumnName":"InvoiceDate","BeginDefault":"2026-01-01","EndDefault":"2026-07-24"}]
  }
}

响应示例

{
  "DataSource": { "Rows": [ { "Code":"XS-001", "InventoryName":"电脑", "Quantity":100, "WarehouseName":"汉南仓" } ] },
  "ColumnSource": { "Rows": [ {"FieldName":"Code","Title":"单据号"} ] },
  "TotalRecords": 4
}

字段说明

  • DataSource.Rows array — 数据行数组
  • ColumnSource.Rows array — 列定义(FieldName/Title)
  • TotalRecords number — 总记录数

错误码

  • EXSV0011 服务名称不正确 → 确认端点为 reportQuery/GetReportData 且 Body 包在 request 内
  • 0 行 0 列 ReportName 不匹配该账户 → 到 T+ 取真实 ReportName 内部码

实战 tips

  • 不要误用 reportQuery/GetReportData 之外的端点(如 SAReportQuery/*),会报 EXSV0011
  • 好业财(cloud/chanjetcc/zplus) 无报表 API,请改用 T+ 账户
官方文档 ↗
畅捷通 T+ / T+Cloud

库存查询

chanjet.stock_query

HTTPS POST v1.0.0

接口地址

https://openapi.chanjet.com/tplus/api/v2/currentStock/Query

鉴权方式

openToken(用户授权令牌)+ appKey/appSecret(应用凭证,放 Header)

openToken 由授权流程获取,见 chanjet.authorize;appKey/appSecret 为畅捷通开放平台应用凭证

请求头

  • appKey 必填 — 开放平台应用ID
  • appSecret 必填 — 开放平台应用密钥
  • openToken 必填 — 用户授权令牌

请求体说明

  • 请求体必须包裹在 param 对象内,不能直接用扁平字段 InventoryCode/WarehouseCode(会查空)
  • 不传 Inventory / Warehouse 则查全量
  • 按名称口语查询时(如'电脑'),建议先拉全量再在本地按名称/编码/条码过滤

请求示例

POST https://openapi.chanjet.com/tplus/api/v2/currentStock/Query
Headers:
  appKey: h8fP2Fq0
  appSecret: A919E07C...
  openToken: user_auth_token_xxx
Body:
{
  "param": {
    "PageIndex": 1,
    "PageSize": 50,
    "Inventory": [{"Code": "001"}],
    "Warehouse": [{"Code": "01"}]
  }
}

响应示例

[
  {
    "InventoryCode": "001",
    "InventoryName": "电脑",
    "WarehouseName": "汉南仓",
    "ExistingQuantity": 195.0000,
    "UnitName": "台"
  }
]

字段说明

  • InventoryCode string — 商品编码
  • InventoryName string — 商品名称
  • WarehouseName string — 仓库名称
  • ExistingQuantity number — 现存数量(注意带长小数如 195.0000,需清洗)
  • UnitName string — 计量单位

错误码

  • EXSV0011 服务名称不正确 → 检查 appKey/appSecret 是否缺失或未随 Header 发送
  • token_expired openToken 失效 → 用 permanentCode 重新换发,或引导用户重新授权
  • 1004 签名无效 → 检查签名算法与时间戳

实战 tips

  • ExistingQuantity 返回如 195.0000,展示前务必清洗掉长小数
  • 口语仓库名('汉南仓')与 ERP 内仓库名可能不一致,建议拉全量后本地模糊匹配
  • T+Cloud 走 T+ API(currentStock/Query),不需要 bookId;好业财(cloud) 才需要账套
官方文档 ↗
畅捷通 T+ / T+Cloud

仓库列表

chanjet.warehouse_list

HTTPS POST v1.0.0

接口地址

https://openapi.chanjet.com/tplus/api/v2/warehouse/Query

鉴权方式

openToken + appKey/appSecret

与库存查询共用鉴权

请求头

  • appKey 必填 — 开放平台应用ID
  • appSecret 必填 — 开放平台应用密钥
  • openToken 必填 — 用户授权令牌

请求体说明

  • 返回当前账户下全部仓库,用于库存查询时映射仓库编码/名称

请求示例

POST https://openapi.chanjet.com/tplus/api/v2/warehouse/Query
Headers:
  appKey: h8fP2Fq0
  appSecret: A919E07C...
  openToken: user_auth_token_xxx
Body:
{ "param": { "PageIndex": 1, "PageSize": 100 } }

响应示例

[
  { "Code": "01", "Name": "汉南仓" },
  { "Code": "02", "Name": "武昌仓" }
]

字段说明

  • Code string — 仓库编码(库存查询 Warehouse[].Code 用此值)
  • Name string — 仓库名称

错误码

  • EXSV0011 服务名称不正确 → 检查 appKey/appSecret 与端点

实战 tips

  • 口语'汉南仓'对应 Name='汉南仓'、Code='01',建议本地建立名称→编码映射
官方文档 ↗