# 获取用户 OpenID


登录过程中获取豆包身份唯一标识 openID，用于三方自有账号体系的绑定或者注册。用户在智能服务端完成登录授权后，客户端会获取到短期有效的 login_code，服务端使用该 code 换取用户的 open_id。

## 使用限制

- login_code 为短期有效的一次性授权码，使用后即失效，不可重复使用。
- 每个 login_code 仅能换取一次 open_id。

## 接口说明

- 业务场景：用户在三方智能服务中触发登录操作，智能服务端调用豆包登录组件获取 login_code，随后将其发送至三方服务端。服务端调用本接口将 login_code 换取用户在该应用下的唯一标识 open_id，用于关联三方自有账号体系。
- 前提条件：
- 已在智能服务开放平台完成应用创建，获取到 app_id 和 app_secret。
- 智能服务客户端已完成用户登录授权流程，获取到有效的 login_code。
- 注意事项：
- login_code 有效期极短，服务端收到后应立即调用本接口，避免 code 过期。
- open_id 是用户在当前应用下的唯一标识，同一用户在不同应用下的 open_id 不同。
- 本接口使用 app_id + app_secret 进行鉴权，无需额外传入 access_token。

## 基本信息

| 名称 | 描述 |
|-|-|
| HTTP Path | /api/login/v1/developer/get_openid |
| HTTP Method | POST |
| Scope | 无需特殊 Scope |
| 权限要求 | 需要用户在智能服务端完成登录授权 |

## 请求头

| 名称 | 类型 | 必填 | 描述 |
|-|-|-|-|
| content-type | string | 是 | 固定值 "application/json" |

## 请求参数

### Body

| 名称 | 类型 | 是否必填 | 描述 | 示例值 |
|-|-|-|-|-|
| app_id | string | 是 | 应用ID，唯一标识一个三方应用。在智能服务开放平台创建应用后获取。 | tt07e3715e218c94OR |
| app_secret | string | 是 | 应用密钥，与 app_id 配对使用，用于验证应用身份。 | clt.943da17996fb5ceb\*\*\*\*\*\* |
| grant_type | string | 是 | 授权认证类型，固定值为 authorization_code。 | authorization_code |
| login_code | string | 是 | 短期登录 Code 授权码。用户在智能服务端完成登录授权后，客户端获取到的一次性短期有效授权码。 | 0a1b2c3d4e5f\*\*\*\*\*\* |

## 请求示例

cURL

Go

Java

Node.Js

```shell
curl -X POST 'https://api.doubao-dev.com/api/login/v1/developer/get_openid' \
  -H 'content-type: application/json' \
  -d '{
    "app_id": "tt07e3715e218c94OR",
    "app_secret": "your_app_secret",
    "grant_type": "authorization_code",
    "login_code": "0a1b2c3d4e5f******"
  }'
```

## 响应参数

| 名称 | 类型 | 是否必填 | 描述 | 示例值 |
|-|-|-|-|-|
| code | integer | 是 | 响应状态码，0 表示成功，非 0 表示失败。 | 0 |
| msg | string | 是 | 响应状态描述信息。 | success |
| log_id | string | 是 | 日志ID，用于问题排查时提供给技术支持。 | 20260309120000OPENID789012 |
| data | object | 是 | 响应数据对象，详见下方 data 字段说明。 | - |

### data 字段说明

| 名称 | 类型 | 是否必填 | 描述 | 示例值 |
|-|-|-|-|-|
| open_id | string | 是 | 用户在当前应用下的唯一标识 openID。同一用户在不同应用下的 open_id 不同，可用于三方自有账号体系的绑定或注册。 | \_000Hkg5Wu1LTSk61Rsv5Y7lsfMD\*\*\*\*\*\* |

## 响应示例

### 正常示例

```json
{
    "code": 0,
    "msg": "success",
    "log_id": "20260309120000OPENID789012",
    "data": {
        "open_id": "_000Hkg5Wu1LTSk61Rsv5Y7lsfMD******"
    }
}
```

### 异常示例

```json
{
    "code": 40004,
    "msg": "login_code is invalid or expired",
    "log_id": "20260309120001OPENID345678",
    "data": null
}
```

## 错误码

| HTTP 状态码 | 错误码 | 描述 | 排查建议 |
|-|-|-|-|
| 200 | 0 | 请求成功 | - |
| 200 | 40001 | 参数错误 | 请检查请求参数是否完整、格式是否正确，确认 app_id、app_secret、grant_type、login_code 均已正确填写。 |
| 200 | 40002 | app_id 无效 | 请确认 app_id 是否正确，应用是否已在智能服务开放平台正常创建并启用。 |
| 200 | 40003 | app_secret 错误 | 请确认 app_secret 是否与 app_id 匹配，可在应用详情页重新获取。 |
| 200 | 40004 | login_code 无效或已过期 | login_code 为一次性短期有效授权码，请确认 code 是否已被使用或已过期，需重新引导用户授权获取新的 login_code。 |
| 200 | 40005 | grant_type 不正确 | 请确认 grant_type 的值为 authorization_code。 |
