强烈推荐使用一个工具包,在maven的中心仓库中搜索"weixin-java"就可以搜索到,感谢这位大佬的作品,大大简化了微信端开发的难度。

接下来是一个简单例子,是我在我的实际项目中抽取出来的一部分,项目使用的是springboot框架,但是无论使用什么框架微信授权的步骤和原理是一样的。

这个例子是微信公众号授权的例子。

代码如下:

package cn.smileyan.boot.main.controler;import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;import cn.smileyan.boot.main.entity.User;
import cn.smileyan.boot.main.service.UserService;
import lombok.extern.slf4j.Slf4j;
import me.chanjar.weixin.common.api.WxConsts;
import me.chanjar.weixin.common.exception.WxErrorException;
import me.chanjar.weixin.mp.api.WxMpInMemoryConfigStorage;
import me.chanjar.weixin.mp.api.WxMpService;
import me.chanjar.weixin.mp.api.impl.WxMpServiceImpl;
import me.chanjar.weixin.mp.bean.result.WxMpOAuth2AccessToken;
import me.chanjar.weixin.mp.bean.result.WxMpUser;@Controller
@Slf4j
@RequestMapping("/login")
@CrossOrigin
public class LoginControler {@Autowiredprivate UserService userService;@Value("${wechat.appid}")private String appid;@Value("${wechat.appsecret}")private String appsecret;@Value("${wechat.login_url}")private String login_url;             // 授权网址@Value("${wechat.success_login_url}")private String success_login_url;        // 登录成功后返回的网页private WxMpService wxMpService;/*** 提示用户点击同意,授权登录* @return*/@GetMapping("/welcome")public String  welcome() {// 1.根据appid和appsecret和回调地址配置微信授权WxMpInMemoryConfigStorage wxMpConfigStorage = new WxMpInMemoryConfigStorage();wxMpConfigStorage.setAppId(appid);wxMpConfigStorage.setSecret(appsecret);wxMpService = new WxMpServiceImpl();wxMpService.setWxMpConfigStorage(wxMpConfigStorage);// 完成配置后进行跳转String oauth2buildAuthorizationUrl = wxMpService.oauth2buildAuthorizationUrl(login_url, WxConsts.OAuth2Scope.SNSAPI_USERINFO,  null);System.out.println(oauth2buildAuthorizationUrl);return "redirect:" + oauth2buildAuthorizationUrl;}/*** 通过code拿到数据openid* @param code* @param returnUrl* @return 进行网站跳转*/@GetMapping("/login")public String login(@RequestParam("code") String code,@RequestParam("state") String returnUrl,HttpServletRequest request,HttpServletResponse response) {System.out.println("code=="+code);// 2.根据code换取AccessTokenWxMpOAuth2AccessToken wxMpOAuth2AccessToken = null;try {wxMpOAuth2AccessToken = wxMpService.oauth2getAccessToken(code);} catch (WxErrorException e) {e.printStackTrace();}// 3.进一步获取用户信息String openId = wxMpOAuth2AccessToken.getOpenId();System.out.println("openid="+openId);// 拿到用户的基本信息WxMpUser wxMpUser=null; try {wxMpUser = wxMpService.oauth2getUserInfo(wxMpOAuth2AccessToken, null);} catch (WxErrorException e) {e.printStackTrace();}// 后面的内容根据需要编写,微信授权到此已经结束了。// 判断这个用户是否已经注册User user=newFromWechat(wxMpUser);User loginedUser = userService.registerOrLogin(user);String url_add = "user_id="+loginedUser.getUser_id()+"&portrait_url="+loginedUser.getPortrait_url();return "redirect:" + success_login_url+"?"+url_add;}}

基本步骤也是非常简单的,核心配置类WxMpInMemoryConfigStorage,在这个类的对象中设置appid和appsecret,然后设置一下回调地址,然后就是微信授权了。

注意需要在公众号中配置回调地址的域名。

注意如果已经引入httpclient,需要删除httpclient,解决与weixin-java-mp的冲突问题。

<dependency><groupId>org.apache.httpcomponents</groupId><artifactId>httpclient</artifactId><version>4.1.1</version>
</dependency>

另外如果微信授权过程中牵扯到 跨域问题。可以参考我的另外一个博客,地址如下:https://blog.csdn.net/smileyan9/article/details/82467910

【微信授权】极其简单的实现方法相关推荐

  1. 【H5微信授权】简单实现H5页面微信授权功能,微信开发者工具报错 系统错误,错误码-1,undefined解决办法【详细】

    前言 最近写到了H5公众号,需要微信授权的功能. 这里记录一下授权的流程和踩了个坑 图片 授权代码执行后会跳转到授权的地方,没有授权的会有确认授权,授权过得会这样,直接自动登录,然后再跳转到中转页 授 ...

