java實現微信授權獲取使用者openid及授權使用者相關資訊
阿新 • • 發佈:2018-12-30
首先需要在微信公眾平臺申請賬號並在微信公眾平臺->設定->公眾號設定->功能設定中設定或者在平臺下介面許可權->網頁許可權->網頁授權中設定授權域名。跳轉到授權頁面的url:https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect
需要問自己拼接url,其中redirect_url為授權域名下的連線地址,用於獲取code並進行獲取openid的後臺實現,redirect地址需要進行urlecode,scope中引數:snsapi_base (不彈出授權頁面,直接跳轉,只能獲取使用者openid),snsapi_userinfo (彈出授權頁面,可通過openid拿到暱稱、性別、所在地。並且, 即使在未關注的情況下,只要使用者授權,也能獲取其資訊 )
跳轉頁面中的處理程式碼:
@Namespace("/weixinInfo")
@Results({@Result(name = "ok", location = "/index.jsp"),})
public class GetUserOpenAction extends OutInterfaceAction{
private static final long serialVersionUID = 1L;
@Action("getCode")
public String getCode() throws ClientProtocolException, IOException{
String code = request.getParameter ("code");
System.out.println(code);
if (code != null) {
//獲取openid和access_token的連線
String getOpenIdUrl = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=APPSECRET&code=CODE&grant_type=authorization_code";
//獲取返回的code
String requestUrl = getOpenIdUrl.replace ("CODE", code);
HttpClient httpClient = new DefaultHttpClient();
HttpGet httpGet = new HttpGet(requestUrl);
ResponseHandler<String> responseHandler = new BasicResponseHandler();
//向微信傳送請求並獲取response
String response = httpClient.execute(httpGet,responseHandler);
System.out.println("=========================獲取token===================");
System.out.println(response);
JsonParser parser = new JsonParser();
JsonObject jsonObject = (JsonObject) parser.parse(response);
String access_token = jsonObject.get("access_token").getAsString();
String openId = jsonObject.get("openid").getAsString();
System.out.println("=======================使用者access_token==============");
System.out.println(access_token);
System.out.println(openId);
//獲取使用者基本資訊的連線
String getUserInfo = "https://api.weixin.qq.com/sns/userinfo? access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN";
String userInfoUrl = getUserInfo.replace("ACCESS_TOKEN", access_token).replace("OPENID", openId);
HttpGet httpGetUserInfo = new HttpGet(userInfoUrl);
String userInfo = httpClient.execute(httpGetUserInfo,responseHandler);
//微信那邊採用的編碼方式為ISO8859-1所以需要轉化
String json = new String(userInfo.getBytes("ISO-8859-1"),"UTF-8");
System.out.println("====================userInfo==============================");
JsonObject jsonObject1 = (JsonObject) parser.parse(json);
String nickname = jsonObject1.get("nickname").getAsString();
String city = jsonObject1.get("city").getAsString();
String province = jsonObject1.get("province").getAsString();
String country = jsonObject1.get("country").getAsString();
String headimgurl = jsonObject1.get("headimgurl").getAsString();
//性別 1 男 2 女 0 未知
Integer sex = jsonObject1.get("sex").getAsInt();
System.out.println("暱稱"+nickname);
System.out.println("城市"+city);
System.out.println("省"+province);
System.out.println("國家"+country);
System.out.println("頭像"+headimgurl);
System.out.println("性別"+sex);
System.out.println(userInfo);
}
return "ok";
}
}