嗯。。。。。。
最近做了一个微信扫码登陆第三方平台功能,说下步骤就行,反正原理你们网上直接百度,我这里写了,估计也没几个人有耐心看
第一步 生成一个链接
https://open.weixin.qq.com/connect/qrconnect?appid=xxxxxxxxf&redirect_uri=xxxxxxxxxxxx&response_type=code&scope=snsapi_login&state=#wechat_redirect
访问这个链接的时候,就会返回一张二维码 xxxxx地方是参数,,appid需要你开通微信开放平台,开通之后就会有,还有一个secret,,这2个都需要,这里需要注意,微信还有一个公众平台也有这2个参数,他们是不一样的。你开发的时候要区分是开放平台还是公众平台,不要掉进坑里 ,redirect_uri=这个是说,你扫描二维码之后,要跳转的地址,这里跳转回带上code和state 2个参数,所以你编写的时候需要这样
@RequestMapping(value = "/code", params = { "code", "state" }, method = RequestMethod.GET)
@ResponseBody
public Object getAuth(HttpServletRequest request, @RequestParam String code, @RequestParam String state)
throws JSONException {
///这里第一步,首先需要通过appid,secret ,code 去获取token
https://api.weixin.qq.com/sns/oauth2/access_token?appid=" + APPID + "&secret="
+ SECRET + "&code=" + code + "&grant_type=authorization_code";//获取token的地址,
这里我使用的是 apache下的httpclient
DefaultHttpClient client = new DefaultHttpClient();
try {
HttpGet getRequest = new HttpGet(access_token_url);
HttpResponse response = client.execute(getRequest);
if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
String strResult = EntityUtils.toString(response.getEntity());
logger.info("-------jsonResult-------" + strResult);
JSONObject jsonResult = new JSONObject(strResult);
if (jsonResult.has("unionid")){
unionid= (String) jsonResult.get("unionid");
}
这个参数非常的重要,但是我也懒得讲了,你们自己百度吧,就是要记住一点,这个参数是唯一的,
}
然后经过你后台的鉴权通过之后,跳转,至于鉴权方式,就看你自己额
你可以通过 unionid 去数据库寻找用户,,智力需要说明,,unionid是之前就获取到了用户的,然后初始化到数据库了得,至于怎么查找unionid,需要通过openid
https://api.weixin.qq.com/cgi-bin/user/info?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN。这个是获取unionid 的,至于这个openid,你获取token 的时候,就会有的,反正你写个脚本,把他们保存数据库,当作初始化,
if (SecurityUtils.getSubject().isAuthenticated()) {
logger.info(" 二维码登录成功 : " + openid);
logger.info(" 二维码登录成功 username : " + (String) SecurityUtils.getSubject().getPrincipal());
return new ModelAndView("redirect:x'x'x'x'x'x'x'x'x");
}