前言

weixin4j网页静默授权获取openid案例

**说明:**微信网页授权基础知识请参考官方文档。

静默授权获取OpenId

本 示例基于weixin4j开发,weixin4j是Java微信开发SDK,官网http://www.weixin4j.org/
本示例只演示思路,并抽象出了一个授权的公共方法,仅供参考

第一步:创建Weixin对象
第二步:使用Weixin.sns()获取组件SnsComponent
第三步:生成静默授权获取OpenId的跳转链接
第四步:从请求中获取微信授权code
第五步:用code换取微信用户OpenId


import org.weixin4j.Weixin;
import org.weixin4j.WeixinException;
import org.weixin4j.component.SnsComponent;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;/*** BaseController** @author yangqisheng* @date 2019/07/17*/
public class BaseController {private Weixin weixin = new Weixin();/*** 校验网页授权并获取openid** @param request 请求对象* @param response 输出对象* @param returnUrl 网页授权后跳转回链接* @return 是否已获取openid* @throws IOException*/private boolean validateOAuthOpenId(HttpServletRequest request, HttpServletResponse response,String returnUrl) throws IOException, WeixinException {//从session中获取openidObject oauth_openid = request.getSession().getAttribute("openid");//第一次访问,判断是否存在openid,不存在则说明没有进行授权访问,进行授权访问if (oauth_openid == null) {//获取Sns组件SnsComponent snsComponent = weixin.sns();//获取code,换取openidString code = request.getParameter("code");//如果没有获取到,则说明是直接访问页面链接,进行匿名获取if (code == null || code.equals("")) {//生成静默授权获取openid跳转链接String url = snsComponent.getOAuth2CodeBaseUrl(returnUrl);//跳转到微信授权页面response.sendRedirect(url);return false;} else {//获取授权得到的openidString openid = snsComponent.getOpenId(code);//设置当前用户request.getSession().setAttribute("openid", openid);//重定向到URLresponse.sendRedirect(returnUrl);return false;}}return true;}
}

步骤讲解

创建微信对象并获取SnsCompoment组件

我们引入开发包

<dependency><groupId>org.weixin4j</groupId><artifactId>weixin4j</artifactId><version>0.1.5</version>
</dependency>

这一步可以有很多方法,比如案例中的直接

Weixin weixin =  new Weixin()

也可以使用

Weixin weixin = WeixinBuilder.newInstance().build();

如果你使用springmvc开发的话,也 可以引入weixin4j-spring

<dependency><groupId>org.weixin4j</groupId><artifactId>weixin4j-spring</artifactId><version>1.0.0</version>
</dependency>

那么这个适合你就可以使用这种方式来创建weixin对象了
xml方式,在applicationContext.xml中配置bean

<!-- 定义微信工厂Bean -->
<bean id="weixinFactory" class="org.weixin4j.spring.WeixinFactoryBean"><!--property name="weixinConfig" ref="weixinConfig" /--><!--property name="weixinPayConfig" ref="weixinPayConfig" /--><!--property name="tokenLoader" ref="myTokenLoader" /--><!--property name="ticketLoader" ref="myTicketLoader" /-->
</bean>
<!-- 初始化微信模板Bean -->
<bean id="weixinTemplate" class="org.weixin4j.spring.WeixinTemplate"><constructor-arg index="0" ref="weixinFactory" ></constructor-arg>
</bean>

在代码中使用注解获取

@Autowired
private WeixinTemplate weixinTemplate;

对的 ,你没看错,在springmvc里,我们的Weixin对象被WeixinTemplate代理了,所以我们这样获取SnsComponent

SnsComponent snsComponent = weixinTemplate.sns();

如果你使用的是spring-boot,那就更简单了
直接引入spring-boot的配置

<dependency><groupId>org.weixin4j.spring.boot</groupId><artifactId>weixin4j-spring-boot-starter</artifactId><version>1.0.0</version>
</dependency>

在代码中使用注解即可获取

@Autowired
private WeixinTemplate weixinTemplate;

更多weixin4j的配置请参考这篇文章https://blog.csdn.net/yakson/article/details/82108649

生成网页授权获取openid跳转链接

关于网页授权的两种scope的区别说明
1、以snsapi_base为scope发起的网页授权,是用来获取进入页面的用户的openid的,并且是静默授权并自动跳转到回调页的。用户感知的就是直接进入了回调页(往往是业务页面)
2、以snsapi_userinfo为scope发起的网页授权,是用来获取用户的基本信息的。但这种授权需要用户手动同意,并且由于用户同意过,所以无须关注,就可在授权后获取该用户的基本信息。
3、用户管理类接口中的“获取用户基本信息接口”,是在用户和公众号产生消息交互或关注后事件推送后,才能根据用户OpenID来获取用户基本信息。这个接口,包括其他微信接口,都是需要该用户(即openid)关注了公众号后,才能调用成功的。

SnsCompomen组件里提供了静默授权(snsapi_base)和安全授权(snsapi_userinfo)

String url = snsComponent.getOAuth2CodeBaseUrl(returnUrl);

这段返回的就是微信 静默授权链接地址

https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect

用code换取openid

这一步是最简单的 ,看代码就清楚了

String openid = snsComponent.getOpenId(code);

好了 ,网页授权获取openid就讲到这里,另附一小段安全授权获取用户头像代码

安全授权获取微信用户昵称、头像

