微信企業號登錄授權Java實現獲取員工userid根據userid換openid


微信企業號登錄授權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" }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM