微信企业号OAuth2.0授权-Java
為什么80%的碼農(nóng)都做不了架構(gòu)師?>>> ??
我也是醉了,中午做個(gè)飯這么難吃!連自己都看不下去了!懷著沉重的心情把微信企業(yè)號(hào)OAuth2.0授權(quán)看了看,感覺與公眾號(hào)差別沒什么,相信開發(fā)過公眾號(hào)的朋友都知道,首先我們看看官方API文檔
企業(yè)應(yīng)用中的URL鏈接(包括自定義菜單或者消息中的鏈接),可以通過OAuth2.0來獲取員工的身份信息。
注意,此URL的域名,必須完全匹配企業(yè)應(yīng)用設(shè)置項(xiàng)中的'可信域名',否則獲取用戶信息時(shí)會(huì)返回50001錯(cuò)誤碼
這里的可信域呢,跟公眾號(hào)的的授權(quán)回調(diào)很相似,簡單地說就是在這個(gè)域名下,所有的頁面都可授權(quán),不需要添加http://,只需要域名,比如http://www.baidu.com,只需要填寫www.baidu.com,SAE、BAE也是一樣,筆者采用的是80端口外網(wǎng)IP域,只需要填寫IP就OK了,另外好像企業(yè)號(hào)還支持443端口,我們這說到的域就是更個(gè)服務(wù)器下所有項(xiàng)目的頁面都可以授權(quán)的,解決域問題之后,還需要大家注意的是,就是授權(quán)的
redirect_uri 參數(shù) 授權(quán)后重定向的回調(diào)鏈接地址,請(qǐng)使用urlencode對(duì)鏈接進(jìn)行處理,否則會(huì)提示?redirect_uri 錯(cuò)誤
?
回調(diào)地址和換取個(gè)人UserID?GOauth2Core類
package jsp.weixin.oauth2.util; /** * Oauth2類 * @author Engineer.Jsp* @date 2014.10.13 */ import net.sf.json.JSONObject; import jsp.weixin.ParamesAPI.util.ParamesAPI; import jsp.weixin.ParamesAPI.util.WeixinUtil;public class GOauth2Core {public static String GET_CODE = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=CORPID&redirect_uri=REDIRECT_URI&response_type=code&scope=snsapi_base&state=a123#wechat_redirect";/*** 企業(yè)獲取code地址處理* @param appid 企業(yè)的CorpID* @param redirect_uri 授權(quán)后重定向的回調(diào)鏈接地址,請(qǐng)使用urlencode對(duì)鏈接進(jìn)行處理* @param response_type 返回類型,此時(shí)固定為:code* @param scope 應(yīng)用授權(quán)作用域,此時(shí)固定為:snsapi_base* @param state 重定向后會(huì)帶上state參數(shù),企業(yè)可以填寫a-zA-Z0-9的參數(shù)值* @param #wechat_redirect 微信終端使用此參數(shù)判斷是否需要帶上身份信息* 員工點(diǎn)擊后,頁面將跳轉(zhuǎn)至 redirect_uri/?code=CODE&state=STATE,企業(yè)可根據(jù)code參數(shù)獲得員工的userid* */public static String GetCode(){String get_code_url = "";get_code_url = GET_CODE.replace("CORPID", ParamesAPI.corpId).replace("REDIRECT_URI", WeixinUtil.URLEncoder(ParamesAPI.REDIRECT_URI));return get_code_url;}public static String CODE_TO_USERINFO = "https://qyapi.weixin.qq.com/cgi-bin/user/getuserinfo?access_token=ACCESS_TOKEN&code=CODE&agentid=AGENTID";/*** 根據(jù)code獲取成員信息* @param access_token 調(diào)用接口憑證* @param code 通過員工授權(quán)獲取到的code,每次員工授權(quán)帶上的code將不一樣,code只能使用一次,5分鐘未被使用自動(dòng)過期* @param agentid 跳轉(zhuǎn)鏈接時(shí)所在的企業(yè)應(yīng)用ID* 管理員須擁有agent的使用權(quán)限;agentid必須和跳轉(zhuǎn)鏈接時(shí)所在的企業(yè)應(yīng)用ID相同* */public static 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");System.out.println("錯(cuò)誤碼:"+errorrcode+"————"+"錯(cuò)誤信息:"+errmsg);}}else{System.out.println("獲取授權(quán)失敗了,●﹏●,自己找原因。。。");}return UserId;}}
redirect_uri 重定向?OAuth2Servlet類:
package jsp.weixin.oauth2.util; /** * Oauth2 Servlet類 * @author Engineer.Jsp* @date 2014.10.13 */ import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import jsp.weixin.ParamesAPI.util.ParamesAPI; import jsp.weixin.ParamesAPI.util.WeixinUtil; public class OAuth2Servlet extends HttpServlet{private static final long serialVersionUID = 1L;public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {request.setCharacterEncoding("UTF-8");response.setCharacterEncoding("UTF-8"); PrintWriter out = response.getWriter();String code = request.getParameter("code"); if (!"authdeny".equals(code)) {String access_token = WeixinUtil.getAccessToken(ParamesAPI.corpId, ParamesAPI.secret).getToken();// agentid 跳轉(zhuǎn)鏈接時(shí)所在的企業(yè)應(yīng)用ID 管理員須擁有agent的使用權(quán)限;agentid必須和跳轉(zhuǎn)鏈接時(shí)所在的企業(yè)應(yīng)用ID相同String UserID = GOauth2Core.GetUserID(access_token, code, "您的agentid");request.setAttribute("UserID", UserID);}else{out.print("授權(quán)獲取失敗,至于為什么,自己找原因。。。");}// 跳轉(zhuǎn)到index.jsprequest.getRequestDispatcher("index.jsp").forward(request, response);} }
web.xml 配置信息
<?xml version="1.0" encoding="UTF-8"?> <web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"><welcome-file-list><welcome-file>index.jsp</welcome-file></welcome-file-list><!-- url-pattern中配置的/coreServlet用于指定該Servlet的訪問路徑 --> <servlet> <servlet-name>coreServlet</servlet-name> <servlet-class> jsp.weixin.servlet.util.CoreServlet </servlet-class> </servlet> <servlet-mapping> <servlet-name>coreServlet</servlet-name> <url-pattern>/coreServlet.do</url-pattern> </servlet-mapping> <!-- OAuth2 --><servlet> <servlet-name>oauth2Servlet</servlet-name> <servlet-class> jsp.weixin.oauth2.util.OAuth2Servlet </servlet-class> </servlet> <servlet-mapping> <servlet-name>oauth2Servlet</servlet-name> <url-pattern>/oauth2Servlet</url-pattern> </servlet-mapping> </web-app>
index.jsp:
<html><head><base href="<%=basePath%>"><title>This is WeiXinEnterprises @author Engineer-Jsp</title><meta http-equiv="pragma" content="no-cache"><meta http-equiv="cache-control" content="no-cache"><meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"><meta http-equiv="description" content="This is my page"><!--<link rel="stylesheet" type="text/css" href="styles.css">--></head><body><center>This is WeiXinEnterprises @author Engineer-Jsp. <br><%String UserID = request.getAttribute("UserID").toString(); out.print("UserID:"+UserID);%></center></body> </html>
說說重定向的用法,redirect_uri 地址的配置為: http://您自己填寫的企業(yè)號(hào)應(yīng)用可信域/項(xiàng)目名子/定向的Servlet,比如筆者的如下:
http://筆者的域名IP/WeiXinEnterprises/oauth2Servlet
用法:比如將處理好的GetGode( )方法放在view菜單setUrl( )里,因?yàn)?strong>GetGode( ) return ?字符串get_url_code,此字符串已經(jīng)經(jīng)過URL編碼了,
無須再次編碼,超鏈接也可以
之后呢,微信會(huì)將請(qǐng)求提交到我們?cè)谄髽I(yè)好應(yīng)用下配置的可信域,成功攜帶一個(gè)code參數(shù)到?redirect_uri 這個(gè)我們寫的重定向地址,比如筆者的
是?http://筆者的域名IP/WeiXinEnterprises/oauth2Servlet ,然后判斷code值,code有取到值的話就調(diào)用?GOauth2Core.GetUserID( )方法,
返回一個(gè)UserID,將它傳給了index.jsp
進(jìn)行留言和討論,大家互相學(xué)習(xí)和進(jìn)步,更多關(guān)于微信開發(fā)的源碼及接口,可加 QQ:471644097,進(jìn)入空間日志進(jìn)行查看
感謝您的下載使用,謝謝!祝您學(xué)習(xí)進(jìn)步!Engineer-Jsp自撰~~ ●﹏●
執(zhí)行效果截圖:
OAuth 2.0 授權(quán)圖:
轉(zhuǎn)載于:https://my.oschina.net/boltwu/blog/416470
總結(jié)
以上是生活随笔為你收集整理的微信企业号OAuth2.0授权-Java的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Hibernate, 想说爱你不容易
- 下一篇: 10个利用Eclipse调试Java的常