微信登录
- 1、二维码
- 2、授权成功
- 3、题外
- 4、本篇用到的发送get请求的工具类
微信登录官网:
https://developers.weixin.qq.com/doc/oplatform/Website_App/WeChat_Login/Wechat_Login.html
1、二维码
- 点击微信登录,弹出微信登录的二维码
/*APPID:应用唯一标识(公司申请微信登录成功后都有一个appid)REDIRECT_URI:请使用urlEncode对链接进行处理(一般项目上线后都有一个域名(如:www.某度.com),这里就填写需要访问项目的域名:注意该域名对应的项目端口必须是80端口)注意:域名后面也可以跟需要跳转的路径,如:http://www.某度.com/callback.html
*/
//访问该路径,弹出二维码
https://open.weixin.qq.com/connect/qrconnect?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=snsapi_login&state=1#wechat_redirect"
样:
2、授权成功
- 用户点击同意微信登录后可以从访问路径里面获取到code
通过code,传到后台能获取到openid和令牌access_token等)openid:每个微信用户的唯一标识,可以拿它到数据库中查询来判断他以前是否登录过access_token:令牌,可以通过他和openid获取到微信登录用户的信息
- 注:我这里是跳转的前端页面所以是根据href获取的
//打印出来结果:http://域名:80端口的/callback.html?code=aaaaaaaaaaa&state=1let url = location.href;
- 截取路径里面的code值,拿它获取openid
//1、发送get请求到微信平台,拿到Openid
//注意:替换字符串里面括号内的内容(包含括号)
//这个地址是微信官方给的
String url ="https://api.weixin.qq.com/sns/oauth2/access_token?appid=(自己公司的APPID)&secret=(密文:公司注册成功后也有)&code=(这里填扫码传来的CODE)&grant_type=authorization_code";//2、使用工具类发送get请求(工具类这本篇文章的最后),发送成功后得到的就是openid和access_token
String httpGet = HttpClientUtils.httpGet(url);//最后httpGet 结果就是这样:我们只要openid和access_token
//注意这只是json字符串,要获取里面的内容需要转成json对象
{"access_token":"bbb","expires_in":aaa,"refresh_token":"ccc","openid":"ddd"}//3、然后我们根据这个openid到数据库中去查询(这里有个微信登录用户类),判断他以前是否已经用微信登录过了........ 查询代码略过如果以前已经登录过了(系统记录了微信登录信息了),那么就直接在这结束逻辑,并且跳转到登录过后的界面.....................//4、如果他是第一次用微信登录,那么根据openid和access_token也是发送一个get请求。拿到到微信用户点击授权后,微信官网给你的信息
//替换括号的内容(包括括号):这个地址和上面的是不一样的,都是微信官方给的
String urlUser ="https://api.weixin.qq.com/sns/userinfo?access_token=(上面使用code获取到他给你的ACCESS_TOKEN)&openid=(上面使用code获取到他给你的OPENID)";String WxLogin = HttpClientUtils.httpGet(urlUser);/ *这坨是json字符串,也是需要转json对象最终拿到的字符串结果:(选取我们需要的保存即可,注意:一定要保存openid){"openid":"OPENID", //微信用户的唯一标识"nickname":"NICKNAME", //微信用户的昵称"sex":1, //性别"province":"PROVINCE","city":"CITY","country":"COUNTRY","headimgurl": "http://wx.qlogo.cn/mmopen/g3MonUZtNHkdmzicIlibx6iaFqAc56vxLSUfpb6n5WKSYVY0ChQKkiaJSgQ1dZuTOgvLLrhJbERQQ4eMsv84eavHiaiceqxibJxCfHe/0","unionid": " o6_bmasdasdsad6_2sgVt7hMZOPfL"}
*///5、到这基本上也就结束了,后面的逻辑不过就是像一个普通的user用户一样保存上面的一坨微信用户信息。然后跳转到登录过后的界面即可.........
3、题外
//这个是写给本人看的//如果需要跳转到前台另一个页面在跳转到后台的话,就需要这样,路径直接写死
//这样避免了重新跳转页面,openid和access_token拿不到的问题,(直接将这两个数据传发到路径里传到前台,到时候在获取到路径里面的openid然后在传回来)
String bindUrl ="http://域名/bindle.html?access_token="+access_token+"&openid="+openid+"";
4、本篇用到的发送get请求的工具类
- 直接拷贝使用即可
/*** 使用httpclient组件发送http请求* get:现在只用到get* post*/
public class HttpClientUtils {/*** 发送get请求* @param url 请求地址* @return 返回内容 json*/public static String httpGet(String url){// 1 创建发起请求客户端try {HttpClient client = new HttpClient();// 2 创建要发起请求-tetGetMethod getMethod = new GetMethod(url);getMethod.addRequestHeader("Content-Type","application/x-www-form-urlencoded;charset=UTF-8");// 3 通过客户端传入请求就可以发起请求,获取响应对象client.executeMethod(getMethod);// 4 提取响应json字符串返回String result = new String(getMethod.getResponseBodyAsString().getBytes("utf8"));return result;} catch (IOException e) {e.printStackTrace();}return null;}
}