H5页面微信登录获取用户基本信息
1。首先在微信公众平台申请一个测试账号方便用于本地测试,微信公众平台
在测试号管理找到自己的appID和appsecret。
2。修改体验接口权限表里的网页账号,修改OAuth2.0网页授权里的回调域名(这里可以用natapp免费申请一个通道NATAPP)这个小软件可以把本地ip穿透为公网ip(本地ip为你项目的ip地址)。
3。扫描测试号二维码关注测试公众号。
4.在你的项目里新建一个html页面来获取微信回调里的code(通过code可获得open_id,access_token)
var Appid = "你的appID";//var code = getUrlParam("code");//获取回调页面里的codeconsole.log("code:"+code);if (code == null || code === "") {var fromurl = location.href;var s = encodeURIComponent(fromurl);var url = 'https://open./connect/oauth2/authorize?appid=wxc5ec3f8eb94e9ae2&redirect_uri=' +s +'&response_type=code&scope=snsapi_userinfo&state=STATE%23wechat_redirect&connect_redirect=1#wechat_redirect';location.href = url;}
如果不想在前端使用刷新页面的方法可以访问后端接口的方式获取code
//需要两个参数backUrl(重定向url),stateParam(可以通过上面前端方法里的链接地址查看参数信息)public static String getAuthCodeUrl(String backUrl, String stateParam){StringBuffer getCodeUrl = new StringBuffer();getCodeUrl.append("https://open./connect/oauth2/authorize?");getCodeUrl.append("appid="+appid);String backUri = backUrl; //"/wap/phone/index/do/toIndex.jsp";backUri = backUri.replaceAll(":","%3A");backUri = backUri.replaceAll("/","%2F");getCodeUrl.append("&redirect_uri="+backUri); //重定向urlgetCodeUrl.append("&response_type=code&scope=snsapi_base");getCodeUrl.append("&state="+stateParam); //扩展参数getCodeUrl.append("#wechat_redirect");return getCodeUrl.toString();}
5。通过以上步骤获取到code后访问后端接口获取open_id和access_token(可以百度一个微信javaUtils)
private static final String appid="你自己刚刚申请的测试appid";private static final String secret="你自己刚刚申请的测试appsecret";private static final String AUTH_ACCESS_TOKEN = "https://api./sns/oauth2/access_token?grant_type=authorization_code&code=";public static Map<String, String> getUserBasicData(String code){Map<String, String> map = new HashMap<String, String>();try {String url = AUTH_ACCESS_TOKEN + code +"&appid="+appid+"&secret="+secret;HttpClient client = new HttpClient();GetMethod get = new GetMethod(url);get.getParams().setContentCharset("UTF-8");client.executeMethod(get);String str = get.getResponseBodyAsString();JSONObject obj = JSONObject.fromObject(str);String openid = obj.get("openid")== null ? "" : (String)obj.get("openid");String access_token = obj.get("access_token")== null ? "" : (String)obj.get("access_token");map.put("open_id", openid);map.put("access_token", access_token);}catch (Exception e){e.printStackTrace();}return map;}
这里标注一下 前端与后端的appid必须一致否则微信会返回一个错误代码提示
6。如果上述步骤获取到openid(微信用户唯一标识)和access_token后再添加一个获取微信用户信息的方法(头像,昵称,地址等信息)
private static final String USER_INFO_URL = "https://api./sns/userinfo?access_token=";//获取微信用户信息public static JSONObject getWXUser(String openId, String appAccessToken){JSONObject obj = null;try {String url = USER_INFO_URL + appAccessToken + "&openid=" + openId;HttpClient client = new HttpClient();GetMethod get = new GetMethod(url);get.getParams().setContentCharset("UTF-8");client.executeMethod(get);String str = get.getResponseBodyAsString();obj = JSONObject.fromObject(str);System.out.println("obj:"+obj);}catch (Exception e){e.printStackTrace();}return obj;}
这样你就获取到了在微信内置的浏览器下微信登录用户的信息了。