微信开发(一)——微信授权,通过code获取openid

我们先从官方文档看起(我将会从网页授权的方式来讲解)
微信开发(一)——微信授权,通过code获取openid

redirect_url就是你的服务器想要重定向的地址,我之前的项目自定义菜单的授权也是通过这种方式实现,在请求后端服务器的同一个授权地址,至于跳转到哪个具体的界面,就采用state来确定,后端请求获取code和state参数。(当然网页也是同理)

这里还有一点需要注意,就是scope;两种不同的用户状态(根据官方文档的解释):应用授权作用域,snsapi_base (不弹出授权页面,直接跳转,只能获取用户openid),snsapi_userinfo (弹出授权页面,可通过openid拿到昵称、性别、所在地。并且, 即使在未关注的情况下,只要用户授权,也能获取其信息 )
我项目当中采用的是第二种,不管怎么样,可以获取的用户数据多总比少好对吧,假如接下来有业务需求需要这些信息呢!!!

我们后台得到了code应该怎么处理呢?
还是官方文档
通过code换取的是一个特殊的网页授权access_token,与基础支持中的access_token(该access_token用于调用其他接口)不同。公众号可通过下述接口来获取网页授权access_token。如果网页授权的作用域为snsapi_base,则本步骤中获取到网页授权access_token的同时,也获取到了openid,snsapi_base式的网页授权流程即到此为止。
这里也解释了上面我们为什么采用第二种方式,通过code获取了openid;openid是用户关注公众号的唯一标识,其实从你关注公众号那一刻就已经自动生成了。你取消关注以后再关注,保留的还是以前的数据。
一般我们会采用保存openid到数据库的方法,来确定我们公众号的唯一用户;
public static final String getOAuthAccessTokenUrl =
https://api.weixin.qq.com/sns/oauth2/access_token?grant_type=authorization_code”;
这就是我们需要获取openid和accesstoken的请求地址;是不是觉得缺少了某些参数?

public JSONObject weixinOAuth2getAccessToken(String code, String appId, String appSecret) {
	        StringBuffer url =
	                new StringBuffer(WeixinApiConstants.getOAuthAccessTokenUrl).append("&appid=")
	                        .append(appId).append("&secret=").append(appSecret).append("&code=")
	                        .append(code);
	        String response = HttpClientHelper.getHtml(url.toString(), "UTF-8", 5);
	        JSONObject result = JSONObject.parseObject(response);
	        return result;
    }

这里的HttpClientHelper.getHtml()方法往这个地址发送一个get请求,并且获取微信服务器给你的返回值。也就是相当于你把上面链接加上参数拼接起来,在浏览器上点击了回车,可以在浏览器看到一些字符串。而在程序中,我们更多的都是采用json这种格式,这也贯穿了整个微信开发!!!
得到结果json,我们通过

String openid = oauthJson.getString("openid");
String accessToken = oauthJson.getString("access_token");

就可以得到openid和accesstoken(还得强调一遍,这不是全局token!!!)