docs(business): explain Kingdee env variables

Expand the generated kingdee.env template with per-variable purpose and requiredness notes, including the direct access token testing option. Cover the generated guidance with Kingdee API tests.

Validation: python3 -m unittest discover -v; python3 -m compileall obsidian_wiki tests; git diff --check.
This commit is contained in:
Codex
2026-07-06 19:55:12 +00:00
parent 5f257a7ccb
commit 451a39c30a
2 changed files with 52 additions and 5 deletions
+48 -5
View File
@@ -25,24 +25,67 @@ TOKEN_SKEW_SECONDS = 60
Urlopen = Callable[[urllib.request.Request], Any] Urlopen = Callable[[urllib.request.Request], Any]
KINGDEE_CONFIG_TEMPLATE = f"""# Kingdee sales order API configuration. KINGDEE_CONFIG_TEMPLATE = f"""# 金蝶销售订单 API 本地配置。
# This file is local-only; .runtime/ is ignored by git. # 这个文件只保存在本机;.runtime/ 已被 git 忽略,请不要提交密钥或 token。
# 变量:KINGDEE_SALORDER_API_URL
# 用途:查询销售订单 API 地址。
# 是否必填:可选,默认已是当前项目使用的官方 querySalOrder 接口。
KINGDEE_SALORDER_API_URL={DEFAULT_SALORDER_API_URL} KINGDEE_SALORDER_API_URL={DEFAULT_SALORDER_API_URL}
# Token endpoint details from your Kingdee OpenAPI app. # 变量:KINGDEE_ACCESS_TOKEN
# 用途:直接指定 access token,绕过自动登录/刷新流程。
# 是否必填:可选,手动测试用;长期定时同步建议使用自动登录配置。
KINGDEE_ACCESS_TOKEN=
# 变量:KINGDEE_TOKEN_URL
# 用途:获取 access token 的登录/token 接口地址。
# 是否必填:自动登录时必填;如果只填 KINGDEE_ACCESS_TOKEN,则不用填。
KINGDEE_TOKEN_URL= KINGDEE_TOKEN_URL=
# 变量:KINGDEE_TOKEN_BODY_JSON
# 用途:调用登录/token 接口时发送的 JSON 请求体,例如 app key、app secret、租户等。
# 是否必填:自动登录时必填;必须是一行合法 JSON。
KINGDEE_TOKEN_BODY_JSON= KINGDEE_TOKEN_BODY_JSON=
# 变量:KINGDEE_TOKEN_HEADERS_JSON
# 用途:调用登录/token 接口时额外发送的请求头。
# 是否必填:可选;没有额外 header 时保持 {{}}。
KINGDEE_TOKEN_HEADERS_JSON={{}} KINGDEE_TOKEN_HEADERS_JSON={{}}
# 变量:KINGDEE_TOKEN_FIELD
# 用途:从 token 接口返回 JSON 中读取 access token 的字段路径。
# 是否必填:可选,默认从 data.access_token 读取。
KINGDEE_TOKEN_FIELD=data.access_token KINGDEE_TOKEN_FIELD=data.access_token
# 变量:KINGDEE_TOKEN_EXPIRES_IN_FIELD
# 用途:从 token 接口返回 JSON 中读取有效期秒数的字段路径。
# 是否必填:可选,默认从 data.expires_in 读取;读不到时按 3600 秒处理。
KINGDEE_TOKEN_EXPIRES_IN_FIELD=data.expires_in KINGDEE_TOKEN_EXPIRES_IN_FIELD=data.expires_in
# 变量:KINGDEE_REFRESH_TOKEN_FIELD
# 用途:从 token 接口返回 JSON 中读取 refresh token 的字段路径。
# 是否必填:可选;只有配置 refresh 流程时才有用。
KINGDEE_REFRESH_TOKEN_FIELD=data.refresh_token KINGDEE_REFRESH_TOKEN_FIELD=data.refresh_token
# Optional refresh endpoint. Use {{refresh_token}} in the JSON body template. # 变量:KINGDEE_REFRESH_URL
# 用途:refresh token 接口地址。
# 是否必填:可选;不填时 token 过期会重新调用 KINGDEE_TOKEN_URL。
KINGDEE_REFRESH_URL= KINGDEE_REFRESH_URL=
# 变量:KINGDEE_REFRESH_BODY_JSON
# 用途:调用 refresh 接口时发送的 JSON 请求体;可使用 {{refresh_token}} 占位符。
# 是否必填:可选;填写 KINGDEE_REFRESH_URL 时通常需要填写。
KINGDEE_REFRESH_BODY_JSON= KINGDEE_REFRESH_BODY_JSON=
# Required by the sales order API. # 变量:KINGDEE_ACGW_IDENTITY
# 用途:销售订单 API 要求的 x-acgw-identity 请求头。
# 是否必填:必填;不填无法调用销售订单查询 API。
KINGDEE_ACGW_IDENTITY= KINGDEE_ACGW_IDENTITY=
# 变量:KINGDEE_PAGE_SIZE
# 用途:销售订单 API 分页大小,对应请求体 pageSize。
# 是否必填:可选,默认 100。
KINGDEE_PAGE_SIZE={DEFAULT_PAGE_SIZE} KINGDEE_PAGE_SIZE={DEFAULT_PAGE_SIZE}
""" """
+4
View File
@@ -63,6 +63,10 @@ class KingdeeApiTests(unittest.TestCase):
self.assertIn(f"KINGDEE_SALORDER_API_URL={DEFAULT_SALORDER_API_URL}", text) self.assertIn(f"KINGDEE_SALORDER_API_URL={DEFAULT_SALORDER_API_URL}", text)
self.assertIn("KINGDEE_TOKEN_BODY_JSON=", text) self.assertIn("KINGDEE_TOKEN_BODY_JSON=", text)
self.assertIn("KINGDEE_TOKEN_URL=https://token.example", text) self.assertIn("KINGDEE_TOKEN_URL=https://token.example", text)
self.assertIn("是否必填:自动登录时必填;如果只填 KINGDEE_ACCESS_TOKEN,则不用填。", text)
self.assertIn("用途:销售订单 API 要求的 x-acgw-identity 请求头。", text)
self.assertIn("是否必填:可选,手动测试用;长期定时同步建议使用自动登录配置。", text)
self.assertIn("是否必填:可选,默认从 data.access_token 读取。", text)
def test_default_config_path_accepts_none(self): def test_default_config_path_accepts_none(self):
cwd = Path.cwd() cwd = Path.cwd()