成员登录

This commit is contained in:
jinyu 2016-11-04 21:55:06 +08:00
parent 5876801bd4
commit 087d7c354b
7 changed files with 108 additions and 30 deletions

View File

@ -39,6 +39,7 @@ import com.foxinmy.weixin4j.qy.model.ChatInfo;
import com.foxinmy.weixin4j.qy.model.ChatMute; import com.foxinmy.weixin4j.qy.model.ChatMute;
import com.foxinmy.weixin4j.qy.model.Contacts; import com.foxinmy.weixin4j.qy.model.Contacts;
import com.foxinmy.weixin4j.qy.model.IdParameter; import com.foxinmy.weixin4j.qy.model.IdParameter;
import com.foxinmy.weixin4j.qy.model.OUserInfo;
import com.foxinmy.weixin4j.qy.model.Party; import com.foxinmy.weixin4j.qy.model.Party;
import com.foxinmy.weixin4j.qy.model.Tag; import com.foxinmy.weixin4j.qy.model.Tag;
import com.foxinmy.weixin4j.qy.model.User; import com.foxinmy.weixin4j.qy.model.User;
@ -188,7 +189,8 @@ public class WeixinProxy {
private WeixinProxy(WeixinAccount weixinAccount, TokenCreator tokenCreator, private WeixinProxy(WeixinAccount weixinAccount, TokenCreator tokenCreator,
CacheStorager<Token> cacheStorager) { CacheStorager<Token> cacheStorager) {
if (weixinAccount == null) { if (weixinAccount == null) {
throw new IllegalArgumentException("weixinAccount must not be empty"); throw new IllegalArgumentException(
"weixinAccount must not be empty");
} }
if (tokenCreator == null) { if (tokenCreator == null) {
throw new IllegalArgumentException("tokenCreator must not be empty"); throw new IllegalArgumentException("tokenCreator must not be empty");
@ -795,6 +797,22 @@ public class WeixinProxy {
return userApi.getUserByCode(code); return userApi.getUserByCode(code);
} }
/**
* 获取企业号管理员登录信息
*
* @param authCode
* oauth2.0授权企业号管理员登录产生的code
* @return 登陆信息
* @see <a href=
* "http://qydev.weixin.qq.com/wiki/index.php?title=%E8%8E%B7%E5%8F%96%E4%BC%81%E4%B8%9A%E7%AE%A1%E7%90%86%E5%91%98%E7%99%BB%E5%BD%95%E4%BF%A1%E6%81%AF">
* 授权获取企业号管理员登录信息</a>
* @see com.foxinmy.weixin4j.qy.model.OUserInfo
* @throws WeixinException
*/
public OUserInfo getOUserInfoByCode(String authCode) throws WeixinException {
return userApi.getOUserInfoByCode(authCode);
}
/** /**
* 根据code获取成员ID信息 * 根据code获取成员ID信息
* *

View File

@ -87,36 +87,43 @@ public class OauthApi extends QyApi {
* redirectUri默认填写weixin4j.properties#third.oauth.redirect.uri <li> * redirectUri默认填写weixin4j.properties#third.oauth.redirect.uri <li>
* state默认填写state * state默认填写state
* *
* @see {@link #getThirdAuthorizationURL(String,String)} * @see {@link #getUserThirdAuthorizationURL(String,String)}
* *
* @return 请求授权的URL * @return 请求授权的URL
*/ */
public String getThirdAuthorizationURL() { public String getThirdAuthorizationURL() {
String redirectUri = Weixin4jConfigUtil String redirectUri = Weixin4jConfigUtil
.getValue("third.oauth.redirect.uri"); .getValue("third.oauth.redirect.uri");
return getThirdAuthorizationURL(redirectUri, "state"); return getUserThirdAuthorizationURL(redirectUri, "state", "all");
} }
/** /**
* 企业号第三方提供商登陆授权 * 企业号成员登陆授权
* *
* @param corpId * @param corpId
* 企业号提供商的corpid * 服务商的CorpID或者企业的CorpID
* @param redirectUri * @param redirectUri
* 重定向地址 * 重定向地址
* @param state * @param state
* 用于保持请求和回调的状态授权请求后原样带回给第三方 * 用于保持请求和回调的状态授权请求后原样带回给第三方
* @param userType
* redirect_uri支持登录的类型有member(成员登录)admin(管理员登录)all(成员或管理员皆可登录)
* 默认值为admin
* @return 请求授权的URL * @return 请求授权的URL
* @see ProviderApi#getOUserInfoByCode(String) * @see ProviderApi#getOUserInfoByCode(String)
* 授权登录服务商的网站时使用应用提供商的provider_access_token;
* @see UserApi#getOUserInfoByCode(String) 授权登录企业的网站时使用企业管理组的access_token
* @see <a href= * @see <a href=
* "http://qydev.weixin.qq.com/wiki/index.php?title=%E6%88%90%E5%91%98%E7%99%BB%E5%BD%95%E6%8E%88%E6%9D%83"> * "http://qydev.weixin.qq.com/wiki/index.php?title=%E6%88%90%E5%91%98%E7%99%BB%E5%BD%95%E6%8E%88%E6%9D%83">
* 企业号第三方提供商授权</a> * 企业号第三方提供商授权</a>
*/ */
public String getThirdAuthorizationURL(String redirectUri, String state) { public String getUserThirdAuthorizationURL(String redirectUri,
String oauth_uri = getRequestUri("provider_oauth_uri"); String state, String userType) {
String oauth_uri = getRequestUri("user_thirdoauth_uri");
try { try {
return String.format(oauth_uri, account.getId(), return String.format(oauth_uri, account.getId(),
URLEncoder.encode(redirectUri, Consts.UTF_8.name()), state); URLEncoder.encode(redirectUri, Consts.UTF_8.name()), state,
userType);
} catch (UnsupportedEncodingException e) { } catch (UnsupportedEncodingException e) {
; ;
} }

View File

@ -44,9 +44,9 @@ public class ProviderApi extends QyApi {
* @throws WeixinException * @throws WeixinException
*/ */
public OUserInfo getOUserInfoByCode(String authCode) throws WeixinException { public OUserInfo getOUserInfoByCode(String authCode) throws WeixinException {
String oauth_logininfo_uri = getRequestUri("oauth_logininfo_uri"); String oauth_thirdinfo_uri = getRequestUri("oauth_logininfo_uri");
WeixinResponse response = weixinExecutor.post( WeixinResponse response = weixinExecutor.post(
String.format(oauth_logininfo_uri, String.format(oauth_thirdinfo_uri,
providerTokenManager.getAccessToken()), providerTokenManager.getAccessToken()),
String.format("{\"auth_code\":\"%s\"}", authCode)); String.format("{\"auth_code\":\"%s\"}", authCode));
JSONObject obj = response.getAsJson(); JSONObject obj = response.getAsJson();

View File

@ -222,8 +222,6 @@ public class UserApi extends QyApi {
/** /**
* 获取企业号管理员登录信息 * 获取企业号管理员登录信息
* *
* @param providerToken
* 提供商的token
* @param authCode * @param authCode
* oauth2.0授权企业号管理员登录产生的code * oauth2.0授权企业号管理员登录产生的code
* @return 登陆信息 * @return 登陆信息
@ -233,11 +231,11 @@ public class UserApi extends QyApi {
* @see com.foxinmy.weixin4j.qy.model.OUserInfo * @see com.foxinmy.weixin4j.qy.model.OUserInfo
* @throws WeixinException * @throws WeixinException
*/ */
public OUserInfo getOUserInfoByCode(String providerToken, String authCode) public OUserInfo getOUserInfoByCode(String authCode) throws WeixinException {
throws WeixinException { Token token = tokenManager.getCache();
String oauth_logininfo_uri = getRequestUri("oauth_logininfo_uri"); String oauth_logininfo_uri = getRequestUri("oauth_logininfo_uri");
WeixinResponse response = weixinExecutor.post( WeixinResponse response = weixinExecutor.post(
String.format(oauth_logininfo_uri, providerToken), String.format(oauth_logininfo_uri, token.getAccessToken()),
String.format("{\"auth_code\":\"%s\"}", authCode)); String.format("{\"auth_code\":\"%s\"}", authCode));
return JSON.parseObject(response.getAsString(), OUserInfo.class); return JSON.parseObject(response.getAsString(), OUserInfo.class);
} }

View File

@ -88,12 +88,12 @@ batch_getresult_uri={api_base_url}/batch/getresult?access_token=%s&jobid=%s
# \u7528\u6237\u8eab\u4efdoauth\u6388\u6743 # \u7528\u6237\u8eab\u4efdoauth\u6388\u6743
user_oauth_uri=https://open.weixin.qq.com/connect/oauth2/authorize?appid=%s&redirect_uri=%s&response_type=code&scope=snsapi_base&state=%s#wechat_redirect user_oauth_uri=https://open.weixin.qq.com/connect/oauth2/authorize?appid=%s&redirect_uri=%s&response_type=code&scope=snsapi_base&state=%s#wechat_redirect
# \u7b2c\u4e09\u65b9\u63d0\u4f9b\u5546oauth\u6388\u6743 # \u6210\u5458\u767b\u5f55\u7b2c\u4e09\u65b9oauth\u6388\u6743
provider_oauth_uri=https://qy.weixin.qq.com/cgi-bin/loginpage?corp_id=%s&redirect_uri=%s&state=%s user_thirdoauth_uri=https://qy.weixin.qq.com/cgi-bin/loginpage?corp_id=%s&redirect_uri=%s&state=%s&usertype=%s
# \u4f01\u4e1a\u53f7\u7ba1\u7406\u5458\u767b\u5f55\u4fe1\u606f # \u4f01\u4e1a\u53f7\u6210\u5458\u767b\u5f55\u7b2c\u4e09\u65b9\u4fe1\u606f
oauth_logininfo_uri={api_base_url}/service/get_login_info?provider_access_token=%s oauth_logininfo_uri={api_base_url}/service/get_login_info?access_token=%s
# \u767b\u5f55\u4f01\u4e1a\u53f7\u5b98\u7f51\u7684url # \u767b\u5f55\u4f01\u4e1a\u53f7\u5b98\u7f51\u7684url
oauth_loginurl_uri={api_base_url}/service/get_login_url?provider_access_token=%s oauth_loginurl_uri={api_base_url}/service/get_login_url?access_token=%s
# \u5e94\u7528\u5957\u4ef6\u8bbe\u7f6e\u6388\u6743\u914d\u7f6e # \u5e94\u7528\u5957\u4ef6\u8bbe\u7f6e\u6388\u6743\u914d\u7f6e
suite_set_session_uri={api_base_url}/service/set_session_info?suite_access_token=%s suite_set_session_uri={api_base_url}/service/set_session_info?suite_access_token=%s
# \u83b7\u53d6\u4f01\u4e1a\u53f7\u7684\u6c38\u4e45\u6388\u6743\u7801 # \u83b7\u53d6\u4f01\u4e1a\u53f7\u7684\u6c38\u4e45\u6388\u6743\u7801

View File

@ -6,6 +6,7 @@ import java.util.List;
import com.alibaba.fastjson.annotation.JSONField; import com.alibaba.fastjson.annotation.JSONField;
import com.foxinmy.weixin4j.model.Token; import com.foxinmy.weixin4j.model.Token;
import com.foxinmy.weixin4j.qy.type.AgentAuthType; import com.foxinmy.weixin4j.qy.type.AgentAuthType;
import com.foxinmy.weixin4j.qy.type.LoginUserType;
/** /**
* 企业号oauth授权登陆信息&第三方应用授权信息 * 企业号oauth授权登陆信息&第三方应用授权信息
@ -19,6 +20,11 @@ import com.foxinmy.weixin4j.qy.type.AgentAuthType;
public class OUserInfo implements Serializable { public class OUserInfo implements Serializable {
private static final long serialVersionUID = -567063562050171293L; private static final long serialVersionUID = -567063562050171293L;
/**
* 登录用户的类型1.企业号创建者 2.企业号内部系统管理员 3.企业号外部系统管理员 4.企业号分级管理员 5. 企业号成员
*/
@JSONField(name = "usertype")
private int userType;
/** /**
* 是否系统管理员 * 是否系统管理员
*/ */
@ -85,6 +91,19 @@ public class OUserInfo implements Serializable {
// ---------- setter 应该全部去掉 // ---------- setter 应该全部去掉
public int getUserType() {
return userType;
}
@JSONField(serialize = false)
public LoginUserType getFormatUserType() {
return LoginUserType.values()[userType - 1];
}
public void setUserType(int userType) {
this.userType = userType;
}
public void setSysAdmin(boolean isSysAdmin) { public void setSysAdmin(boolean isSysAdmin) {
this.isSysAdmin = isSysAdmin; this.isSysAdmin = isSysAdmin;
} }
@ -115,9 +134,11 @@ public class OUserInfo implements Serializable {
@Override @Override
public String toString() { public String toString() {
return "OUserInfo [isSysAdmin=" + isSysAdmin + ", isInnerAdmin=" + isInnerAdmin + ", adminInfo=" + adminInfo return "OUserInfo [userType=" + userType + ", isSysAdmin=" + isSysAdmin
+ ", corpInfo=" + corpInfo + ", agentInfo=" + agentInfo + ", authInfo=" + authInfo + ", isInnerAdmin=" + isInnerAdmin + ", adminInfo=" + adminInfo
+ ", redirectLoginInfo=" + redirectLoginInfo + "]"; + ", corpInfo=" + corpInfo + ", agentInfo=" + agentInfo
+ ", authInfo=" + authInfo + ", redirectLoginInfo="
+ redirectLoginInfo + "]";
} }
/** /**
@ -176,8 +197,8 @@ public class OUserInfo implements Serializable {
@Override @Override
public String toString() { public String toString() {
return "AuthInfo [isNewAuth=" + isNewAuth + ", agentItems=" + agentItems + ", departItems=" + departItems return "AuthInfo [isNewAuth=" + isNewAuth + ", agentItems="
+ "]"; + agentItems + ", departItems=" + departItems + "]";
} }
} }
@ -204,8 +225,8 @@ public class OUserInfo implements Serializable {
@JSONField(name = "appid") @JSONField(name = "appid")
private int appId; private int appId;
/** /**
* 授权方应用敏感权限组目前仅有get_location表示是否有权限设置应用获取地理位置的开关, * 授权方应用敏感权限组目前仅有get_location表示是否有权限设置应用获取地理位置的开关, <font
* <font color="red">新的权限体系将废弃</font> * color="red">新的权限体系将废弃</font>
*/ */
@JSONField(name = "api_group") @JSONField(name = "api_group")
private List<String> apiGroup; private List<String> apiGroup;
@ -261,8 +282,9 @@ public class OUserInfo implements Serializable {
@Override @Override
public String toString() { public String toString() {
return "AgentItem [authType=" + authType + ", appId=" + appId + ", apiGroup=" + apiGroup + ", privilege=" return "AgentItem [authType=" + authType + ", appId=" + appId
+ privilege + ", " + super.toString() + "]"; + ", apiGroup=" + apiGroup + ", privilege=" + privilege
+ ", " + super.toString() + "]";
} }
} }
@ -295,7 +317,8 @@ public class OUserInfo implements Serializable {
@Override @Override
public String toString() { public String toString() {
return "DepartItem [writable=" + writable + ", " + super.toString() + "]"; return "DepartItem [writable=" + writable + ", " + super.toString()
+ "]";
} }
} }
} }

View File

@ -0,0 +1,32 @@
package com.foxinmy.weixin4j.qy.type;
/**
* 成员登录类型
*
* @className LoginUserType
* @author jinyu(foxinmy@gmail.com)
* @date 2016年11月4日
* @since JDK 1.6
*/
public enum LoginUserType {
/**
* 企业号创建者
*/
CREATOR,
/**
* 企业号内部系统管理员
*/
INNERADMIN,
/**
* 企业号外部系统管理员
*/
OUTTERADMIN,
/**
* 企业号分级管理员
*/
LEVELADMIN,
/**
* 企业号成员
*/
MEMBER;
}