OpenIDのはとてもopenidのそれを得るために、なっSESSION_KEY、ユーザーを識別することができます。
OpenIDのマイクロチャネルに直接アプレットで取得することができない、バックグラウンドは、マイクロチャネル、マイクロチャネルのインタフェースに要求を送信する必要があり、バックグラウンド処理後の背景に、文字列のJSON形式を返し、その後、マイクロチャネル・アプレットに戻ります。
公開されたアプレットは、テスト時間は、HTTPを使用することができ、httpsのドメイン名が必要です。
App.jsアプレット、ログインしてコンテンツ()を変更します。
// 登录 wx.login({ 成功:RES => { // 发送res.code到后台换取OpenIDで、SESSIONKEY、unionId 場合(res.code){ wx.request({ URL:「のhttp:// localhostを:84 /ユーザ/ログイン、 方法: 'POST' 、 データ:{ コード:res.code }、 ヘッダ:{ 'コンテンツタイプ': 'アプリケーション/ x-www-form-urlencodedで' }、 成功(RES){ コンソール.logの( "OpenIDの:" + res.data.openid); 場合(!res.data.openid = ""!|| res.data.openid = ヌル){ // ログイン成功 wx.setStorageSync( "OpenIDの"、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 { // コードのOpenIDと引き換えに要求微信サーバ。HttpUtilはツールであり、後述する、Configureクラスが設定アプレットで、コードは後述する実現 =結果HttpUtil.doGet( 「https://api.weixin.qq.com/sns/jscode2session?appid=」 + この .appID + "シークレット=&" + この .appSecret + "&js_code =" + コード +」ヌル); } キャッチ(例外e){ 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; // そのような依存やMavenのjarパッケージを追加するには / ** この依存関係はのpom.xmlに追加で <依存> <groupIdを>コモンズ-HttpClientを<groupIdを/> <たartifactId>コモンズ-HttpClientを<たartifactId /> <バージョン> 3.1 </バージョン> </依存関係> * * / パブリック クラスHttpUtil { パブリック 静的文字列のdoGet(文字列URLパス、ハッシュマップの<string、オブジェクト> paramsは) スロー例外{ StringBuilderのSB = 新しいStringBuilderの(URLパス)を、 もし(!のparams = nullを!&& params.isEmpty()){ // 说明有参数 sb.append( "?" ); 設定の<entry <文字列オブジェクト>>設定= 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); // 5S超时 conn.setRequestMethod( "GET" ); もし(conn.getResponseCode()== HttpStatus.SC_OK){ // HttpStatus.SC_OK == // 200 BufferedReaderのリーダー= 新しい BufferedReaderの(新しいInputStreamReaderの( conn.getInputStream()))。 StringBuilderのSBS = 新しいStringBuilderの(); 文字列のライン。 同時に((ライン= reader.readLine())!= NULL ){ sbs.append(ライン) } を返す)(sbs.toStringします。 } 戻り ヌル。 } }
OpenIdJsonのエンティティクラス:
パッケージcom.ft.feathertrade.entity。 パブリック クラスOpenIdJson { プライベート文字列のOpenID; プライベート文字列のSESSION_KEY。 パブリック文字列getOpenid(){ リターンのOpenID。 } 公共 ボイドsetOpenid(文字列のOpenID){ この .openid = OpenIDを、 } パブリック文字列getSession_key(){ 戻りSESSION_KEY。 } 公共 ボイドsetSession_key(文字列SESSION_KEY){ この .session_key = SESSION_KEY。 } }