水平有限!实现方法直接找的网上的以为大神所编写的api来实现,这里主要是记录一下自己实现的过程.具体方法请参考网址:https://github.com/liyiorg/weixin-popular,关于微信授权登录的步骤,可以参考:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140842

1.关于如何建立一个springboot项目这里就不说了,网上关于springboot的一大片一大片.

2.创建公众账号,账号应该都得认证过才行,我所做过的授权登录都是认证过的.然后在公众号中进行配置;配置如下:

(1).登录微信公众号.

(2).在左边的菜单栏中点击基本配置,如图:

(3).到了这一步呢,在公众号卡发信息中,我们可以看到开发者ID,也就是网上各个微信授权登录所说的AppId,AppSecret,IP白名单,这三个中前两个我们待会儿做微信授权登录时会在代码中需要,第三个ip白名单将你的ip放入到里边就可以了,外网的ip哦

(4).下面来配置服务器配置;其中服务器地址:必须是外网地址,就是微信服务器可以通过这个地址给你发验证消息,没有外网的可以用花生壳等内网穿透软件,我第一次做的时候用的就是花生壳,后来直接用公司的nginx映射出去了,也就省下这笔钱了,哈哈!虽然说花生壳要的钱也不算多,但是苍蝇再小也是肉啊!!!备注:这个地址必须是80端口哈;消息加解密方式我选的兼容模式,因为加密方式的话还得修改jdk中的东西,具体请参考微信开发文档,我这里就不多介绍了.

(5).配置好了上一步之后,别提交,我们就需要在项目中写一个接口来让微信给我们发送验证消息.

(6).在建立好的springboot项目中引入依赖:

<dependency><groupId>com.github.liyiorg</groupId><artifactId>weixin-popular</artifactId><version>2.8.17</version>
</dependency>

这个依赖就是我开头说的大神所写的api,挺好用的.

(7)在我们的项目中建一个WxCheckController,

