微信公众号授权登录weixin4j开发
微信官方文档
- 登录微信公众号配置网页授权目录
- 在项目中引入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开发相关推荐
- 微信公众号授权登录(asp.net + angular)
微信是时下最火的,上面有数以亿计的用户,如果能接入微信将大大减低注册门槛,当然,接入微信登录是有门槛的.微信登录一般有两个,一个是微信开放平台授权登录,一个是微信公众号授权登录,两者都需要认证才可以继 ...
- Java在Web端微信公众号授权登录
Java在Web端微信公众号授权登录 1.需要在微信开发平台配置 url:是自己服务中的微信需要推给你的地址(需要使用二级域名,可以去添加链接描述)购买9块钱1个月使用权或者白嫖都可 token 这个 ...
- H5 微信公众号 授权登录 前后端分离篇(资料准备+前端01)
实现微信公众号授权登录,很简单,但是注意的地方要细心,小伙伴们跟着我的思路一起实现吧! 文章目录 一.帐号申请 1. 正式账号 2. 测试帐号 二.微信文档 2.1. 文档主页 2.2. 授权流程 2 ...
- RuoYi-App移动版(uni-app)微信公众号授权登录
前言 略 uni-app 未提供微信公众号授权登录 uni.login是一个客户端API,统一封装了各个平台的各种常见的登录方式,包括App手机号一键登陆.三方登录(微信.微博.QQ.Apple.go ...
- Spring boot 项目(十三)——实现微信公众号授权登录获取用户信息
引言 微信公众号开发中,必不可少的一环:公众号授权登录.获取微信用户信息 前期准备 内网渗透=>生成本地指定端口映射的外网域名 链接:内网渗透工具natapp使用详解 域名生成之后修改yml文件 ...
- 基于Spring Boo微信公众号授权登录获取用户信息(附带完整源码)
简介 微信公众号开发中,必不少可少的一环:公众号授权登录.获取微信用户信息. 本地完整运行环境准备 内网渗透=>生成本地指定端口映射的外网域名 传送门:内网渗透工具Natapp使用详解 域名生成 ...
- vue移动端项目微信公众号授权登录
前言 在我们做移动端项目时, 很多功能是以登录后才能进行后续的操作, 并且许多pc端的网页都有微信扫码登录功能, 为了做到pc与移动端统一, 往往移动端项目需要添加微信登录功能, 那么为什么手机端不能 ...
- 【SpringBoot学习】46、SpringBoot 集成 Uniapp 实现微信公众号授权登录
文章目录 一.公众号环境搭建 二.Spring Boot 集成微信公众号 1.application.yml 微信配置 2.控制层接口 三.Uniapp 实现授权登录 一.公众号环境搭建 本篇文章使用 ...
- uni-app 对FastAdmin微信公众号授权登录实例
uni-app 对FastAdmin微信公众号授权登录实例 uniapp 微信公众号授权登录代码 跳转获取code 提交fastadmin 第三方登录插件 进行登录验证 存储token onLoad( ...
最新文章
- echarts 坐标自适应_echarts 同一页面,多个图表 页面大小自适应
- 压缩SQL数据库日志-收缩SQL数据库日志-备份SQL数据库日志-删除SQL数据库日志
- angr学习笔记(4) (寄存器符号化)
- 轻松构建基于 Serverless 架构的弹性高可用音视频处理系统
- 裘宗燕-数据结构与算法python描述-ppt及源代码
- POJ - 2248 Addition Chains(dfs+迭代加深)
- HDU - 2204 Eddy‘s爱好(尚未完全解决)
- ESP8266 多通道
- js中的forEach、for in 、for of之间的区别
- 15.导入网表及status介绍[原创]
- oracle 快速入门之第一章 数据库基础
- Apple EDI X12 业务报文解析(一)—— 850采购订单
- textarea输入框光标定位问题
- STM32+ESP8266连接电脑Qt网络上位机——QT篇
- 2019-2020浴血凤凰DNF自动化辅助开发教程
- 茅指数成分股投资收益可视化
- MATLAB图像基本操作(信息查询/文件读取/写入/显示)
- 奥数-------i3*6528=3i*8256 让我们猜猜i的值
- 海康工业相机Python调用实现拍照
- revit应用程序无法启动_revit无法运行外部
热门文章
- GNU Radio系列教程(二):初级篇之GNU Radio介绍
- 医院数字化如何实现?看这篇经典实践案例
- 关于虚拟机镜像无法检测
- android 卡片放大变详情页,ZoomHeader 神交互!饿了么 imageView 放大变为详情页 @codeKK Android开源站...
- 将json数据格式转化成excel插件JsonExportExcel.js的使用demo
- python分析数据的相关性质_理解数据的性质_Python数据分析实战应用_数据挖掘与分析视频-51CTO学院...
- 017 连续之一点连续、区间连续;间断之可去间断点、跳跃间断点
- 程序员的另一条出路:在赚够钱后,35 岁考公上岸。
- 利用python爬取淘宝的商品图片!
- qc35 说明书_Bose QC35耳机怎么使用,Bose QC35耳机使用教程