java 微信请求_Java web微信请求拦截器(微信公众号开发)

该博客介绍了如何在Javaweb中实现一个微信请求拦截器,用于在微信公众号开发中获取微信用户信息。当用户通过微信浏览器访问时,拦截器会检查session中的用户信息,如果不存在,则通过code从微信API获取openid和access_token,进一步获取用户的详细信息并存入session。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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);

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值