您的位置:首页 > 移动开发 > 微信开发

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: