企业access_token,与用户access_token区别,获取方式,如何获取用户信息
在企业微信开发中,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 和用户信息,并实现相关功能。
开启新对话
