微信企業號登錄授權Java實現獲取員工userid根據userid換openid 2016年1月8日
為了方便測試 。debug 建議大家搞個花生殼或者其他的可以映射公網IP的軟件。
貌似漲價了8元一個。鄙人撿了個便宜1元買的。還是個二級域名
1.設置一個菜單調用授權接口的URL (https://open.weixin.qq.com/和這個網站的是不一樣的東西)獲取code
https://open.weixin.qq.com/connect/oauth2/authorize?appid=CORPID&redirect_uri=REDIRECTURI&response_type=code&scope=snsapi_base&state=STATE#wechat_redirect
2.寫一個方法接收上圖中reurl 獲取code 與 access_token
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
public
String execute()
throws
Exception {
HttpServletRequest request = ServletActionContext.getRequest();
HttpServletResponse response = ServletActionContext.getResponse();
request.setCharacterEncoding(
"UTF-8"
);
response.setCharacterEncoding(
"UTF-8"
);
String code = request.getParameter(
"code"
);
if
(!
"authdeny"
.equals(code)){
String access_token = WeixinUtil.getAccessToken(您的企業號corpId,您的企業號secret).getToken();
String UserID = oAuth2Service.getUserID(access_token, code,
"2"
);
//第3步
request.setAttribute(
"UserId"
, UserID);
}
request.getRequestDispatcher(
"/index.jsp"
).forward(request,response);
return
null
;
}
|
3.getUserID獲取員工userid 這個id並不是用戶openid
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
/**
* 獲取員工信息的接口地址
**/
public
String CODE_TO_USERINFO =
"https://qyapi.weixin.qq.com/cgi-bin/user/getuserinfo?access_token=ACCESS_TOKEN&code=CODE&agentid=AGENTID"
;
/**
* 根據code獲取成員信息
* @param access_token 調用接口憑證
* @param code 通過員工授權獲取到的code,每次員工授權帶上的code將不一樣,code只能使用一次,5分鍾未被使用自動過期
* @param agentid 跳轉鏈接時所在的企業應用ID 管理員須擁有agent的使用權限;agentid必須和跳轉鏈接時所在的企業應用ID相同
* */
public
String getUserID(String access_token, String code, String agentid) {
String UserId =
""
;
CODE_TO_USERINFO = CODE_TO_USERINFO.replace(
"ACCESS_TOKEN"
, access_token).replace(
"CODE"
, code).replace(
"AGENTID"
, agentid);
JSONObject jsonobject = WeixinUtil.httpRequest(CODE_TO_USERINFO,
"GET"
,
null
);
if
(
null
!= jsonobject) {
UserId = jsonobject.getString(
"UserId"
);
if
(!
""
.equals(UserId)) {
System.out.println(
"獲取信息成功,o(∩_∩)o ————UserID:"
+ UserId);
}
else
{
int
errorrcode = jsonobject.getInt(
"errcode"
);
String errmsg = jsonobject.getString(
"errmsg"
);
String error =
"錯誤碼:"
+ errorrcode +
"————"
+
"錯誤信息:"
+ errmsg;
log.error(error);
}
}
else
{
log.error(
"獲取授權失敗了"
);
}
return
UserId;
}
|
4.再根據第2步的轉發 將獲取的數據傳遞到頁面 測試是否正確
4.1 首先點擊微信企業號里面有授權菜單的應用 的菜單
4.2 走第2步的Action 獲取code、 access_token 換取userid 並轉發到指定頁面
整個過程就是這樣的簡單!
5.根據userid換取openid 需要第三步里面的方法。自己拼接json格式。或者直接返回第三步里面的JSONObject 測試代碼的json格式是只有userid的。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
/***
* 根據userid 換取openid
* @param access_token 根據企業號的id 和密鑰得到
* @param param 需要的json數據。{\"userid\": \"zhangsan\"}
* @return
*/
測試的數據 String param =
"{\"userid\": \"zongxiaoshuai\"}"
;
public
String getOpenId(String access_token,String param) {
String OpenId =
""
;
USERID_TO_OPENID = USERID_TO_OPENID.replace(
"ACCESS_TOKEN"
, access_token);
JSONObject jsonobject = WeixinUtil.httpRequest(USERID_TO_OPENID,
"GET"
, param);
System.out.println(jsonobject);
if
(
null
!= jsonobject) {
OpenId = jsonobject.getString(
"openid"
).toString();
if
(!
""
.equals(OpenId)) {
System.out.println(
"獲取信息成功,o(∩_∩)o ————OpenId:"
+ OpenId);
}
else
{
int
errorrcode = jsonobject.getInt(
"errcode"
);
String errmsg = jsonobject.getString(
"errmsg"
);
System.out.println(
"錯誤碼:"
+ errorrcode +
"————"
+
"錯誤信息:"
+ errmsg);
}
}
else
{
System.out.println(
"獲取OpenId失敗了,●﹏●,自己找原因。。。"
);
}
return
OpenId;
}
|
正常返回
1
|
{
"errcode"
:
0
,
"errmsg"
:
"ok"
,
"openid"
:
"ov88GjwZWGL7PiFc6MLhagoNzQ94"
}
|