用户与客户空间
登录后读取 open_id、union_id 和客户空间。平台自动生成标识和默认个人空间,无需配置用户组或额外申请 API Subscription。
请求
POST ${GOODVISION_API_BASE}/open-platform/v1/user-context:resolve
应用服务端使用当前应用的用户 Access Token 调用,首次请求发送 {}:
bash
curl --request POST \
--url "${GOODVISION_API_BASE}/open-platform/v1/user-context:resolve" \
--header "Authorization: Bearer ${GOODVISION_USER_ACCESS_TOKEN}" \
--header 'Content-Type: application/json' \
--data '{}'| 参数 | 位置 | 必填性 | 说明 |
|---|---|---|---|
Authorization | Header | 🔴 必填 | Bearer <USER_ACCESS_TOKEN>;当前应用的用户 Token,不能使用应用身份 Token |
Content-Type | Header | 🔴 必填 | application/json |
| JSON 请求体 | Body | 🔴 必填 | 首次进入发送 {},无需填写用户或空间 ID |
organization_id | Body | 可选 | 省略时自动准备或复用个人空间;只在用户主动选择已有客户空间时传入,平台重新核验成员关系 |
选择已有空间时发送 {"organization_id":"<SELECTED_CUSTOMER_SPACE_UUID>"}。不传应用、用户或权限字段,也不添加组织 Header 或 Query 参数。
响应
下表均为平台返回的字段,不是开发者需要填写的请求参数。
| 字段 | 用途 |
|---|---|
application_id、environment | 核对是否属于当前应用及环境 |
user.open_id | 当前应用内的用户关联;可以作为应用自己的用户键 |
user.union_id | 同开发者、同环境多个应用中的同一用户关联 |
space.organization_id | 当前客户空间;用于后续业务范围,用户不用填写 |
space.membership_id | 当前用户在该空间的成员关联 |
space.display_name | 空间展示名称;不能按名称判断权限 |
space.kind | personal 为默认个人入口;selected 表示显式选择,不是团队分类 |
resolved_at、expires_at | 解析时间和失效时间,最长五分钟 |
下载响应 JSON Schema。服务端核对响应的应用、环境、当前空间及有效时间,按业务需要重新读取。响应为 no-store;普通输出不包含内部身份 ID 或任何 Secret。
open_id 与 union_id
平台自动生成 OpenID(open_id)与 UnionID(union_id),从响应的 user 中读取:
| 同一用户进入 | open_id | union_id |
|---|---|---|
| 同开发者、同环境的应用 A 与 B | 不同 | 相同 |
| 同一应用,切换客户空间 | 不变 | 不变 |
| 不同开发者或环境 | 隔离 | 隔离 |
应用转移后不自动合并历史用户。用户标识不授予产品或付费权益。
故障恢复
| 状态 | 处理 |
|---|---|
| 400 | 修正请求,只保留可选的客户空间选择 |
| 401 | 重新登录当前应用 |
| 403 | 停止当前空间操作,提示应用或成员关系不可用并确认选择 |
| 503 | 保留已验证登录和原操作,显示重试入口,有界重新读取 |
失效的空间不会自动改成另一个空间。不要把开发者企业当客户范围兜底,也不要因 503 循环重新登录。身份与成员关系不授予产品、付费、额度或平台权限。
成员相关的 oem.access_context.changed.v1 事件用 data.subject_id 对应 space.membership_id;订阅用应用、环境、客户空间和 subscription ID 关联。它们不能与 sub、open_id 或 union_id 互换。详见多应用、用户与事件接入。