java开发Demo~微信扫码登录demo
2017-12-29 17:23
531 查看
开发所需15个工具类
可以在我的资源中下载
详细代码不写
说明下WeiXinUtil.java中的参数
Ip白名单页数需要设置的,否则会连接失败。
https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET
浏览器打开这个路径,报错提示的ip,就是你需要设置进去的ip,不要写端口号。
下面说下代码:
Controller
@Controller @RequestMapping(value = "/index") public class wxloginController { int type = 0; String type2 = ""; //返回微信二维码,可供扫描登录 @RequestMapping(value = "weixin") @ResponseBody public Map<String,Object> weixin(HttpServletRequest request) throws IOException{ Map<String,Object> map = new HashMap<String,Object>(); WeiXinUtil wxU = new WeiXinUtil(); //此路径需要注意,http://www.shuke.com是你需要配置到微信平台里的域名,必须是真实域名。 //index/WeixinTest,就是你扫码成功后,自动执行的方法(在我代码里是当前方法的下一个方法。) String url="https://open.weixin.qq.com/connect/oauth2/authorize?appid=wx586b2g53468&redirect_uri=http://www.shuke.com/index/WeiXinTest&response_type=code&scope=snsapi_userinfo&state=123#wechat_redirect"; //将url转换成短链接,提高扫码速度跟成功率 String shorturl=wxU.shortURL(url, wxU.appid, wxU.appSecret); map.put("shorturl", shorturl); return map; } //微信获取用户信息 @RequestMapping(value = "WeiXinTest") public ModelAndView WeiXinTest(ModelMap map,HttpServletRequest request,HttpServletResponse response){ ModelAndView mav = new ModelAndView(); response.setCharacterEncoding("utf-8"); String code = request.getParameter("code"); // 通过code获取access_token WeixinOauth2Token oauth2Token; oauth2Token = WeiXinUtil.getOauth2AccessToken(WeiXinUtil.a dc38 ppid, WeiXinUtil.appSecret, code); System.out.println(oauth2Token.toString()); String accessToken=oauth2Token.getAccessToken(); String openId=oauth2Token.getOpenId(); //获取到用户的基本信息 SNSUserInfo snsUserInfo=null; if(type==0){ snsUserInfo = WeiXinUtil.getSNSUserInfo(accessToken, openId); } // aa(map,request); if(snsUserInfo!=null){ type=1; String id = snsUserInfo.getOpenId();//微信用户id String name = snsUserInfo.getNickname();//微信用户Name String logo = snsUserInfo.getHeadImgUrl();//微信用户头像 type2=id; /*--------------------登录逻辑请写这-------------------*/ // 查询库中是否有user mav.setViewName("info"); }else{ mav.setViewName("info2"); } return mav; } //扫码登录成功后,将用户信息放入session中,并且跳转页面 @RequestMapping(value = "fangSession") public ModelAndView fangSession(HttpServletRequest request,String userId,String h,String chapterId){ ModelAndView mav = new ModelAndView(); HttpSession session = request.getSession(); User sessionuser=new User(); sessionuser.setId(userId); /*----------建议存完整的user,此时session中的user只有Id---------------*/ session.setAttribute("login_user", sessionuser); User uu = (User)session.getAttribute("login_user"); mav.setViewName("/front/personalCenter"); return mav; } //判断用户是否扫码登录成功,以便于前台页面跳转 @RequestMapping(value = "successDL") @ResponseBody public Map<String,Object> successDL(String a){ Map<String,Object> map = new HashMap<String,Object>(); try { Thread.sleep(500); } catch (InterruptedException e) { e.printStackTrace(); } if("ok".equals(a)){ type=1; } if(type==1){ map.put("userId", type2); } map.put("type", type); return map; } @RequestMapping(value = "type") public void type(int a){ type=a; } }
展现二维码的页面
jsp代码<div class="mtb20 h250 boc" id="ma"></div>
js代码
$(function(){ $.post("${pageContext.request.contextPath}/index/weixin",function(data){ var ma = data.shorturl; var srcMa = "http://qr.topscan.com/api.php?text="+ma; var imgg = "<img class='h-img' alt='' src="+srcMa+">"; $("#ma").empty().append(imgg); }); });
哈哈 主要是推荐我们家在线学习平台
www.shibeike.com.cn,这里做的微信登录,已经成功了。大家可以看一下啊
登录成功后PC端页面跳转逻辑
主要是js对Controller的不停访问,就是个轮回,看什么时候登录成功了,就停止轮回。后台采用的是全局变量,登录成功了改变这个变量的值,后台轮回到了,哎,小家伙变了,成功了。那我就得访问Controller里 ,让pc端页面跳转的方法了。
Js代码(用于轮回),这里面访问的COntroller里的方法 上面都写了。
<script> var test = 0; $(function(){ /* --------------------------展示微信登录二维码----------hxx--------------- */ $.post("${pageContext.request.contextPath}/index/weixin",function(data){ var ma = data.shorturl; var srcMa = "http://qr.topscan.com/api.php?text="+ma; var imgg = "<img class='h-img' alt='' src="+srcMa+">"; $("#ma").empty().append(imgg); }); $.post("<%=basePath%>index/type",{"a":0}); panduan(); /* -------------展示微信登录二维码----------hxx------------ */ }) /*-------------- 微信扫码是否成功的判断--------hxx---------- */ function panduan(){ $.post("<%=basePath%>index/successDL",function(data){ if(data.type==1){ var userId = data.userId; var h = $("#h").val(); var chapterId = $("#chapterId").val(); var chapterId = $("#chapterId").val(); $.post("<%=basePath%>index/type",{"a":0}); window.location.href='<%=basePath%>index/fangSession?userId='+userId+'&h='+h; <%-- window.location.href='<%=basePath%>index/showIndex'; --%> }else if(data.type==2){ $.post("<%=basePath%>index/type",{"a":0}); }else if(data.type==0 && test!=200){ /* setInterval("panduan()",8000); */ test = test+1; panduan(); }else if(test==300){ alert("登录码已失效,请刷新页面更新验证码!"); $.post("<%=basePath%>index/type",{"a":5}); } }); } /*------------------------ 微信扫码是否成功的判断-------------hxx---------- */ </script>
然后,就成功了呢。
代码下载地址
https://github.com/weiaiwan/weixinsaomalogin
另外,微信扫码“支付”代码地址
http://blog.csdn.net/han_xiaoxue/article/details/78954749
相关文章推荐
- java开发Demo~微信扫码支付demo
- 一键搭建微信小程序开发环境 及demo运行(腾讯云上一键搭建node.js服务器环境,PHP,Java,.NET服务类似)
- 微信登录开发-java
- [置顶] java后端 三方登录之微信登录 开发详细流程以及遇到过的坑 总结(非常详细) 2017-12-26
- java微信支付开发中遇到的各种问题,微信官方的DEMO就是一个坑
- XMPP框架 微信项目开发之XMPP框架目录作用详解——以及登录的Demo分析
- java web开发一个帐号同一时间只能一个人登录
- 用JAVA开发简易QQ登录界面
- qq腾讯社区开发平台 【QQ登录】.net java web版 移动手机版手机SDK下载
- JAVA GUI 开发---登录界面加载背景图片
- Android游戏开发5:游戏登录界面Demo(Activity间的切换和数据交互)
- ArcEngine for java开发demo源码
- 微信公众帐号开发教程第16篇-应用实例之历史上的今天(Java版)
- 微信公众帐号开发系列教程第1篇-引言 (Java版)
- 微信开发框架(JAVA版)
- 微信公众帐号开发教程第13篇-图文消息全攻略 (Java版)
- 微信公众帐号开发教程第14篇-自定义菜单的创建及菜单事件响应 (Java版)
- 纯Java开发的游戏引擎V0.4--DEMO2 -- 物理引擎
- JavaWeb开发防止用户重复登录
- 【Java】在J2ME下面开发触摸屏的软件-DEMO