[マイクロ] springboot文字のアプレットは、ユーザーの背景のOpenIDを取得します。

OpenIDのはとてもo​​penidのそれを得るために、なっ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。
    } 
}
コードの表示

 

おすすめ

転載: www.cnblogs.com/to-red/p/11563854.html