时间: 2020-04-28 【学无止境】 阅读量:共1765人围观
简介 openid是微信用户在公众号appid下的唯一用户标识(appid不同,则获取到的openid就不同),可用于永久标记一个用户,同时也是微信JSAPI支付的必传参数。本文就介绍如何获取openid以及用户的基本信息。
1.准备需要的配置参数
① 公众号开发者ID(AppID)(位置:基本配置)
② 开发者密码(AppSecret)(位置:基本配置)
③ 网页授权域名(位置:公众号设置->功能设置)
④ 回调地址redirectUri
只要在设置的授权域名下都行
注意:拿到code与state回调回来的地址
2.代码实现
① 通过后端获取code与state
String appId = AppID;
String redirectUri = URLEncoder.encode(redirectUri, "UTF-8");
String state = "自己生成的标识,验证使用";
String url = WechatConstant.WECHAT_OAUTH_URL + "?appid=" + appId + "&redirect_uri=" + redirectUri + "&response_type=code&scope=snsapi_userinfo&state=" + state + "#wechat_redirect";
response.sendRedirect(url);
② 拿到code与state获取openid以及用户信息
// 省略state验证步骤
String appId = AppID;
String secret = AppSecret;
String url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=" + appId +
"&secret=" + secret +
"&code=" + code +
"&grant_type=authorization_code";
String tokenInfoStr = HttpClientUtils.get(url);
if (tokenInfoStr.indexOf("openid") > -1) {
//将access_token转为json
JSONObject tokenInfoObject = new JSONObject(tokenInfoStr);
//通过access_token和openId获取用户信息
String openid = tokenInfoObject.getString("openid");
//将用户信息转为json
String userInfoUrl = "https://api.weixin.qq.com/sns/userinfo?access_token="
+ tokenInfoObject.getString("access_token")
+ "&openid=" + openid
+ "&lang=zh_CN";
String userInfoStr = HttpClientUtils.get(userInfoUrl);
logger.info("用户信息信息", userInfoStr);
// 用户信息
JSONObject userInfoObject = new JSONObject(userInfoStr);
}