微信wap第三方登陆,springboot框架

首先,这里有个坑,微信开放平台和微信公众平台不是一回事。wap端登陆属于微信公众号的功能,而网页端第三方登陆才是微信开放平台的功能。

附上微信公众平台的开发者文档地址:添加链接描述

首先要配置好微信公众号,这里还要区分一下订阅号和服务号。

订阅号:每个月可以发的消息比较多,但是没有第三方登陆和支付的功能。
服务号:可以有登陆支付等功能。

配置服务号的时候要仔细看文档,在配置token验证地址的时候,需要在自己配置的路径下面放置一个微信提供的txt文件,微信在检测到这个地址的文件是正确的时候,才会成功配置。并且还要写一个接口,微信会访问这个接口,然后接收返回值,如果正确,才能成功配置。 搞不懂微信这么做的理由。

配置好之后,可以按着文档进行操作了。
第一步带着回调地址跳转到微信授权页面,跳转代码:

response.sendRedirect(WeChatConfig.CONNECT);

public final static String CONNECT = "https://open.weixin.qq.com/connect/oauth2/authorize?"
			+ "appid="+APPID
			+ "&redirect_uri="+REDIRECT_URI
			+ "&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect";

如果用户进行授权,则微信会跳转到上一步填写的回跳地址。并且在地址后面带着code。接收微信跳转接口代码:

    @GetMapping("/userinfo")
    public void weixinUserInfo(@RequestParam(value="code") String code,HttpServletResponse response) throws IOException{
    	logger.info("/userinfo"+code);
    	System.out.println("/userinfo"+code);
    	JSONObject jsonObject = threeLoginService.getUserInfo(code);
    	String param = threeLoginService.getParameter(jsonObject);
    	response.sendRedirect(param);
    }

第二步,拿着code去accesstoken,然后再根据accesstoken去获取详细,跳转地址:

public final static String OAUTH2 = "https://api.weixin.qq.com/sns/oauth2/access_token?"
			+ "appid="+APPID+"&secret="+SECRET+"&code=%s&grant_type=authorization_code";

这里获取信息的接口我使用的是springboot自带的restTemplate进行网络请求,下一步准备换成feign,因为我各个服务之间调用的时候,主要使用feign,所以这里突然用restTemplate有点突兀。

获取accesstoken代码:

String url = String.format(WeChatConfig.OAUTH2, code);
String resultStr = restTemplate.getForObject(url, String.class);
JSONObject result = JSONObject.parseObject(resultStr);

这里使用了阿里巴巴的 json框架。

第三步使用accessToken和openId进行用户信息的获取,地址:

public final static String USERINFO = "https://api.weixin.qq.com/sns/userinfo?access_token=%s&openid=%s";

获取代码:

String openid = accessToken.getString("openid");
String url = String.format(WeChatConfig.USERINFO, token, openid);
String resultStr = restTemplate.getForObject(url, String.class);
resultStr = new String(resultStr.getBytes("ISO-8859-1"), "UTF-8");
JSONObject result = JSONObject.parseObject(resultStr);
展开阅读全文

没有更多推荐了,返回首页