1. 程式人生 > >java實現微信授權獲取使用者openid及授權使用者相關資訊

java實現微信授權獲取使用者openid及授權使用者相關資訊

首先需要在微信公眾平臺申請賬號並在微信公眾平臺->設定->公眾號設定->功能設定中設定或者在平臺下介面許可權->網頁許可權->網頁授權中設定授權域名。跳轉到授權頁面的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(); //性別 120 未知 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"; } }