微信官方文档

  • 登录微信公众号配置网页授权目录
  • 在项目中引入maven依赖
<dependency><groupId>com.foxinmy</groupId><artifactId>weixin4j-mp</artifactId><version>RELEASE</version>
</dependency>
  • 配置weixin4j.properties文件
# weixin4j的配置文件:如果没有请构造相应参数传入 如果有请保证在classpath的根目录下# 公众号信息 请按需填写
weixin4j.account={"id":"公众号APPID","secret":"公众号APPsecret",\
"components":[{"id":"应用组件的id","secret":"应用组件的secret"}],\
"mchId":"商户ID",\
"certificateKey":"默认商户ID",\
"certificateFile":"classpath:apiclient_cert.p12//退款的证书文件路径",\
"paySignKey":"支付密钥"}
  • 在sping的配置文件中配置weixin4j的核心API
<!-- 注入weixin4j核心类,并使用redis管理token -->
<bean id="weixinProxy" class="com.foxinmy.weixin4j.mp.WeixinProxy"><constructor-arg><bean class="com.foxinmy.weixin4j.cache.RedisCacheStorager" /></constructor-arg>
</bean><!-- 微信支付接口代理 start -->
<bean id="weixinPayProxy" class="com.foxinmy.weixin4j.payment.WeixinPayProxy" />
<!-- 微信支付接口代理 end -->
  • 接口实现
package net.seedor.controller.wechat;import com.foxinmy.weixin4j.mp.WeixinProxy;
import com.foxinmy.weixin4j.mp.api.OauthApi;
import com.foxinmy.weixin4j.mp.model.OauthToken;
import net.seedor.pojo.User;
import net.seedor.pojo.vo.UserVO;
import net.seedor.service.UserService;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
import java.io.PrintWriter;/*** Date: 2018/3/30* Author: Zp.Xiao* 微信登录*/
@CrossOrigin(origins = "*", maxAge = 3600)
@RestController
@RequestMapping("/login")
public class LoginController {private final String REDIRECTURL = "授权成功回调URL";private final Logger log = LoggerFactory.getLogger(this.getClass());@Autowiredprivate WeixinProxy weixinProxy;@Autowiredprivate UserService userService;/*** 微信授权登录* @param: state 前端页面的URL*/@RequestMapping(value = "/userLogin" , method = RequestMethod.GET)public ResponseEntity<ExecuteResult> userLogin(@RequestParam(name = "state") String state, HttpServletResponse response) {ExecuteResult<Object> result = new ExecuteResult<>();try {OauthApi oauthApi = weixinProxy.getOauthApi();String userAuthorizationURL = oauthApi.getUserAuthorizationURL(REDIRECTURL, state, "snsapi_userinfo");response.sendRedirect(userAuthorizationURL);} catch (Exception e) {e.printStackTrace();ExecuteResultUtil.setErrorResult(result,"接入登录失败");return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(result);}return ResponseEntity.ok(result);}/*** 授权成功回掉函数* @param: 授权成功返回的code* @param: homeUrl 前端传递的URL* @return user*/@RequestMapping("/getUserInfo")public ResponseEntity<ExecuteResult> userAuthenticator(@RequestParam(name = "code") String code , HttpServletResponse response ,@RequestParam(name = "state") String homeUrl) {ExecuteResult<Object> result = new ExecuteResult<>();OauthApi oauthApi = weixinProxy.getOauthApi();OauthToken oauthToken = null;try {UserVO userVO = userService.insertUser(code, oauthApi);//重定向到前端页面,并将token拼接到URL中response.sendRedirect(homeUrl + "?token=" + userVO.getToken());} catch (Exception e) {e.printStackTrace();ExecuteResultUtil.setErrorResult(result,"接入登录失败");return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(result);}return ResponseEntity.ok(result);}/*** 通过token获取用户信息接口*/@RequestMapping(value = "/checkUserLogin" , method = RequestMethod.POST)public ResponseEntity<ExecuteResult> checkUserLogin(@RequestParam("token")String userToken) {ExecuteResult<Object> result = new ExecuteResult<>();try {if(StringUtils.isNotBlank(userToken)) {result.setData(userService.queryUserForRedis(userToken));} else {return null;}} catch (Exception e) {e.printStackTrace();ExecuteResultUtil.setErrorResult(result,"当前没有用户登录");return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(result);}return ResponseEntity.ok(result);}
}

前端判断当前页面url中是否有token,如果有,调根据token获取用户信息接口,如果没有,请求微信登录接口。

  • service
package net.seedor.service.impl;import com.foxinmy.weixin4j.mp.api.OauthApi;
import com.foxinmy.weixin4j.mp.model.OauthToken;
import net.seedor.pojo.vo.UserVO;
import net.seedor.utils.EntityUtil;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;import net.seedor.common.service.redis.RedisService;
import net.seedor.pojo.User;
import java.util.UUID;/*** Date: 2018/3/30* Author: Zp.Xiao*/
@Service
public class UserServiceImpl implements UserService {@Autowiredprivate RedisService redisService;@Overridepublic UserVO insertUser(String code, OauthApi oauthApi) throws Exception {OauthToken oauthToken = oauthApi.getAuthorizationToken(code);//通过code获取用户的tokencom.foxinmy.weixin4j.mp.model.User userInfo = oauthApi.getAuthorizationUser(oauthToken);    //通过token获取用户信息//将用户信息保存到数据库//UUID生成token//key为token,value为用户头像昵称,保存到redisreturn userVO;}
}

ResponseEntity只是一个封装数据的类。
UserVO 中存储了用户标识的token与常用的数据。

微信公众号授权登录weixin4j开发相关推荐

