首先普及一個知識:一個關注的用戶對於一個微信公眾號是唯一的,也就是說一個用戶針對與一個微信公眾號是唯一的,對於不同的公眾號,同一個微信號具有不同的openId;
在微信開發中,我們添加了一個二級菜單並實現一些相應的功能,往往是需要獲取自己的openId,本文主要闡述如果通過與微信的交互得到自己的openId ;
這里提供一個連接,用於向微信發起請求:(在重定向之前准備好微信的AppId以及token,重定向的URL會被原樣返回)
public static String buildAuthorizationUrl(String appid,String redirectUri, String state) { String url = "https://open.weixin.qq.com/connect/oauth2/authorize?"; url = url + "appid=" + appid; url = url + "&redirect_uri=" + URIUtil.encodeURIComponent(redirectUri); url = url + "&response_type=code"; url = url + "&scope=snsapi_base"; if (state != null) { url = url + "&state=" + state; } url = url + "#wechat_redirect"; return url; }
請求成功后,會額外返回一個code以及state參數,其中code參數是唯一的,也就是說一次請求,產生一個code,作為校驗的唯一標准,state參數是之前請求中的token參數
之后,獲取到公眾號的APPID以及appscret,通過解析返回的json數據格式,獲取到自己個人的openId,之后再進行對業務的操作
public static String oauth2getOpenID(String code, String appid, String appsecret) { String url = "https://api.weixin.qq.com/sns/oauth2/access_token?"; url = url + "appid=" + appid; url = url + "&secret=" + appsecret; url = url + "&code=" + code; url = url + "&grant_type=authorization_code"; JSONObject jsonObject = JsonUtil.httpsRequest(url, "GET", ""); System.out.println("jsonObject=" + jsonObject); return jsonObject.getString("openid"); }