在企业微信开发中,access_token
是调用企业微信 API 的重要凭证。根据使用场景的不同,access_token
分为 企业 access_token 和 用户 access_token。以下是它们的区别、获取方式以及如何获取用户信息的详细说明。
1. 企业 access_token 与用户 access_token 的区别
特性 | 企业 access_token | 用户 access_token |
---|---|---|
用途 | 用于调用企业微信的企业级 API,如管理通讯录、发送消息等。 | 用于调用企业微信的用户级 API,如获取用户信息、OAuth2 授权等。 |
获取方式 | 通过企业 ID (corpid ) 和应用 Secret (corpsecret ) 获取。 | 通过 OAuth2 授权流程获取(需要用户授权)。 |
有效期 | 7200 秒(2 小时),需要定时刷新。 | 7200 秒(2 小时),需要定时刷新。 |
权限范围 | 企业级权限,可以访问企业所有数据。 | 用户级权限,只能访问授权用户的数据。 |
2. 获取企业 access_token
企业 access_token
是调用企业微信 API 的基础凭证,用于管理企业数据。
获取方式
通过企业 ID (corpid
) 和应用 Secret (corpsecret
) 调用以下接口获取:
复制
GET https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=YOUR_CORPID&corpsecret=YOUR_CORPSECRET
示例代码(Java)
java
复制
import org.apache.http.HttpEntity; import org.apache.http.client.methods.CloseableHttpResponse; import org.apache.http.client.methods.HttpGet; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClients; import org.apache.http.util.EntityUtils; import com.alibaba.fastjson.JSONObject; public class WeChatAccessToken { private static final String CORP_ID = "YOUR_CORP_ID"; private static final String CORP_SECRET = "YOUR_CORP_SECRET"; private static final String ACCESS_TOKEN_URL = "https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=%s&corpsecret=%s"; public static String getAccessToken() throws IOException { String url = String.format(ACCESS_TOKEN_URL, CORP_ID, CORP_SECRET); try (CloseableHttpClient httpClient = HttpClients.createDefault()) { HttpGet httpGet = new HttpGet(url); try (CloseableHttpResponse response = httpClient.execute(httpGet)) { HttpEntity entity = response.getEntity(); String responseString = EntityUtils.toString(entity); JSONObject json = JSONObject.parseObject(responseString); return json.getString("access_token"); } } } public static void main(String[] args) throws IOException { String accessToken = getAccessToken(); System.out.println("企业 access_token: " + accessToken); } }
3. 获取用户 access_token
用户 access_token
是通过 OAuth2 授权流程获取的,用于访问用户级 API。
获取方式
-
引导用户授权:
-
构造授权 URL,引导用户访问并授权。
-
授权 URL 格式:
复制
https://open.weixin.qq.com/connect/oauth2/authorize?appid=YOUR_CORPID&redirect_uri=REDIRECT_URI&response_type=code&scope=snsapi_base&state=STATE#wechat_redirect
-
REDIRECT_URI
是授权后重定向的 URL。 -
scope
可以是snsapi_base
(静默授权)或snsapi_userinfo
(需要用户确认)。
-
-
-
获取授权码 (
code
):-
用户授权后,企业微信会跳转到
REDIRECT_URI
,并附带一个code
参数。
-
-
通过
code
获取用户 access_token:-
使用
code
调用以下接口获取用户access_token
:复制
GET https://qyapi.weixin.qq.com/cgi-bin/user/getuserinfo?access_token=ACCESS_TOKEN&code=CODE
-
示例代码(Java)
java
复制
import org.apache.http.HttpEntity; import org.apache.http.client.methods.CloseableHttpResponse; import org.apache.http.client.methods.HttpGet; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClients; import org.apache.http.util.EntityUtils; import com.alibaba.fastjson.JSONObject; public class WeChatUserAccessToken { private static final String CORP_ID = "YOUR_CORP_ID"; private static final String CORP_SECRET = "YOUR_CORP_SECRET"; private static final String USER_INFO_URL = "https://qyapi.weixin.qq.com/cgi-bin/user/getuserinfo?access_token=%s&code=%s"; public static String getUserAccessToken(String accessToken, String code) throws IOException { String url = String.format(USER_INFO_URL, accessToken, code); try (CloseableHttpClient httpClient = HttpClients.createDefault()) { HttpGet httpGet = new HttpGet(url); try (CloseableHttpResponse response = httpClient.execute(httpGet)) { HttpEntity entity = response.getEntity(); String responseString = EntityUtils.toString(entity); JSONObject json = JSONObject.parseObject(responseString); return json.getString("access_token"); } } } public static void main(String[] args) throws IOException { String accessToken = "YOUR_ENTERPRISE_ACCESS_TOKEN"; String code = "USER_AUTHORIZATION_CODE"; String userAccessToken = getUserAccessToken(accessToken, code); System.out.println("用户 access_token: " + userAccessToken); } }
4. 获取用户信息
通过用户 access_token
和用户 UserID
,可以获取用户的详细信息。
获取方式
调用以下接口获取用户信息:
复制
GET https://qyapi.weixin.qq.com/cgi-bin/user/get?access_token=ACCESS_TOKEN&userid=USERID
示例代码(Java)
java
复制
import org.apache.http.HttpEntity; import org.apache.http.client.methods.CloseableHttpResponse; import org.apache.http.client.methods.HttpGet; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClients; import org.apache.http.util.EntityUtils; import com.alibaba.fastjson.JSONObject; public class WeChatUserInfo { private static final String USER_INFO_URL = "https://qyapi.weixin.qq.com/cgi-bin/user/get?access_token=%s&userid=%s"; public static JSONObject getUserInfo(String accessToken, String userId) throws IOException { String url = String.format(USER_INFO_URL, accessToken, userId); try (CloseableHttpClient httpClient = HttpClients.createDefault()) { HttpGet httpGet = new HttpGet(url); try (CloseableHttpResponse response = httpClient.execute(httpGet)) { HttpEntity entity = response.getEntity(); String responseString = EntityUtils.toString(entity); return JSONObject.parseObject(responseString); } } } public static void main(String[] args) throws IOException { String accessToken = "YOUR_ENTERPRISE_ACCESS_TOKEN"; String userId = "USER_ID"; JSONObject userInfo = getUserInfo(accessToken, userId); System.out.println("用户信息: " + userInfo); } }
5. 总结
-
企业 access_token 用于调用企业级 API,通过企业 ID 和应用 Secret 获取。
-
用户 access_token 用于调用用户级 API,通过 OAuth2 授权流程获取。
-
获取用户信息需要用户
UserID
和企业access_token
。
通过以上步骤,你可以在企业微信开发中获取 access_token
和用户信息,并实现相关功能。
开启新对话