微信企业号OAuth2.0授权-Java
为什么80%的码农都做不了架构师?>>>
我也是醉了,中午做个饭这么难吃!连自己都看不下去了!怀着沉重的心情把微信企业号OAuth2.0授权看了看,感觉与公众号差别没什么,相信开发过公众号的朋友都知道,首先我们看看官方API文档
企业应用中的URL链接(包括自定义菜单或者消息中的链接),可以通过OAuth2.0来获取员工的身份信息。
注意,此URL的域名,必须完全匹配企业应用设置项中的'可信域名',否则获取用户信息时会返回50001错误码
这里的可信域呢,跟公众号的的授权回调很相似,简单地说就是在这个域名下,所有的页面都可授权,不需要添加http://,只需要域名,比如http://www.baidu.com,只需要填写www.baidu.com,SAE、BAE也是一样,笔者采用的是80端口外网IP域,只需要填写IP就OK了,另外
好像企业号还支持443端口,我们这说到的域就是更个服务器下所有项目的页面都可以授权的,解决域问题之后,还需要大家注意的是,就是授权的
redirect_uri 参数 授权后重定向的回调链接地址,请使用urlencode对链接进行处理,否则会提示 redirect_uri 错误
回调地址和换取个人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";/*** 企业获取code地址处理* @param appid 企业的CorpID* @param redirect_uri 授权后重定向的回调链接地址,请使用urlencode对链接进行处理* @param response_type 返回类型,此时固定为:code* @param scope 应用授权作用域,此时固定为:snsapi_base* @param state 重定向后会带上state参数,企业可以填写a-zA-Z0-9的参数值* @param #wechat_redirect 微信终端使用此参数判断是否需要带上身份信息* 员工点击后,页面将跳转至 redirect_uri/?code=CODE&state=STATE,企业可根据code参数获得员工的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";/*** 根据code获取成员信息* @param access_token 调用接口凭证* @param code 通过员工授权获取到的code,每次员工授权带上的code将不一样,code只能使用一次,5分钟未被使用自动过期* @param agentid 跳转链接时所在的企业应用ID* 管理员须拥有agent的使用权限;agentid必须和跳转链接时所在的企业应用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("错误码:"+errorrcode+"————"+"错误信息:"+errmsg);}}else{System.out.println("获取授权失败了,●﹏●,自己找原因。。。");}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 跳转链接时所在的企业应用ID 管理员须拥有agent的使用权限;agentid必须和跳转链接时所在的企业应用ID相同String UserID = GOauth2Core.GetUserID(access_token, code, "您的agentid");request.setAttribute("UserID", UserID);}else{out.print("授权获取失败,至于为什么,自己找原因。。。");}// 跳转到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://您自己填写的企业号应用可信域/项目名子/定向的Servlet,比如笔者的如下:
http://笔者的域名IP/WeiXinEnterprises/oauth2Servlet
用法:比如将处理好的GetGode( )方法放在view菜单setUrl( )里,因为GetGode( ) return 字符串get_url_code,此字符串已经经过URL编码了,
无须再次编码,超链接也可以
之后呢,微信会将请求提交到我们在企业好应用下配置的可信域,成功携带一个code参数到 redirect_uri 这个我们写的重定向地址,比如笔者的
是 http://笔者的域名IP/WeiXinEnterprises/oauth2Servlet ,然后判断code值,code有取到值的话就调用 GOauth2Core.GetUserID( )方法,
返回一个UserID,将它传给了index.jsp
WeiXinEnterprises 应用用于学习和交流企业号接口开发,其中如果有什么不对的请指正,或者你自己有更好的看法,可在CSDN
进行留言和讨论,大家互相学习和进步,更多关于微信开发的源码及接口,可加 QQ:471644097,进入空间日志进行查看
感谢您的下载使用,谢谢!祝您学习进步!Engineer-Jsp自撰~~ ●﹏●
执行效果截图:
OAuth 2.0 授权图:
转载于:https://my.oschina.net/boltwu/blog/416470
微信企业号OAuth2.0授权-Java相关推荐
- php微信企业号oauth2.0,微信企业号:OAuth2.0微信授权验证
微信企业号:OAuth2.0微信授权验证 企业应用中的 URL 链接(包括自定义菜单或者消息中的链接),可以通过 OAuth2.0 验证接口来获取成员的身份信息.使用步骤和方法如下: 1.先开发要使用 ...
- Java微信公众平台开发(十六)--微信网页授权(OAuth2.0授权)获取用户基本信息
转自:http://www.cuiyongzhi.com/post/78.html 好长时间没有写文章了,主要是最近的工作和生活上的事情比较多而且繁琐,其实到现在我依然还是感觉有些迷茫,最后还是决定静 ...
- 微信公众号网页OAuth2.0授权登录并获取用户信息(SpringBoot实现)
微信公众号网页OAuth2.0授权登录并获取用户信息(SpringBoot实现) 文章目录 微信公众号网页OAuth2.0授权登录并获取用户信息(SpringBoot实现) 准备工作 开发思路 具体代 ...
- 微信公众平台OAuth2.0授权
2019独角兽企业重金招聘Python工程师标准>>> 微信公众平台OAuth2.0授权详细步骤如下: 1. 用户关注微信公众账号. 2. 微信公众账号提供用户请求授权页面URL. ...
- java 32位授权码_Java实现OAuth2.0授权码方式
Java实现OAuth2.0授权码方式 前面介绍了OAuth2.0和授权方式,可以参考以下文章: 今天就用Java来验证OAuth2.0授权方式的授权码式,我们Spring Cloud的OAuth来实 ...
- oauth2.0授权码模式详解
Python微信订餐小程序课程视频 https://edu.csdn.net/course/detail/36074 Python实战量化交易理财系统 https://edu.csdn.net/cou ...
- OAuth2.0授权码模式学习
OAuth2.0授权码模式学习 四种授权方式 1,授权码模式 2,简化模式 3,密码模式 4,客户端模式 授权码模式 四种授权模式中最完成,最严密的授权. (1)用户访问客户端,后者将前者导入认证服务 ...
- 芋道 spring security oauth2 入门_Spring官方宣布:新的Spring OAuth2.0授权服务器已经来了
1. 前言 记不记得之前发过一篇文章Spring 官方发起Spring Authorization Server 项目.该项目是由Spring Security主导的一个社区驱动的.独立的孵化项目.由 ...
- OAuth2.0授权协议的一个简单解释
本文来简单说下OAuth 2.0授权协议 文章目录 概述 快递员问题 授权机制的设计 互联网场景 令牌与密码 本文小结 概述 OAuth 2.0 是目前最流行的授权机制,用来授权第三方应用,获取用户数 ...
最新文章
- NASM汇编helloworld图解
- 阿里P7架构师谈:MySQL慢查询优化、索引优化、以及表等优化总结
- 目录遍历漏洞:入侵检测php程序中的目录遍历漏洞,目录浏览(目录遍历)漏洞
- 实战ELK(5) Logstash 入门
- 基于JDK7 NIO2的高性能web服务器实践之二(转)
- xmpp 与服务器连接并身份验证成功
- Java中throw和throws的区别
- ORA-00972: identifier is too long问题解决
- SharePoint 2010 沙盒开发
- linux 什么是SO文件
- [置顶] 礼物:《红孩儿引擎内功心法修练与Cocos2d-x》之结点系统(场景,层,精灵)...
- 给div添加蒙版(遮罩?)
- PPT文件不能编辑可以这样解决
- 优秀课件笔记之计算机网络基础
- Eclipse中使用Maven搭建SSM框架
- 哈希/图论-蔡老板分果子
- [转]国外人气最旺的软件测试网站
- Exceeded maximum number of retries. Exhausted all hosts available for retrying build failures
- Java零基础学习Day01(搭配视频)
- opencv HoughLine 理解