在企业微信开发中,cgi-bin/user/getuserinfo 是一个重要的 API 接口,用于 根据 OAuth2 授权码 (code) 获取用户的基本信息。这个接口通常用于在企业微信的网页中,通过 OAuth2 授权流程获取当前访问用户的身份信息。
接口说明
- 
接口地址: 复制 GET https://qyapi.weixin.qq.com/cgi-bin/user/getuserinfo?access_token=ACCESS_TOKEN&code=CODE
- 
参数: - 
access_token: 企业的access_token,通过corpid和corpsecret获取。
- 
code: OAuth2 授权流程中获取的授权码。
 
- 
- 
返回值: - 
如果用户是企业成员,返回 UserId(用户在企业微信中的唯一标识)。
- 
如果用户是非企业成员(如外部联系人),返回 OpenId(用户在微信中的唯一标识)。
- 
示例返回值: json 复制 { "errcode": 0, "errmsg": "ok", "UserId": "USERID", "OpenId": "OPENID", "DeviceId": "DEVICEID" }
 
- 
使用场景
- 
获取当前用户身份: - 
在企业微信的网页中,通过 OAuth2 授权流程获取当前访问用户的身份信息。 
- 
例如,用户访问一个网页时,可以通过该接口判断用户是否是企业成员。 
 
- 
- 
个性化展示: - 
根据用户的身份信息,展示不同的内容或功能。 
- 
例如,企业成员可以看到内部数据,而非企业成员只能看到公开信息。 
 
- 
- 
用户绑定: - 根据 UserId或OpenId,将用户与企业内部系统进行绑定。
 
- 根据 
调用流程
- 
引导用户授权: - 
构造授权 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参数。
 
- 用户授权后,企业微信会跳转到 
- 
调用 cgi-bin/user/getuserinfo接口:- 使用 code和企业的access_token调用cgi-bin/user/getuserinfo接口,获取用户信息。
 
- 使用 
Java 示例代码
以下是使用 Java 调用 cgi-bin/user/getuserinfo 接口的示例代码:
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/getuserinfo?access_token=%s&code=%s";
    /**
     * 发送 HTTP GET 请求
     */
    private static String httpGet(String url) throws IOException {
        try (CloseableHttpClient httpClient = HttpClients.createDefault()) {
            HttpGet httpGet = new HttpGet(url);
            try (CloseableHttpResponse response = httpClient.execute(httpGet)) {
                HttpEntity entity = response.getEntity();
                return EntityUtils.toString(entity);
            }
        }
    }
    /**
     * 获取用户信息
     */
    public static JSONObject getUserInfo(String accessToken, String code) throws IOException {
        String url = String.format(USER_INFO_URL, accessToken, code);
        String response = httpGet(url);
        return JSONObject.parseObject(response);
    }
    public static void main(String[] args) throws IOException {
        // 企业的 access_token
        String accessToken = "YOUR_ACCESS_TOKEN";
        // OAuth2 授权码
        String code = "USER_AUTHORIZATION_CODE";
        // 获取用户信息
        JSONObject userInfo = getUserInfo(accessToken, code);
        System.out.println("用户信息: " + userInfo);
        // 判断用户身份
        if (userInfo.containsKey("UserId")) {
            String userId = userInfo.getString("UserId");
            System.out.println("用户是企业成员,UserId: " + userId);
        } else if (userInfo.containsKey("OpenId")) {
            String openId = userInfo.getString("OpenId");
            System.out.println("用户是非企业成员,OpenId: " + openId);
        } else {
            System.out.println("获取用户信息失败: " + userInfo);
        }
    }
}返回值解析
- 
UserId:- 
如果用户是企业成员,返回 UserId,表示用户在企业微信中的唯一标识。
- 
可以通过 cgi-bin/user/get接口获取用户的详细信息。
 
- 
- 
OpenId:- 如果用户是非企业成员(如外部联系人),返回 OpenId,表示用户在微信中的唯一标识。
 
- 如果用户是非企业成员(如外部联系人),返回 
- 
DeviceId:- 如果用户是通过硬件扫码登录的,返回 DeviceId,表示设备的唯一标识。
 
- 如果用户是通过硬件扫码登录的,返回 
注意事项
- 
code的有效性:- 
code只能使用一次,且有效期为 5 分钟。
- 
如果 code失效,需要重新引导用户授权。
 
- 
- 
access_token的有效性:- access_token的有效期为 2 小时,需要定时刷新。
 
- 
安全性: - access_token和- code是敏感信息,不要泄露给客户端或第三方。
 
总结
- 
cgi-bin/user/getuserinfo接口用于根据 OAuth2 授权码 (code) 获取用户的基本信息。
- 
通过该接口可以判断用户是否是企业成员,并获取用户的唯一标识( UserId或OpenId)。
- 
在企业微信开发中,该接口常用于用户身份验证和个性化展示。