기업 위챗 권한 수여 로그인 실례 코드 (취득 과정만)
20794 단어 기업 위챗 인증 로그인
여기에는 주로 놓인 코드 실현이다. 구체적인 사고방식 절차는 이 글에서 위챗 개발자 도구가 디버깅할 수 없는 문제 해결 방안에 대해 논문에서 이렇게 했다. 앞에서 로그인 페이지를 차단하고 사용자가 로그인 페이지를 방문할 때 앞에서 로그인 인터페이스를 차단한다.내 인터페이스에 방문하면 코드를 얻은 링크를 되돌려줍니다. 지금 업데이트합니다. 새로운 방법이 있습니다. 바로 전방 차단을 생략하는 방법입니다. 기업 위챗에서 코드를 얻는 링크 주소를 직접 설정하고 전방에서 코드를 가지고 백엔드login 인터페이스를 요청하면 권한을 부여받아 로그인할 수 있습니다. 이런 방법은 비교적 빠릅니다. 한 번 차단하면 페이지가 바뀌는 것과 같습니다.
//
@RequestMapping(value = "/qywxauth", method = RequestMethod.GET)
public Result<String> qywxauth(HttpServletResponse response) throws Exception {
//
String reUrl = "http://oa.123.com";
// ,
String scopetype = "snsapi_privateinfo";
// code
String sUrl = qywxService.GET_CODE_URL;
String wxurl = sUrl.replace("CORPID", corpId)
.replace("REDIRECT_URI", reUrl).replace("SCOPE", scopetype)
.replace("AGENTID", agentid);
System.out.println(wxurl);
return new Result<String>("v", " ",wxurl);
}
여기는 access 가져오기token 코드
public static Map<String, String> getAccessToken(String appid,
String appsecret, String type) {
Map<String, String> accessToken = null;
String requestUrl = ACCESS_TOKEN_URL.replace("ID", appid).replace(
"SECRET", appsecret);
// http
String Obj = HttpClientUtil.httpGet(requestUrl, "UTF-8");
JSONObject jsonObject = JSONObject.parseObject(Obj);
//
if (null != jsonObject) {
try {
accessToken = new HashMap<String, String>();
accessToken.put("token", jsonObject.getString("access_token"));
accessToken
.put("expiresin", jsonObject.getString("expires_in"));
} catch (Exception e) {
accessToken = null;
// token
System.out.println(" token errcode:{"
+ jsonObject.getIntValue("errcode") + "} errmsg:{"
+ jsonObject.getString("errmsg") + "}");
}
}
return accessToken;
}
여기는 사용자userid, 즉 사용자 정보를 얻는 코드 블록입니다.
public String getUserInfo(String code) {
String accessToken = getAccessToken(corpId, agentSecret, "app").get(
"token");
// 1. url,
String get_userInfo_url = GET_USERINFO_URL.replace("ACCESS_TOKEN",
accessToken).replace("CODE", code);
// 2. , ,
String Obj = HttpClientUtil.httpGet(get_userInfo_url, "UTF-8");
JSONObject jsonObject = JSONObject.parseObject(Obj);
System.out.println("jsonObject:" + jsonObject.toString());
// 3.
if (null != jsonObject) {
if (0 != jsonObject.getIntValue("errcode")) {
return null;
}
}
//jsonObject userid,json fastjson;
return jsonObject.getString("UserId");
}
여기까지 기본적으로 이 세 가지 절차입니다. 다음은 제가 utils의 코드 블록을 붙이고 사이트 주소를 요청하는 코드도 몇 개 있습니다.
// userinfo , api
public static final String GET_USERINFO_URL = "https://qyapi.weixin.qq.com/cgi-bin/user/getuserinfo?access_token=ACCESS_TOKEN&code=CODE";
// token
public static final String ACCESS_TOKEN_URL = "https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=ID&corpsecret=SECRET";
// code
public static final String GET_CODE_URL = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=CORPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&agentid=AGENTID&state=STATE#wechat_redirect";
여기는 도구류 코드입니다.
//url ,code
public static String httpGet(String url,String code) {
System.out.println("GetPage:"+url);
String content = null;
HttpClient httpClient = new HttpClient();
// header
httpClient.getParams().setParameter(HttpMethodParams.USER_AGENT,"Mozilla/5.0 (X11; U; Linux i686; zh-CN; rv:1.9.1.2) Gecko/20090803 Fedora/3.5.2-2.fc11 Firefox/3.5.2");
GetMethod method = new GetMethod(url);
try {
int statusCode = httpClient.executeMethod(method);
System.out.println("httpClientUtils::statusCode="+statusCode);
System.out.println(method.getStatusLine());
content = new String(method.getResponseBody(), code);
} catch (Exception e) {
System.out.println("time out");
e.printStackTrace();
} finally {
if(method!=null)method.releaseConnection();
method = null;
httpClient = null;
}
return content;
}