微信企業號登陸受權Java實現獲取員工userid根據userid換openid 2016年1月8日json
爲了方便測試 。debug 建議你們搞個花生殼或者其餘的能夠映射公網IP的軟件。api
貌似漲價了8元一個。鄙人撿了個便宜1元買的。仍是個二級域名微信
1.設置一個菜單調用受權接口的URL (https://open.weixin.qq.com/和這個網站的是不同的東西)獲取codeapp
https://open.weixin.qq.com/connect/oauth2/authorize?appid=CORPID&redirect_uri=REDIRECTURI&response_type=code&scope=snsapi_base&state=STATE#wechat_redirectjsp
2.寫一個方法接收上圖中reurl 獲取code 與 access_token 測試
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 網站
若是第二次請求失敗了。看看請求的URL是否是有static修飾 url
微信企業號獲取用戶信息錯誤 {"errcode":40029,"errmsg":"invalid code"}spa
/** * 獲取員工信息的接口地址 **/ 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步的轉發 將獲取的數據傳遞到頁面 測試是否正確debug
4.1 首先點擊微信企業號裏面有受權菜單的應用 的菜單
4.2 走第2步的Action 獲取code、 access_token 換取userid 並轉發到指定頁面
整個過程就是這樣的簡單!
5.根據userid換取openid 須要第三步裏面的方法。本身拼接json格式。或者直接返回第三步裏面的JSONObject 測試代碼的json格式是隻有userid的。
/*** * 根據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; }
正常返回
{"errcode":0,"errmsg":"ok","openid":"ov88GjwZWGL7PiFc6MLhagoNzQ94"}