为什么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相关推荐

  1. php微信企业号oauth2.0,微信企业号:OAuth2.0微信授权验证

    微信企业号:OAuth2.0微信授权验证 企业应用中的 URL 链接(包括自定义菜单或者消息中的链接),可以通过 OAuth2.0 验证接口来获取成员的身份信息.使用步骤和方法如下: 1.先开发要使用 ...

  2. Java微信公众平台开发(十六)--微信网页授权(OAuth2.0授权)获取用户基本信息

    转自:http://www.cuiyongzhi.com/post/78.html 好长时间没有写文章了,主要是最近的工作和生活上的事情比较多而且繁琐,其实到现在我依然还是感觉有些迷茫,最后还是决定静 ...

  3. 微信公众号网页OAuth2.0授权登录并获取用户信息(SpringBoot实现)

    微信公众号网页OAuth2.0授权登录并获取用户信息(SpringBoot实现) 文章目录 微信公众号网页OAuth2.0授权登录并获取用户信息(SpringBoot实现) 准备工作 开发思路 具体代 ...

  4. 微信公众平台OAuth2.0授权

    2019独角兽企业重金招聘Python工程师标准>>> 微信公众平台OAuth2.0授权详细步骤如下: 1. 用户关注微信公众账号. 2. 微信公众账号提供用户请求授权页面URL. ...

  5. java 32位授权码_Java实现OAuth2.0授权码方式

    Java实现OAuth2.0授权码方式 前面介绍了OAuth2.0和授权方式,可以参考以下文章: 今天就用Java来验证OAuth2.0授权方式的授权码式,我们Spring Cloud的OAuth来实 ...

  6. oauth2.0授权码模式详解

    Python微信订餐小程序课程视频 https://edu.csdn.net/course/detail/36074 Python实战量化交易理财系统 https://edu.csdn.net/cou ...

  7. OAuth2.0授权码模式学习

    OAuth2.0授权码模式学习 四种授权方式 1,授权码模式 2,简化模式 3,密码模式 4,客户端模式 授权码模式 四种授权模式中最完成,最严密的授权. (1)用户访问客户端,后者将前者导入认证服务 ...

  8. 芋道 spring security oauth2 入门_Spring官方宣布:新的Spring OAuth2.0授权服务器已经来了

    1. 前言 记不记得之前发过一篇文章Spring 官方发起Spring Authorization Server 项目.该项目是由Spring Security主导的一个社区驱动的.独立的孵化项目.由 ...

  9. OAuth2.0授权协议的一个简单解释

    本文来简单说下OAuth 2.0授权协议 文章目录 概述 快递员问题 授权机制的设计 互联网场景 令牌与密码 本文小结 概述 OAuth 2.0 是目前最流行的授权机制,用来授权第三方应用,获取用户数 ...

最新文章

  1. NASM汇编helloworld图解
  2. 阿里P7架构师谈:MySQL慢查询优化、索引优化、以及表等优化总结
  3. 目录遍历漏洞:入侵检测php程序中的目录遍历漏洞,目录浏览(目录遍历)漏洞
  4. 实战ELK(5) Logstash 入门
  5. 基于JDK7 NIO2的高性能web服务器实践之二(转)
  6. xmpp 与服务器连接并身份验证成功
  7. Java中throw和throws的区别
  8. ORA-00972: identifier is too long问题解决
  9. SharePoint 2010 沙盒开发
  10. linux 什么是SO文件
  11. [置顶] 礼物:《红孩儿引擎内功心法修练与Cocos2d-x》之结点系统(场景,层,精灵)...
  12. 给div添加蒙版(遮罩?)
  13. PPT文件不能编辑可以这样解决
  14. 优秀课件笔记之计算机网络基础
  15. Eclipse中使用Maven搭建SSM框架
  16. 哈希/图论-蔡老板分果子
  17. [转]国外人气最旺的软件测试网站
  18. Exceeded maximum number of retries. Exhausted all hosts available for retrying build failures
  19. Java零基础学习Day01(搭配视频)
  20. opencv HoughLine 理解

热门文章

  1. 图解Oracle 12c 触发器实例
  2. python数组排序(递归实现)
  3. Hadoop 故障整理
  4. 【DP、线段树优化】琪露诺
  5. scp和rsync的区别和常用参数
  6. 用iptables来防止web服务器被CC攻击
  7. 如何确定电脑主板坏了_光纤收发器容易坏吗?如何判断光纤收发器的故障?
  8. 神经网络谐振子模型的一组数据
  9. mysql large pages_Linux HugePages及MySQL 大页配置
  10. 悬浮框_纯HTML实现某宝优惠券、商品列表和活动悬浮等布局(文末有源码)