오픈 ID는 그래서 오픈 ID를 얻기 위해, 될 SESSION_KEY 사용자를 식별 할 수 있습니다.
오픈 아이디 마이크로 채널 직접 애플릿에서 획득 될 수 있으며, 배경을 마이크로 채널, 마이크로 채널의 인터페이스에 대한 요청을 보낼 필요가 백그라운드 처리 후의 배경 문자열 JSON 형식을 반환하고 상기 마이크로 채널 애플릿로 되돌아 간다.
게시 애플릿이 HTTPS 도메인 이름이 필요합니다, 테스트 시간은 HTTP를 사용할 수 있습니다.
App.js 애플릿, 로그인의 내용을 () 수정 :
// 登录 wx.login ({ 성공 : 고해상도 => { //는 发送res.code到后台换取오픈 ID, sessionKey, unionId 경우 (res.code) { wx.request ({ URL : '에 http : // localhost를 : 84 / 사용자 / 로그인 ' , 방법 "POST" , 데이터 { 번호 : res.code } 헤더 { '콘텐츠 유형 ':'을 application / x-www-form-urlencoded를 ' } 성공 (해상도) { 콘솔 .LOG ( "오픈 ID :"+ res.data.openid) 의 경우(res.data.openid = ""|| res.data.openid =! 널 (null) ) { // 성공적으로 로그인 wx.setStorageSync ( "오픈 ID", res.data.openid); // 캐시에 저장된 사용자 ID wx.setStorageSync ( "SESSION_KEY", res.data.session_key); // 저장 캐시 SESSION_KEY } 다른 사람이 { // 로그인 실패가 // 오류 페이지에 TODO 점프, 재 시도하는 사용자 요청 반환 false로를 ; } } }) } 다른 { 을 console.log는 ( '사용자 로그인 상태가 실패 해!'+ res.errMsg) } } })
다음은 HTTP 요청 : // localhost를 : 84 / 사용자 / 로그인
배경 처리 클래스 :
패키지 com.ft.feathertrade.handler; 수입 com.fasterxml.jackson.databind.ObjectMapper; 수입 com.ft.feathertrade.entity.OpenIdJson; 수입 com.ft.feathertrade.utils.HttpUtil; 수입 org.springframework.web.bind.annotation.PostMapping; 수입 org.springframework.web.bind.annotation.RequestParam; 수입 org.springframework.web.bind.annotation.RestController; 수입 때 java.io.IOException; @RestController 공공 클래스 LoginHandler { 개인 문자열 APPID = "" ; 개인 문자열 appSecret = "" ; @PostMapping ("/ 사용자 / 로그인" ) 공공 문자열을 위해 userLogin (@RequestParam ( "코드") 문자열 코드) 가 발생 IOException이 { 문자열 결과 = "를" ; 은 try { // 요청 위챗 서버, 코드 오픈 ID 교환한다. HttpUtil이 도구는 나중에 실현 주어집니다되며, 구성 클래스는 구성 애플릿은, 코드가 나중에 주어질 것이다 = 결과 HttpUtil.doGet ( "https://api.weixin.qq.com/sns/jscode2session?appid=" + 다음은이 .appID + "비밀 =" + 다음은이 .appSecret + "& js_code =" + 코드 + "널 ); } 캐치 (예외 전자) { e.printStackTrace (); } ObjectMapper 매퍼 = 새로운 ObjectMapper (); OpenIdJson openIdJson = mapper.readValue (결과 OpenIdJson. 클래스 ); 에서 System.out.println (result.toString ()); 에서 System.out.println (openIdJson.getOpenid ()); 반환 결과를; } }
HttpUtil 도구 :
패키지 com.ft.feathertrade.utils, 수입 java.io.BufferedReader의; 가져 오기 java.io.InputStreamReader, 가져 오기 java.net.HttpURLConnection, 가져 오기 의 java.net.URL; 가져 오기 java.net.URLEncoder, 가져 오기 java.util.HashMap에 ; 가져 오기 java.util.Map.Entry, 가져 오기 는 java.util.Set, 가져 오기 org.apache.commons.httpclient.HttpStatus는; // 같은 의존성 또는 받는다는 항아리 패키지를 추가 / ** 이 종속성 추가의 pom.xml하기 에서 <의존성> <의 groupId> 몬즈 HttpClient를 <의 groupId /> <artifactId를> 몬즈 HttpClient를 <artifactId를 /> <전> 3.1 </ 버전> </ 의존성> * * / 공용 클래스 HttpUtil { 공공 정적 문자열의 doGet은 (문자열 URLPath로서이되는 HashMap은 <문자열, 개체> PARAMS)가 발생 예외 { StringBuilder의 SB = 새 의 StringBuilder (URLPath로서); 경우 (PARAMS =! 널 (null) && params.isEmpty (!)) { // 说明有参数 sb.append ( "?" ); 설정 <항목 <문자열, 객체 >> = 설정 ) params.entrySet (; 대한 (항목 <문자열, 개체> 항목 : 세트) { // 遍历지도里面的参数 문자열 키 =entry.getKey (); 문자열 값 = "" ; 경우 ( 널 =! entry.getValue ()) { 값 = entry.getValue의 toString () ().; // 转码 값 = URLEncoder.encode (값 "UTF-8" ); } ((키)으로 .Append sb.append "=") (값)으로 .Append 첨부 ( "및". ); } sb.deleteCharAt (sb.length () - 1); // 删除最后一个& } // 에서 System.out.println (sb.toString ());새로운 URL (sb.toString ()); HttpURLConnection의 CONN = (HttpURLConnection의) url.openConnection (); conn.setConnectTimeout ( 5000); // 5 초超时 conn.setRequestMethod ( "GET" ); 경우 (conn.getResponseCode () ==를 HttpStatus.SC_OK) { // HttpStatus.SC_OK == // 200 의 BufferedReader 리더 = 새로운 BufferedReader로 ( 새로운 InputStreamReader ( conn.getInputStream ())); SBS의 StringBuilder = 새 의 StringBuilder (); 문자열 라인; 동안((라인 reader.readLine = ())! = null의 ) { sbs.append (행); } 리턴 )를 sbs.toString (; } 반환 널 (null)을 ; } }
OpenIdJson 엔티티 클래스 :
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
패키지 com.ft.feathertrade.entity; 공공 클래스 OpenIdJson { 개인 문자열 오픈 ID; 개인 문자열 SESSION_KEY; 공공 문자열 getOpenid () { 반환 오픈 ID; } 공공 공극 setOpenid (문자열 오픈 ID) { 이 .openid = 오픈 ID; } 공공 문자열 getSession_key () { 반환 SESSION_KEY; } 공공 공극 setSession_key (문자열 SESSION_KEY) { 이 .session_key = SESSION_KEY; } }