微信小程序登录(API 模式)

最近更新时间:2025-06-18 14:36:21

我的收藏

接口描述

微信小程序应用通过 wx.login() 获取微信端的临时登录凭证 code 后,调用此接口验证 code,获取 CIAM 的 Access Token 和 ID Token,完成登录。
CIAM 会使用微信的 unionidopenid 关联本地用户 (优先使用 unionid),如果用户不存在则自动创建新用户。如果登录成功,CIAM 会根据认证源的属性映射配置将微信侧返回的用户信息映射到本地用户数据上。
说明:
您还可以通过 SDK 方式更加简单快捷地接入微信小程序,详情请参见 接入微信小程序(SDK 模式)
在使用此接口前,建议您阅读 微信小程序登录官方文档 了解小程序登录的详细流程。

支持的应用类型

小程序应用。

请求方法

POST

请求路径

/oauth2/token

请求 Content-Type

application/json

请求示例

POST /oauth2/token HTTP/1.1
Content-Type: application/json
Host: sample.portal.tencentciam.com

{
"grant_type" : "http://tencentciam.com/oauth2/grant-type/social/wechat/jscode",
"client_id" : "WECHAT_MINI_PROGRAM_CLIENT_ID",
"auth_source_id" : "WECHAT_MINI_PROGRAM_AUTH_SOURCE_ID",
"js_code" : "MOCK_JS_CODE"
}

请求体 JSON 参数

JSON 路径
数据类型
描述
grant_type
String
填固定值 http://tencentciam.com/oauth2/grant-type/social/wechat/jscode
client_id
String
小程序应用的 client_id。
auth_source_id
String
微信小程序内登录认证源 ID。
js_code
String
微信小程序 wx.login() 接口返回的临时登录凭证 code。
getUserInfo
Boolean
如需获取昵称、头像等用户信息,则此参数传 true,否则可以不传递此参数。此参数传 true 时,需要同时传递 encryptedDataiv 两个参数。
encryptedData
String
wx.getUserProfile() 接口返回的用户信息加密数据 encryptedData。
iv
String
wx.getUserProfile() 接口返回的加密算法初始向量 iv。
getPhoneNumber
Boolean
如需获取用户手机号,则此参数传 true,否则可以不传递此参数。此参数传 true 时,需要同时传递 phone_code 参数。
phone_code
String
微信小程序获取手机号接口返回的动态令牌 code。

正常响应示例

HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8

