企业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。

获取方式
  1. 引导用户授权:

    • 构造授权 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(需要用户确认)。

  2. 获取授权码 (code):

    • 用户授权后,企业微信会跳转到 REDIRECT_URI,并附带一个 code 参数。

  3. 通过 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 和用户信息,并实现相关功能。

开启新对话

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值