  2. 关于实现平台账号密码登录后,再进行微信授权认证步骤的实现方法

    1.前端通过账号密码验证码请求后端 2.后端验证账号密码验证码成功后,(缓存对应的用户信息到redis,状态为未认证),并生成一个微信授权登录的url sWecatAuth=true qrCode=& ...

  3. 【BAT】【网友小需求】多开微信,超简单!(简单粗暴方法仅需就两步!)

    多开微信 最最最简单粗暴的方法 最最简单且稳定方法 最最最简单粗暴的方法 鼠标放在微信图标上,鼠标左击和按键盘Enter键同时按,按几下开几个. 最最简单且稳定方法 新建一个.txt文本文档 填写内容 ...

  4. 微信html5网站 集成,H5页面接入微信授权

    授权步骤 用户同意授权,获取code 通过code换取网页授权access_token 拉取用户信息(需scope为 snsapi_userinfo) 项目依赖 SpringBoot:2.1.4.RE ...

  5. node.js实现微信授权登录,最详细最简单小白教程。。

    使用到的中间件,如已安装请忽略 npm install express -g npm install request --save 首先想要微信授权,必须注册的有公众号,进入微信公众号平台-开发-开发 ...

  6. 微信h5授权获取用户openId的方法和步骤,用于用户登录和注册

    微信公众号的配置和专业名词就不介绍了,不懂的问度娘,我就直接上代码  点击下载完整demo 先说一下我的demo放的位置: 微信H5授权登录分两种: ① 静默授权:snsapi_base,没有弹窗,只 ...

  7. php 打开微信对话框,PHP_PHP控制前台弹出对话框的实现方法,应用场景: 微信授权登 - phpStudy...

    PHP控制前台弹出对话框的实现方法 应用场景: 微信授权登录过程中,需要用户确认,故衍生此需求: 相应的逻辑不放在前端的原因是,此部分逻辑属于偏功能业务,所以放在后端,方便统一管理. 解决办法: 通过 ...

  8. delphi 企业微信消息机器人_简单用VBS调用企业微信机器人发定时消息的方法

    去年在企业微信群当中突然看到多了一个叫多群机器人的东西: 企业微信群机器人 以为是升级了什么黑科技,看了下说明,原来目前功能是一个接收自定义消息的Webhook接口,可以通过调用接口把自定义消息推送到 ...

  9. Flash Builder4.7极其简单破解方法-三步搞定(亲测)

    资讯类型: 转载 来源页面: http://weibo.com/2101024913/yvmR0D9Df 资讯原标题: 资讯原作者: 丿卓越丶星辰 翻译词数: 词 我的评论: 对这篇文你有啥看法,跟贴 ...

最新文章

  1. oracle server process,KI视角下的ORACLE SERVER PROCESS进程的活动
  2. 遗传算法入门到掌握(一)
  3. How to uninstall git
  4. 50个PHP程序性能优化的方法
  5. 开源开放 | 开源立体化漏洞情报知识图谱(四维创智)
  6. vim配置之spacevim
  7. 中希尔排序例题代码_十大经典排序算法最强总结
  8. google authenticator python_Google Authenticator TOTP原理详解(以Python为例)
  9. java宝马奔驰汽车正在生产代码_Java的三种工厂模式
  10. cad批量打印快捷键_CAD高效批量打印成PDF
  11. 刷机大师独家支持android,刷机大师:独家支持Android L一键刷机
  12. 轻快PDF阅读器阅读pdf文件步骤
  13. HDMI ARC功能详解及应用介绍
  14. 一个屌丝程序员的青春(三三)
  15. CES2018,三星为何将MicroLED应用于电视而非手机?
  16. 32位/64位系统,jdk32位,64位,32/64位jdk编译出来的class和eclipse 32位和64位
  17. MYSQL的修改表结构SQL语句
  18. 心系冬奥 翰墨传情 |当代书画名家为奥运加油书画推介展【戴志军篇】
  19. java对es做聚合查询_java操作elasticsearch实现聚合查询
  20. 第一份工作,我差点没转正

热门文章

  1. 关于工作中自我突破的一次尝试
  2. Android上运行Http Server
  3. JavaFX Image Invalid URL or resource not found
  4. java狼追着羊跑的程序_写一个狼吃羊的小游戏 - osc_3xmkn220的个人空间 - OSCHINA - 中文开源技术交流社区...
  5. php soapclient 乱码,接上一篇,php的soapclient的问题
  6. 阿里巴巴开发手册终极版
  7. 简单说一下 T, Jass,和 vJass
  8. unityShader-广告牌效果(画面永远朝向摄像机)
  9. 关于 OPENSSL_Uplink(XX……XX,08): no OPENSSL_Applink 处理
  10. Windows10 wifi连接但不能上网的解决办法