接口描述
微信小程序应用通过
wx.login()
获取微信端的临时登录凭证 code
后,调用此接口验证 code
,获取 CIAM 的 Access Token 和 ID Token,完成登录。CIAM 会使用微信的
unionid
或 openid
关联本地用户 (优先使用 unionid
),如果用户不存在则自动创建新用户。如果登录成功,CIAM 会根据认证源的属性映射配置将微信侧返回的用户信息映射到本地用户数据上。支持的应用类型
小程序应用。
请求方法
POST
请求路径
/oauth2/token
请求 Content-Type
application/json
请求示例
POST /oauth2/token HTTP/1.1Content-Type: application/jsonHost: 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 时,需要同时传递 encryptedData 和 iv 两个参数。 |
encryptedData | String | wx.getUserProfile() 接口返回的用户信息加密数据 encryptedData。 |
iv | String | wx.getUserProfile() 接口返回的加密算法初始向量 iv。 |
getPhoneNumber | Boolean | 如需获取用户手机号,则此参数传 true ,否则可以不传递此参数。此参数传 true 时,需要同时传递 phone_code 参数。 |
phone_code | String | 微信小程序获取手机号接口返回的动态令牌 code。 |
正常响应示例
HTTP/1.1 200 OKContent-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 RequestContent-Type: application/json;charset=UTF-8{"error" : "invalid_grant","error_description" : "WeChat error: 40029"}
用户状态异常(如被锁定或冻结)。
HTTP/1.1 400 Bad RequestContent-Type: application/json;charset=UTF-8{"error" : "invalid_grant","error_description" : "Abnormal user status"}
认证源不存在或未启用。
HTTP/1.1 400 Bad RequestContent-Type: application/json;charset=UTF-8{"error" : "invalid_auth_source","error_description" : "Auth source not found or disabled"}
认证源不是
微信小程序内登录
认证源。HTTP/1.1 400 Bad RequestContent-Type: application/json;charset=UTF-8{"error" : "invalid_auth_source","error_description" : "Wrong auth source type"}
认证源未关联应用。
HTTP/1.1 400 Bad RequestContent-Type: application/json;charset=UTF-8{"error" : "invalid_auth_source","error_description" : "Auth source and application not associated"}
指定了获取用户信息,但缺少必要的参数。
HTTP/1.1 400 Bad RequestContent-Type: application/json;charset=UTF-8{"error" : "invalid_request","error_description" : "Missing required parameter: encryptedData"}
指定了获取用户手机号,但缺少必要的参数。
HTTP/1.1 400 Bad RequestContent-Type: application/json;charset=UTF-8{"error" : "invalid_request","error_description" : "Missing required parameter: phone_code"}