微信第三方登录
先说解决方案:redirect_uri 参数错误
在开放平台设置好回调地址,例如地址是 www.niezhiliang.com 那么在生成二维码的时候回调只能写该域名下的地址
在申请二维码页面回调地址(你的redirect_uri) 还必须加上http或者https,还必须进行转码操作
平常我们是http://www.niezhiliang/callback 必须转成这个样子 http%3a%2f%2fwww.niezhiliang.com%2fcallback
还有回调地址不能跟端口号 如:http://www.niezhiliang.com:8080/callback 这样是不行的
会报你的redirect_uri 不正确
第一步:
申请二维码页面代码:
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8"/>
<title>微信登录页面</title>
<style>
.impowerBox .qrcode {width: 200px;}
.impowerBox .title {display: none;}
.impowerBox .info {width: 200px;}
.status_icon {display: none}
.impowerBox .status {text-align: center;}
</style>
<script src="http://res.wx.qq.com/connect/zh_CN/htmledition/js/wxLogin.js"></script>
</head>
<body>
<div id="obj" style="text-align: center">
</div>
</body>
<script>
var obj = new WxLogin({
self_redirect:false,//true将页面跳转放在ifream里面 false直接跳转到要跳转的页面
id:"obj",
appid: "wx0c05ce174cd624b7",
scope: "snsapi_login",
redirect_uri: "http%3a%2f%2fwww.niezhiliang.com%2fcallback",
state: "",
style: "",
href: ""
});
</script>
</html>
第二步:
手机扫描二维码以后会访问我们之前设置的回调地址,可以得到请求token的code 拿到token以后就可以通过token去请求
用户的基本信息 如:
{
“openid”: “oRFVX0i662JO-p1o_jnqPEU88ahc”,
“nickname”: “苏雨丶”,
“sex”: 1,
“language”: “zh_CN”,
“city”: “Yichun”,
“province”: “Jiangxi”,
“country”: “CN”,
“headimgurl”: “http:\/\/thirdwx.qlogo.cn\/mmopen\/vi_32\/Q0j4TwGTfTKlDY7yfJB1ZehJECjLQ8d89rVkX3sZFGB7ry1Q720yU5qAc2rFJfcG6gMibXwN6QnZTRIQyiaeMm8Q\/132”,
“privilege”: [],
“unionid”: “of_IS5sWN3Ah0JdJ7O1LvDFT_4l0”
}
回调方法:
@RequestMapping(value = "/callback")
public String callBack(Model model) {
String code = request.getParameter("code");
if (code != null) {
StringBuffer url = new StringBuffer();
/*********获取token************/
url.append(request_url)
.append("appid=")
.append(appid)
.append("&secret=")
.append(secret)
.append("&code=")
.append(code)
.append("&grant_type=")
.append(grant_type);
JSONObject jsonObject =
JSON.parseObject(HttpUtil.getResult(url.toString()));
String openid =jsonObject.get("openid").toString();
String token = jsonObject.get("access_token").toString();
/*********获取userinfo************/
url = new StringBuffer();
url.append(userinfo_url)
.append("access_token=")
.append(token)
.append("&openid=")
.append(openid);
String result = HttpUtil.getResult(url.toString());
model.addAttribute("wxinfo",result);
model.addAttribute("username",map.get("username"));
model.addAttribute("password",map.get("password"));
//拿到用户信息后跳转到要跳转的页面
return "index";
}
return "index";
}
我这边只是个demo 所以做的很简单,大家根据自己的业务需求来做吧