package cn.com.bonc.wx.controller;import cn.com.bonc.wx.service.WxService;
import cn.com.bonc.wx.util.SignUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;@RestController
@RequestMapping("/getResult")
public class WxCheckController {@Autowiredprivate WxService wxUserService;/*** 与公众号服务器配置进行比对* @param req* @param res*/@RequestMapping(method = RequestMethod.GET)public void getWxResult(HttpServletRequest req, HttpServletResponse res){// 微信加密签名,signature结合了开发者填写的token参数和请求中的timestamp参数、nonce参数。String signature = req.getParameter("signature");// 时间戳String timestamp = req.getParameter("timestamp");// 随机数String nonce = req.getParameter("nonce");// 随机字符串String echostr = req.getParameter("echostr");PrintWriter out = null;try {out = res.getWriter();// 通过检验signature对请求进行校验,若校验成功则原样返回echostr,否则接入失败if (SignUtil.checkSignature(signature, timestamp, nonce)) {out.print(echostr);}} catch (IOException e) {e.printStackTrace();} finally {out.close();out = null;}System.out.println(req);}/*** 接收公众号的各种信息* @param request* @return*/@RequestMapping(method = RequestMethod.POST)public String processRequest(HttpServletRequest request) {String message = wxUserService.saveWxUserOperation(request);return message;}}

写好以后,我们启动项目,不管你们的启动没启动,我的反正启动了;刚才我们配置完呈现这个状态:

当我们点击提交的时候,微信会给我们写的接口来发送验证消息,如果提醒你出现这个消息:

上面会出现提交成功,那么恭喜你,你的一只脚已经在成功的大门里边了!

3.下面我们来实现网页授权登录.

(1).刚才项目建好的时候我们导入过一个依赖,下面我们依据这个依赖来进行授权登录;首先,我们写一个类,我这里是实现过程,所以都写Controller,至于微信返回的信息怎么操作,看各位心情了.类名WxDevController,建好类后我们将我们上面提到的AppId和AppSecret放入到类中,定义一个全局变量吧.下面请看代码:

package cn.com.bonc.wx.controller;import cn.com.bonc.common.util.JsonResultNew;
import cn.com.bonc.common.util.MyBusinessEnum;
import cn.com.bonc.wx.service.WxService;
import cn.com.bonc.wx.util.HttpRequestUtil;
import cn.com.bonc.wx.util.TokenUtil;
import cn.com.bonc.wx.util.WeiXinResult;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import weixin.popular.api.QrcodeAPI;
import weixin.popular.api.SnsAPI;
import weixin.popular.bean.qrcode.QrcodeTicket;
import weixin.popular.bean.user.User;import javax.imageio.ImageIO;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import java.util.TreeMap;/*** 微信其他功能开发*/
@RestController
@RequestMapping("/account")
public class WxDevController {@Autowiredprivate TokenUtil tokenUtil;@Autowiredprivate WxService wxUserService;@Value("${wx.appId}")private  String appID ;//这里是AppId,我放到配置文件中了,也可以在这里写,直接定义全局变量,下面的开发者密码一样@Value("${wx.appSecret}")private String appSecret;//AppSecret,开发者密码/*** 网页微信授权登录接口* @return*/@RequestMapping(value = "/login")public void wxLogin(String url, HttpServletResponse response) throws Exception {System.out.println("授权登录url:"+url);String urls = SnsAPI.connectOauth2Authorize(appID, url, true, "STATE");response.sendRedirect(urls);}@RequestMapping(value = "/goIndex")public JsonResultNew<Object> goToIndex(HttpServletRequest request) throws IOException {String code = request.getParameter("code");if(code==null||"".equals(code)){return new JsonResultNew<>(MyBusinessEnum.BUSINESS_ERROR,"code为空");}SnsToken snsToken = SnsAPI.oauth2AccessToken(appID, appSecret, map.get("code").toString());String errcode = snsToken.getErrcode();if(errcode!=null&&!"".equals(errcode)){return new JsonResultNew<>(MyBusinessEnum.BUSINESS_ERROR,"微信获取出错");}User user = SnsAPI.userinfo(snsToken.getAccess_token(), snsToken.getOpenid(), "zh_CN",1);  String errcode1 = user.getErrcode();
if(errcode1!=null&&!"".equals(errcode1)){return new JsonResultNew<>(MyBusinessEnum.BUSINESS_ERROR,"微信获取信息出错");}
return user;
}
}

其中的方法只要导入包就一定可以调出来的,里边的返回结果是我自己封装的方法,各位可以直接返回一个Json对象,不必照着我的来.

写好这些后剩下的就是前端调你的接口,然后返回微信授权登陆后的信息了.我说一下我实现的步骤吧:

首先前端先写一个授权登录的页面,如果是测试的话随便写点儿啦,先调用login接口,参数是你要授权登录后返回的页面地址;说道这里呢,我得讲一下我理解的微信授权登录的原理了.

(1).前端调用login接口,后端重定向到微信的授权页面,但是你得告诉微信授权登录后我给你返回到哪个网址,这个网址就是你填写的url,也就是我上面代码中login接口所接收的参数.这个url必须和你在微信公众号中配置的服务器地址的url在同一个域名下,否则就失败了.

(2).微信在用户授权登录后,返回到你刚才填写的url,这个url中会带一个参数code,这个code就是调用第二个接口goIndex中所需要的参数,这个参数是从微信端拉取用户信息所需要的参数,没有这个参数,那你就获取不到用户基本信息,所以,前端页面中必须获取地址栏中的参数.

我将我写的粗陋前端代码贴一下,望各位前端工程师勿喷.

js示例:
function getRequest() {var url = window.location.search; //获取url中"?"符后的字串var theRequest = new Object();if (url.indexOf("?") != -1) {var str = url.substr(1);strs = str.split("&");for(var i = 0; i < strs.length; i ++) {theRequest[strs[i].split("=")[0]]=decodeURI(strs[i].split("=")[1]);}}return theRequest;
}
//定义获取微信用户信息的code
var code = "";
//定义微信用户信息
var users = "";
//用方法获取url中的code
code = getRequest().code;
//判断code
if(code!=""&&code!=undefined){//code存在的话从后台拉取微信用户信息$.ajax({url:'http://stock.511860.com/waterFashion/account/goIndex',data:{code:code},success:function (res) {users = res.map.data;}})
}else {//code不存在就发起获取code的请求window.location.href="http://stock.511860.com/waterFashion/account/login?url=http://stock.511860.com/car/index.html"
}

到此,微信用户基本信息就拉下来了.如有不足之处,望各位大神指点一二.

springboot微信授权登录相关推荐

  1. uniappH5+springboot微信授权登录获取用户数据(非静默授权)

    uniappH5+springboot微信授权登录获取用户数据(非静默授权) 微信网页授权开发文档 准备工作 微信公众号appid和appSecret及配置相关的ip白名单 配置网页授权域名,具体操作 ...

  2. code换取微信openid_微信授权登录开发的两种方式

