java 微信请求_Java web微信请求拦截器(微信公众号开发)
Java web微信请求拦截器(微信公众号开发),获取微信用户信息。
package com.mvc.interceptor;
import com.alibaba.fastjson.JSONObject;
import com.mvc.utils.HttpUtil;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.net.URLEncoder;
/**
* 微信请求拦截器
*
* @author smallk
* @date 2018/12/3 0:39
*/
public class WxRequestInterceptor implements HandlerInterceptor {
@Value("${wx.appId}")
private String appId;
@Value("${wx.appSecret}")
private String appSecret;
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object obj, Exception e) throws Exception {
//
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object obj, ModelAndView e) throws Exception {
//
}
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object obj) throws Exception {
String backURL = request.getRequestURL().toString();
if (request.getQueryString() != null) {
backURL += "?" + request.getQueryString();
}
HttpSession session = request.getSession();
String userAgent = request.getHeader("User-Agent");
//判断是否是微信浏览器
if (userAgent == null || !userAgent.toLowerCase().contains("micromessenger")) {
return true;
}
JSONObject wxUserInfoJson = (JSONObject) session.getAttribute("sessionWxUserInfoJson");
if (wxUserInfoJson != null) {
return true;
}
String code = request.getParameter("code");
// 第一次访问
if (StringUtils.isBlank(code)) {
response.sendRedirect("https://open.weixin.qq.com/connect/oauth2/authorize?appid="
+ appId
+ "&redirect_uri="
+ URLEncoder.encode(backURL, "UTF-8")
+ "&response_type=code&scope=snsapi_userinfo&state=1#wechat_redirect");
return false;
}
// 微信认证回来
JSONObject authJson = this.getOpenId(appId, appSecret, code);
String openId = authJson.getString("openid");
if (openId == null) {
return false;
}
String accessToken = authJson.getString("access_token");
wxUserInfoJson = this.getWxUserInfo(accessToken, openId);
session.setAttribute("sessionWxUserInfoJson", wxUserInfoJson);
return true;
}
private JSONObject getOpenId(String appId, String appSecret, String code) throws Exception {
String url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid="
+ appId
+ "&secret="
+ appSecret
+ "&code="
+ code
+ "&grant_type=authorization_code";
String res = HttpUtil.getSSL(url, null, 0, 0);
return JSONObject.parseObject(res);
}
private JSONObject getWxUserInfo(String accessToken, String openId) throws Exception {
String url = "https://api.weixin.qq.com/sns/userinfo?access_token="
+ accessToken
+ "&openid="
+ openId
+ "&lang=zh_CN";
String res = HttpUtil.getSSL(url, null, 0, 0);
return JSONObject.parseObject(res);
}
}
java 微信请求_Java web微信请求拦截器(微信公众号开发)相关推荐
- 微信公众号开发 - token获取(保证同一时间段内只请求一次)
微信公众号开发文章目录 1.微信公众号开发 - 环境搭建 2.微信公众号开发 - 配置表设计以及接入公众号接口开发 3.微信公众号开发 - token获取(保证同一时间段内只请求一次) 4.微信公众号 ...
- Java微信公众号开发之网页授权获取用户基本信息
本篇博客讲解的网页授权只需要前端传递一个backUrl(回调地址) 到后台接口,后台接口会完成整个授权流程,无需前端做更多工作: 一. 前言 微信公众号开发,需要用到网页授权获取用户信息,通过OAut ...
- 慕课网_《Java微信公众号开发进阶》学习总结
时间:2017年08月12日星期六 说明:本文部分内容均来自慕课网.@慕课网:http://www.imooc.com 教学源码:http://img.mukewang.com/down/... 学习 ...
- Java微信公众号开发微信网页授权之前端传递code方式获取用户信息
本片博客讲解的网页授权分为两步,前端先传递backUrl(回调地址)到后台网页授权接口,该接口拿到回调地址后组装授权连接,重定向到前端页面,前端页面截取Code,传入后端获取用户信息方法,获取用户信息 ...
- Java微信公众号开发(一:接入平台,验证token)
Java微信公众号开发(一:接入平台,验证token) 开发环境: 环境:JDK1.8 框架:springBoot 首先,在我们接入微信公众平台之前,我们需要注册微信公众号的开发者账号,获取开发者ID ...
- 微信公众号开发-java版 腾讯课堂(开发接入)
微信公众号开发-java版 腾讯课堂 微信测试号申请地址: 微信二维码直接扫描登录 1.新建web项目 2.内网穿透映射公网ip (免费隧道需要支付宝实名认证) 3.微信接入验证签名 TOKEN自己 ...
- Java 微信公众号开发_学习笔记
一.课程介绍 本套课程的学习内容,开发语言 微信公众号介绍,申请以及后台设置详解 编辑模式下的消息回复,菜单建立,素材管理等 开发前的环境搭建以及工具准备 开发者模式的切换.以及消息的接收与响应 百度 ...
- 微信公众号开发Java版
源码地址: https://github.com/ishuaige/myWxMp https://gitee.com/niumazlb/myWxMp 一.申请微信开发者账号 注册账号 申请测试号 这里 ...
- Java+微信公众号开发学习总结(一)
这两天自己想学习微信公众号开发,于是在网上搜索并上手练习,在这个过程中因为各种问题,(描述不完整,有的文章不知道怎么就蹦出个新的常量,也没说在哪定义的,还有jar包版本的问题坑了我一天的时间)所以特此 ...
最新文章
- OpenCV3.2.0+VS2017在window10开发环境配置记录
- MySQL 字符串删除表情符_PHP处理字符中的emoji表情(判断/移除/存储)
- 算法 求和为n的连续正整数序列 C
- 案例式c语言程序设计陈明,C语言程序设计教程 清华大学出版社 陈明主编 第1章答案...
- 如何判断基因组的重复区域_Nat Comm. | 15万人类基因组中多核苷酸变异(MNV)的起源及功能研究...
- Ubuntu安装教程【超多图】
- php 输出方法,PHP输出打印方法
- Kafka Connect简介
- SQLServer还原 指定的转换无效解决方法
- 如何还原桌面图标_如何为Windows 10桌面图标还原或更改文本的默认外观?
- UPS分类:直流UPS和交流UPS
- linux使用苹果字体,Ubuntu 8.04字体美化之安装苹果丽黑字体教程(图)
- python的前端个web的前端有什么区别_用Python 操作Web 前端 基础
- 当下的互联网时代,“急功近利”不是坏事
- Servlet教程第6讲笔记
- 快进来,详解MySQL游标
- openwrt打印机服务器稳定性,软路由 篇一:openwrt共享打印机【上】【完美解决】HP10系打印异常问题...
- 天龙八部3d最新服务器,天龙八部3D妙笔生花新服务器开启公告
- ddns动态域名注册
- 【bat】bat批处理安装与卸载软件,自动安装
热门文章
- mysql中存储引擎是啥_mysql中的存储引擎
- ts定义html是什么类型,TypeScript—类型定义文件(*.d.ts)
- 计算机类大一需要学什么原因,大一新生上大学要不要带电脑?我认为不论什么专业,电脑是必需品...
- linux系统内核官网,五年26个版本:Linux系统内核全程回顾
- weblogic 用的人还多吗_2020年劳务工越来越多,出现这种“怪现状”,是发展的需求吗?...
- 一人之力,毁掉一个开发者活动
- pi数据库系统中国服务器,基于PI数据库的服务器实时监控系统研究与开发
- mnist手写数字识别_手写数字识别
- python替换缺失值_详解Pandas 处理缺失值指令大全
- OpenCV-图像特征harris角点检测/SIFT函数/特征匹配-05