  1. 微信公众号授权登录(asp.net + angular)

    微信是时下最火的,上面有数以亿计的用户,如果能接入微信将大大减低注册门槛,当然,接入微信登录是有门槛的.微信登录一般有两个,一个是微信开放平台授权登录,一个是微信公众号授权登录,两者都需要认证才可以继 ...

  2. Java在Web端微信公众号授权登录

    Java在Web端微信公众号授权登录 1.需要在微信开发平台配置 url:是自己服务中的微信需要推给你的地址(需要使用二级域名,可以去添加链接描述)购买9块钱1个月使用权或者白嫖都可 token 这个 ...

  3. H5 微信公众号 授权登录 前后端分离篇(资料准备+前端01)

    实现微信公众号授权登录,很简单,但是注意的地方要细心,小伙伴们跟着我的思路一起实现吧! 文章目录 一.帐号申请 1. 正式账号 2. 测试帐号 二.微信文档 2.1. 文档主页 2.2. 授权流程 2 ...

  4. RuoYi-App移动版(uni-app)微信公众号授权登录

    前言 略 uni-app 未提供微信公众号授权登录 uni.login是一个客户端API,统一封装了各个平台的各种常见的登录方式,包括App手机号一键登陆.三方登录(微信.微博.QQ.Apple.go ...

  5. Spring boot 项目(十三)——实现微信公众号授权登录获取用户信息

    引言 微信公众号开发中,必不可少的一环:公众号授权登录.获取微信用户信息 前期准备 内网渗透=>生成本地指定端口映射的外网域名 链接:内网渗透工具natapp使用详解 域名生成之后修改yml文件 ...

  6. 基于Spring Boo微信公众号授权登录获取用户信息(附带完整源码)

    简介 微信公众号开发中,必不少可少的一环:公众号授权登录.获取微信用户信息. 本地完整运行环境准备 内网渗透=>生成本地指定端口映射的外网域名 传送门:内网渗透工具Natapp使用详解 域名生成 ...

  7. vue移动端项目微信公众号授权登录

    前言 在我们做移动端项目时, 很多功能是以登录后才能进行后续的操作, 并且许多pc端的网页都有微信扫码登录功能, 为了做到pc与移动端统一, 往往移动端项目需要添加微信登录功能, 那么为什么手机端不能 ...

  8. 【SpringBoot学习】46、SpringBoot 集成 Uniapp 实现微信公众号授权登录

    文章目录 一.公众号环境搭建 二.Spring Boot 集成微信公众号 1.application.yml 微信配置 2.控制层接口 三.Uniapp 实现授权登录 一.公众号环境搭建 本篇文章使用 ...

  9. uni-app 对FastAdmin微信公众号授权登录实例

    uni-app 对FastAdmin微信公众号授权登录实例 uniapp 微信公众号授权登录代码 跳转获取code 提交fastadmin 第三方登录插件 进行登录验证 存储token onLoad( ...

最新文章

  1. echarts 坐标自适应_echarts 同一页面,多个图表 页面大小自适应
  2. 压缩SQL数据库日志-收缩SQL数据库日志-备份SQL数据库日志-删除SQL数据库日志
  3. angr学习笔记(4) (寄存器符号化)
  4. 轻松构建基于 Serverless 架构的弹性高可用音视频处理系统
  5. 裘宗燕-数据结构与算法python描述-ppt及源代码
  6. POJ - 2248 Addition Chains(dfs+迭代加深)
  7. HDU - 2204 Eddy‘s爱好(尚未完全解决)
  8. ESP8266 多通道
  9. js中的forEach、for in 、for of之间的区别
  10. 15.导入网表及status介绍[原创]
  11. oracle 快速入门之第一章 数据库基础
  12. Apple EDI X12 业务报文解析(一)—— 850采购订单
  13. textarea输入框光标定位问题
  14. STM32+ESP8266连接电脑Qt网络上位机——QT篇
  15. 2019-2020浴血凤凰DNF自动化辅助开发教程
  16. 茅指数成分股投资收益可视化
  17. MATLAB图像基本操作(信息查询/文件读取/写入/显示)
  18. 奥数-------i3*6528=3i*8256 让我们猜猜i的值
  19. 海康工业相机Python调用实现拍照
  20. revit应用程序无法启动_revit无法运行外部

热门文章

  1. GNU Radio系列教程(二):初级篇之GNU Radio介绍
  2. 医院数字化如何实现?看这篇经典实践案例
  3. 关于虚拟机镜像无法检测
  4. android 卡片放大变详情页,ZoomHeader 神交互!饿了么 imageView 放大变为详情页 @codeKK Android开源站...
  5. 将json数据格式转化成excel插件JsonExportExcel.js的使用demo
  6. python分析数据的相关性质_理解数据的性质_Python数据分析实战应用_数据挖掘与分析视频-51CTO学院...
  7. 017 连续之一点连续、区间连续;间断之可去间断点、跳跃间断点
  8. 程序员的另一条出路:在赚够钱后,35 岁考公上岸。
  9. 利用python爬取淘宝的商品图片!
  10. qc35 说明书_Bose QC35耳机怎么使用,Bose QC35耳机使用教程