    /*** 校验网页授权并获取微信用户信息** @param request 请求对象* @param response 输出对象* @param returnUrl 网页授权后跳转回链接* @return 是否已获取openid* @throws IOException*/private boolean validateSnsUser(HttpServletRequest request, HttpServletResponse response,String returnUrl) throws IOException, WeixinException {//从session中获取openidObject oauth_openid = request.getSession().getAttribute("openid");//第一次访问,判断是否存在openid,不存在则说明没有进行授权访问,进行授权访问if (oauth_openid == null) {//获取Sns组件SnsComponent snsComponent = weixin.sns();//获取code,换取openidString code = request.getParameter("code");//如果没有获取到,则说明是直接访问页面链接,进行匿名获取if (code == null || code.equals("")) {//生成静默授权获取openid跳转链接String url = snsComponent.getOAuth2CodeUserInfoUrl(returnUrl);//跳转到微信授权页面response.sendRedirect(url);return false;} else {//获取授权得到微信用户信息SnsUser snsUser = snsComponent.getSnsUserByCode(code);System.out.println(snsUser.getNickname());System.out.println(snsUser.getHeadimgurl());//设置当前用户request.getSession().setAttribute("openid", snsUser.getOpenid());//重定向到URLresponse.sendRedirect(returnUrl);return false;}}return true;}

欢迎加入weixin4j官方VIP群学习,QQ群:473227872

Weixin4j微信开发网页授权获取openid案例相关推荐

  1. 微信开发 网页授权获取用户基本信息

    微信公众平台最近新推出微信认证,认证后可以获得高级接口权限,其中一个是OAuth2.0网页授权,很多朋友在使用这个的时候失败了或者无法理解其内容,希望我出个教程详细讲解一下,于是便有了这篇文章. 一. ...

  2. 微信开发网页授权获取用户信息

    如果用户在微信客户端中访问第三方网页,公众号可以通过微信网页授权机制,来获取用户基本信息,进而实现业务逻辑. 1. 关于OAuth2.0的说明 官方网站:http://oauth.net/   htt ...

  3. 微信开发——网页授权

    微信开发--网页授权 前期准备 前端 后端 前期准备 ①微信客户端中访问第三方页面,公众号可以通过网页登陆授权,获取微信用户的基本信息(头像.昵称等),实现业务逻辑.一切按照官方文档说明开发. ②安装 ...

  4. 微信公众平台-测试号网页授权-获取openid方法

    文章目录 1.创建自己的测试号 2.测试号管理信息填写(注意仔细一步步对照) 3.手动获取openid 4.使用SDK获取openid 1.创建自己的测试号 通过申请链接:https://mp.wei ...

  5. 微信开发之微信网页授权获取openid

    不知觉间已经接触了几次微信支付开发,而要进行微信支付就需要用户的唯一标识:openid.还记得第一次获取用户openid的时候就踩了很多坑.这两天又接触了一下,想着索性就把他记录下来,也便于以后查阅 ...

  6. 【微信】网页授权,获取CODE,OPENID,

    修改微信授权回调域名 1.在微信公众号请求用户网页授权之前,开发者需要先到公众平台官网中的开发者中心页配置授权回调域名.请注意,这里填写的是域名(是一个字符串),而不是URL,因此请勿加http:// ...

  7. 企业微信开发--网页授权(获取code)

    在企业微信中,我们可以开发企业应用.使用企业应用,我们可以访问到外部网站.那么外部网站如何获取到企业微信共享用户id呢?企业微信提供了OAuth的授权登录方式,可以让网页和企业微信共享用户ID,从而免 ...

  8. php 微信开发 网页授权登录,微信开发网页授权登录——2018年6月2日

    微信网页授权登录用户同意授权,获取code 通过code,获取网页的access_token 拉取用户信息(scope 为snsapi_userinfo) application\index\cont ...

  9. 微信开发网页授权认证

    微信网页授权有两种方式,分别是: 静默授权:以snsapi_base为scope发起的网页授权,是用来获取进入页面的用户的openid的,并且是静默授权并自动跳转到回调页的.用户感知的就是直接进入了回 ...

最新文章

  1. [BX]和loop指令03 - 零基础入门学习汇编语言25
  2. Heroku和Java –从新手到初学者,第2部分
  3. java 代码 点到线段的最短距离
  4. php 添加水印, 格式转换, 变换大小 Watermark, png2jpg, resize
  5. PHP导出excel
  6. mybatis11--多对多关联查询
  7. HDSF主要节点解说(二)工作原理
  8. 还没休年假的小伙伴注意了...事关你的合法权益
  9. 跨域总结(jquery,php)
  10. 算法四:回溯和分支界定
  11. 如何将EXCEL中的多个单元格内容合并在一个单元格内
  12. 开发webgl应用时,cesium快速定位相机角度、相机位置的方法
  13. WordPress插件|ThnBoV1.3.0-缩略图美化插件
  14. 小程序嵌套h5页面_快速小程序开发之微信小程序内嵌 H5
  15. 做到这四点,团队必定飞速成长
  16. python汉字转拼音首字母_python获取一组汉字拼音首字母的方法
  17. HTML哪些百度收录,四招让网站内容快速被百度收录
  18. 《高等代数》重要概念复习
  19. VC Spyglass CDC(二)常见的CDC处理方法
  20. 欧瑞变频器800参数设置_ABB ACS800变频器参数设定

热门文章

  1. 2016年终总结与来年计划
  2. 桌面虚拟化是该选用IDV还是VDI?
  3. 三种数据交换技术的比较
  4. java身份证号/手机号隐藏中间几位
  5. php 调试 打印错误
  6. 为表的添加中文属性时出现的Incorrect string value: '\xE7\x9A\x84\xE6\xB1\xEA...
  7. 从SAP顾问教JAVA开发说起
  8. 三维地质建模数据处理
  9. 全国首款二级分销小程序上线
  10. 考研英语 词根词缀单词71-80