{
"access_token" : "eyJraWQiOiI3NjVkMjlmYi05ODE1LTRmZGQtYmU5NS00NzJhOTYzZmQ5YmYiLCJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJzdWIiOiJNT0NLX1VTRVJfSUQiLCJhdWQiOiJXRUNIQVRfTUlOSV9QUk9HUkFNX0NMSUVOVF9JRCIsIm5iZiI6MTY0MjA2MDI2Mywic2NvcGUiOlsib3BlbmlkIl0sImlzcyI6Imh0dHBzOlwvXC9zYW1wbGUucG9ydGFsLnRlbmNlbnRjaWFtLmNvbSIsImV4cCI6MTY0MjA2MDU2MywiaWF0IjoxNjQyMDYwMjYzLCJqdGkiOiI1YzQ2YmM5Mi0yYzg0LTQxOTEtOWZmMC1kNjdjYmIwMTk3MDIifQ.wMRbMeeGxtrX--unHY9Qi8X7anz_STKseO0dApY9bC5-gh0_76QmNHKFTibU0XZeMg1yEq0ewApBN4tITVJ1SzYeNgxNfWGGiAxFxKzHBS06Tli1p0ByiFl-gPccVb4S0Bn4T6p1KDmQSchV07O4PB3gjSjLKmqHT4qVO2OfCm47kfSxn31QsCF9BoJdIBJ43ic8hk2LFJ5gTSPBeZM8Dr5BcaUbSclJpLulQNuwmax7gQnw7jpeDGAGOPVih-YbRgXST-es0TIhUToNt0V_p9ytw1Ck4PxSbvUy6emNH70oopoNXLazc6vpX1bbBweQ7oaDfXkoYq5ZrV8On2qwPA",
"scope" : "openid",
"id_token" : "eyJraWQiOiI3NjVkMjlmYi05ODE1LTRmZGQtYmU5NS00NzJhOTYzZmQ5YmYiLCJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJzdWIiOiJNT0NLX1VTRVJfSUQiLCJhdWQiOiJXRUNIQVRfTUlOSV9QUk9HUkFNX0NMSUVOVF9JRCIsImF6cCI6IldFQ0hBVF9NSU5JX1BST0dSQU1fQ0xJRU5UX0lEIiwiaXNzIjoiaHR0cHM6XC9cL3NhbXBsZS5wb3J0YWwudGVuY2VudGNpYW0uY29tIiwiZXhwIjoxNjQyMDYyMDYzLCJpYXQiOjE2NDIwNjAyNjMsImp0aSI6IjA2OGNhZGVlLTAzYTMtNDVmZC05ZWJhLTU4MjZiZmU1ZDljOCJ9.D-MxjT5D2qB77vtQClDRnetfI4ZuRyXgm82FwlP4t25gNDlcAsNKc3dIfVH-gR46J6Dy3p8B1RohSzoMWPvqx0RbusBaMSR4GgeYxjIHQ5cXG2NIPoxZMTZ6LU5skDNlgI3zf7Ma1lfwkMDBVjNLjDJMM4Ltlntj9tK5WD1ti8IBuJmeCtAnatDY_5_fB4_zBhg14LEc3LSMuVTupxe08QTe0csw_lREswsVN3ugBBY7ejMmCxxqdu_CngTDbZ-JyIq4dAzwKIWTz0T5BpQDX3gjDyrOjONjX7kzocH2t6qB5TSukv4eliNIJncDzkCV9fm-N1xSBqlTRxzys6x_5A",
"token_type" : "Bearer",
"expires_in" : 299
}

响应参数

参数
数据类型
描述
access_token
String
OAuth 2.0 Access Token (JWT)。
token_type
String
Token 类型,目前返回的是固定值 Bearer
expires_in
Number
Access Token 有效期,单位秒。
scope
String
Access Token scope。
refresh_token
String
OAuth 2.0 Refresh Token。
id_token
String
OIDC ID Token (JWT)。

异常响应示例

js_code 无效。
HTTP/1.1 400 Bad Request
Content-Type: application/json;charset=UTF-8

{
"error" : "invalid_grant",
"error_description" : "WeChat error: 40029"
}
用户状态异常(如被锁定或冻结)。
HTTP/1.1 400 Bad Request
Content-Type: application/json;charset=UTF-8

{
"error" : "invalid_grant",
"error_description" : "Abnormal user status"
}
认证源不存在或未启用。
HTTP/1.1 400 Bad Request
Content-Type: application/json;charset=UTF-8

{
"error" : "invalid_auth_source",
"error_description" : "Auth source not found or disabled"
}
认证源不是 微信小程序内登录 认证源。
HTTP/1.1 400 Bad Request
Content-Type: application/json;charset=UTF-8

{
"error" : "invalid_auth_source",
"error_description" : "Wrong auth source type"
}
认证源未关联应用。
HTTP/1.1 400 Bad Request
Content-Type: application/json;charset=UTF-8

{
"error" : "invalid_auth_source",
"error_description" : "Auth source and application not associated"
}
指定了获取用户信息,但缺少必要的参数。
HTTP/1.1 400 Bad Request
Content-Type: application/json;charset=UTF-8

{
"error" : "invalid_request",
"error_description" : "Missing required parameter: encryptedData"
}
指定了获取用户手机号,但缺少必要的参数。
HTTP/1.1 400 Bad Request
Content-Type: application/json;charset=UTF-8

{
"error" : "invalid_request",
"error_description" : "Missing required parameter: phone_code"
}