    本文主要针对微信公众号(公众平台的开发) 首先理解一个概念:OAuth: OAuth(开放授权)是一个开放标准,允许用户让第三方应用访问该用户在某一网站上存储的私密的资源(如照片,视频,联系人列表), ...

  3. 慕课网_《微信授权登录》学习总结

    时间:2017年08月12日星期六 说明:本文部分内容均来自慕课网.@慕课网:http://www.imooc.com 教学源码:无 学习源码:https://github.com/zccodere/ ...

  4. html5+ mui框架 微信授权登录后跳回app无任何回调事件

    2019独角兽企业重金招聘Python工程师标准>>> 微信授权登录可以调起微信,但是在微信上点击确认登陆后跳回app,但是之后无任何回掉事件. 问题原因: 1 因为我在集成Face ...

  5. thinkphp 微信授权登录 以及微信实现分享

    <?php namespace app\wechat\controller; use think\Controller; use think\Request; /** * 微信授权登录类 * U ...

  6. ios微信登录不上服务器,iOS微信授权登录

    首先需要确保你的App应用在微信开发平台上注册创建并获得对应的接口,对应登录.支付等功能还涉及付费,具体申请流程就不再这里说了.到开放平台->管理中心->移动应用->查看应用,确认你 ...

  7. 五行代码搞定微信授权登录

    Authing 通过 SDK 为开发者提供了一种快速在微信网页中获取用户信息并完成登录的方法.如果用户在微信客户端中访问第三方网页.公众号可以通过微信网页授权机制,来获取用户基本信息,进而实现业务逻辑 ...

  8. Java版本微信授权登录(测试版)

    这篇文章是对微信授权登录的一个测试版本,并不能直接在生产上使用,对于在生产上正式使用将会在下一篇中描述. 一,首先需要以下两个数据 appID和appsecret 如何获取这两个数据,请先登录微信公众 ...

  9. 微信授权登录mock(在没有真实微信账号的情况下测试大量微信账户授权登录的情况)...

    场景介绍 对于构建在微信公众号的系统,帐号体系往往使用微信授权登录(如各类微信商城应用系统). 这样操作不仅可以实现静默注册,对用户几乎是无感的,同时也达到了区分用户,获取用户基本信息(头像,昵称等) ...

最新文章

  1. usaco ★Fractions to Decimals 分数化小数
  2. linux 多路径重启,(linux多路径连接iScsi存储重启自动连接.docx
  3. c#:Reflector+Reflexil 修改编译后的dll/exe文件
  4. python序列类型-Python序列类型
  5. concurrent 底层_万字长文!从底层开始带你了解并发编程,彻底帮你搞懂Java锁!
  6. 如何在64位Ubuntu16.04下安装java开发环境
  7. SAP 那点事BW HANA
  8. 曼彻斯特编码_两种编码方式以及两种帧结构
  9. c++语言运算符的优先次序,C++中的运算符和运算符优先级总结
  10. Android Developers:使ListView滑动流畅
  11. 金庸笔下的良好代码风格
  12. 网吧显示最近使用计算机,影子系统怎么用?实现像网吧电脑一样重启后自动还原系统教程...
  13. 打补丁patch 命令使用
  14. LFM信号脉冲压缩原理和仿真
  15. 【转载】在美国找工作秘籍
  16. IDEA中实现自动导包
  17. Internet RFC 诞生五十周年;互联网信息服务投诉平台上线
  18. fcpx插件:童年印象回忆复古视觉特效和转场Stupid Raisins Slide Pop
  19. antd design mobile +react 动态生成表单
  20. 制作os x启动u盘并使用u盘安装mac系统全程图文步骤

热门文章

  1. 转载:解决采集UTF-8网页空格变成问号乱码
  2. 宝藏世界登录不显示服务器,宝藏世界Trove玩不了怎么办 宝藏世界Trove进不去解决方法汇总...
  3. 人类第一位女教授的传奇一生
  4. 性能测试---搬运自Performance Testing Guidance for Web Applications,作者J.D. Meier, Carlos Farre, Prashant Ban
  5. MySQL中删除数据库的基本语法格式为_《MySQL数据库》SQL简介、语法格式
  6. java 如何实现多条件筛选,JAVA-日常工作解决的bug2-多选条件筛选
  7. 波动率曲面(完整版)
  8. 数据报表多种序号生成方式
  9. 证券公司信息化——8
  10. 如何建立起一套有效的APP监控体系