위 챗 공중 번호 개발-웹 페이지 권한 수여,자바 위 챗 공중 번호 사용자 의 개인 정보 획득
9045 단어 위 챗 공중 호 개발
이 도구 클래스 는 다음 과 같은 기능 을 포함 합 니 다.
주의해 야 할 것 은,이때 얻 은 accesstoken 과 다른 글(위 챗 공식 번호 개발-access 획득token,정시 갱신 accesstoken)에서 얻 은 accesstoken 은 달라 요.
웹 페이지 권한 부여 accesstoken 과 일반 accesstoken 의 차이
4.567917.위 챗 홈 페이지 권한 수 여 는 OAuth 2.0 체 제 를 통 해 이 루어 진 것 으로 사용자 가 공중 번호 에 권한 을 수 여 받 은 후에 공중 번 호 는 홈 페이지 권한 수여 특유 의 인터페이스 호출 증빙(홈 페이지 권한 수여 accesstoken),웹 페이지 를 통 해 access 권한 부여token 은 사용자 의 기본 정 보 를 얻 는 등 인증 후 인터페이스 호출 을 할 수 있 습 니 다
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 클래스
실체 류
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);
}