위 챗 공중 번호 개발-웹 페이지 권한 수여,자바 위 챗 공중 번호 사용자 의 개인 정보 획득

본 고 는 주로 일부 기능 의 코드 실현 을 소개 하 는데 그 전에 위 챗 공공 플랫폼 기술 문서 의 위 챗 홈 페이지 권한 수 여 를 진지 하 게 읽 어야 한다.
이 도구 클래스 는 다음 과 같은 기능 을 포함 합 니 다.
  • 전단 을 통 해 얻 은 code 를 웹 페이지 권한 부여 access 로 바 꿉 니 다.token,openId 등
  • 사용자 정보 끌 어 오기(scope 는 snsapiuserinfo)

  • 주의해 야 할 것 은,이때 얻 은 accesstoken 과 다른 글(위 챗 공식 번호 개발-access 획득token,정시 갱신 accesstoken)에서 얻 은 accesstoken 은 달라 요.
    웹 페이지 권한 부여 accesstoken 과 일반 accesstoken 의 차이
    4.567917.위 챗 홈 페이지 권한 수 여 는 OAuth 2.0 체 제 를 통 해 이 루어 진 것 으로 사용자 가 공중 번호 에 권한 을 수 여 받 은 후에 공중 번 호 는 홈 페이지 권한 수여 특유 의 인터페이스 호출 증빙(홈 페이지 권한 수여 accesstoken),웹 페이지 를 통 해 access 권한 부여token 은 사용자 의 기본 정 보 를 얻 는 등 인증 후 인터페이스 호출 을 할 수 있 습 니 다
  • 기타 위 챗 인 터 페 이 스 는 기본 지원 중의"access 획득"을 통 해token"인터페이스 에서 얻 을 수 있 는 일반 accesstoken 호출..

  • 1.관련 jar 가방 FastJSon 과 JackJSon 은 둘 중 하 나 를 선택 할 수 있 습 니 다.
     
        com.fasterxml.jackson.core 
            jackson-databind 
        2.5.3
     
    
     
          com.alibaba
          fastjson
          1.2.47
     
    
     
          
            org.apache.logging.log4j
            log4j-api
            2.11.2
          
          
            org.apache.logging.log4j
            log4j-core
            2.11.2
          
    

    2.공중 번호 관련 상수 및 인터페이스 주소 전제:공중 번호 의 appId 와 appsick
    /**
     *      
     */
    public class WechartConst {
    
        //        
        public static final String appId = "        ";
    
        //    appsecret
        public static final String appSecret = "    appsecret";
    
        //  code        
        public static final String GET_WEBAUTH_URL ="https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code";
    
        //        (  UnionID  )
        public static final String GET_WEIXIN_USER_URL = "https://api.weixin.qq.com/cgi-bin/user/info?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN";
        //        (  subscribe   )
        public static final String Get_USER_URL = " https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN";
    
        /**
         *   access_token URL
         */
          public static final String ACCESS_TOKEN_URL = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET";
    
    
    }
    

    3.HttpUtil 클래스 는 POST 또는 GET 요청 을 보 내 는 데 사 용 됩 니 다:HttpsUtil 클래스
    실체 류
  • UserAccessToken 클래스(주로 openId 획득)
  • AccessToken 클래스(정시 리 셋 accessToken)WechatUserInfo 클래스(사용자 개인 정보)UserAccessToken 류 는 두 가지 방법 을 소개 합 니 다.이 속성의 이름 을 다른 이름 으로 정렬 하 는 역할 을 합 니 다(1)fastJSon 의@JSONfield 를 이용 합 니 다.
    import com.alibaba.fastjson.annotation.JSONField;
    
    /**
     *       token
     */
    public class UserAccessToken {
    
        //      
        @JSONField(name = "access_token")
        private String accessToken;
    
        //access_token          ,  ( )
        @JSONField(name = "expires_in")
        private String expiresIn;
    
        //    access_token
        @JSONField(name = "refresh_token")
        private String refreshToken;
    
        //              ,           
        @JSONField(name = "openid")
        private String openId;
    
        //        
        @JSONField(name = "scope")
        private String scope;
    }
    

    (2)JackJSon 의@JSonProperty 사용 하기
    /**
     *        
     *
     */
    public class WechatUser implements Serializable {
     
    	private static final long serialVersionUID = -4681067645282292327L;
     
    	// openId,               Id
    	@JsonProperty("openid")
    	private String openId;
    	//     
    	@JsonProperty("nick_name")
    	private String nickName;
    	//   
    	@JsonProperty("sex")
    	private int sex;
    	//   
    	@JsonProperty("province")
    	private String province;
    	//   
    	@JsonProperty("city")
    	private String city;
    	//  
    	@JsonProperty("country")
    	private String country;
    	//       
    	@JsonProperty("headimgurl")
    	private String headimgurl;
    
    }
    

    AccessToken 클래스
    /**
     *   AccessToken  
     */
    public class AccessToken {
    
        private String accessToken;
        private int expiresIn;
    
    }
    

    WechatUserInfo 클래스
    public class WechatUserInfo {
    
        //            ,  0 ,             ,        
        private int subscribe;
    
        //       
        private String openid;
    
        //    
        private String nickname;
    
        //     ,  1    ,  2    ,  0    
        private int sex;
    
        //           
        private String province;
    
        //             
        private String city;
    
        //  ,    CN
        private String country;
    
        //    ,               
        private String headimgurl;
    
    
    

    5.Wechart Util 도구 류
    import org.apache.logging.log4j.LogManager;
    import org.apache.logging.log4j.Logger;
    import com.jfinal.json.Json;
    
    public class WechartUtil {
        private static Logger log = LogManager.getLogger(WechartUtil.class);
    
        /**
         *   code  UserAccessToken   
         * @param code
         * @return
         */
        public static UserAccessToken getUserAccessToken(String code) {
            String appId = WechartConst.appId;
            String appSecret = WechartConst.appSecret;
            //     code,              URL
            String requestUrl = WechartConst.GET_WEBAUTH_URL.replace("APPID", appId).replace("SECRET", appSecret).replace("CODE", code);
            //   URL      JSON   
           JSONObject jsonObject = HttpsUtil.request(requestUrl, "GET", null);
           if (jsonObject!= null) {
    	            Integer errCode = jsonObject.getInteger("errcode");
    	            String resultMsg = jsonObject.toJSONString();
    	            if (errCode != null) {
    	                throw new ParameterException("    accessToken  :" + resultMsg);
    	            }
    	            try {
    		            //  json          
    		            //Jfinal      Json.getJson().parse(String jsonString, Class type)  
    		            // UserAccessToken token = Json.getJson().parse(tokenStr, UserAccessToken.class);
    		            //  JackJson
    		            ObjectMapper objectMapper = new ObjectMapper();
    					UserAccessToken token = objectMapper.readValue(tokenStr, UserAccessToken.class);
    	                return token;
    		       	 }catch (JSONException e) {
    	                String errorMsg = jsonObject.getString("errmsg");
    	                throw new ParameterException("    accessToken  :" + errorMsg);
    	            }
            }else {
                throw new ParameterException("    accessToken  " );
            }
        }
    
        /**
         *         snsapi_userinfo,        (UnionID  )
         *   :                                     
         * @param accessToken     accessToken
         * @param openId
         * @return
         */
        public static WechatUserInfo getUserInfo(String accessToken, String openId) {
            String requestUrl = WechartConst.GET_WEIXIN_USER_URL.replace("ACCESS_TOKEN", accessToken).replace( "OPENID", openId);
            JSONObject jsonObject = HttpsUtil.request(requestUrl, "GET", null);
    	    if (jsonObject!= null) {
    	            Integer errCode = jsonObject.getInteger("errcode");
    	            String resultMsg = jsonObject.toJSONString();
    	            if (errCode != null) {
    	                String errorMsg = jsonObject.getString("errmsg");
    	                throw new ParameterException("          :" + errorMsg);
    	            }
    	            try {
    	                   //Jfinal      Json.getJson().parse(String jsonString, Class type)  
    				       //WechatUserInfo user= Json.getJson().parse(jsonObject.toJSONString(), WechatUserInfo.class);
    				       user.setSubscribe(jsonObject.getInteger("subscribe"));
    				       user.setOpenId(jsonObject.getString("openid"));
    					   user.setNickName(jsonObject.getString("nickname"));
    					   user.setSex(jsonObject.getInt("sex"));
    					   user.setProvince(jsonObject.getString("province"));
    					   user.setCity(jsonObject.getString("city"));
    					   user.setCountry(jsonObject.getString("country"));
    					   user.setHeadimgurl(jsonObject.getString("headimgurl"));
    				       return user;
    	            } catch (JSONException e) {
    	                throw new ParameterException("    accessToken  :" + resultMsg);
    	            }
    	    }else {
    	            throw new ParameterException("    accessToken  " );
    	    }
       }
    }
    
    

    사용 예시
       public static void main(String[] args) {
            //         code
            String code = "";
            UserAccessToken userAccessToken = getUserAccessToken(code);
            String accessToken = userAccessToken.getAccessToken();
            String openId = userAccessToken.getOpenId();
            WechatUserInfo getUserInfo = getUserInfo(accessToken,openId);
        }
    

    좋은 웹페이지 즐겨찾기