Wechat Open Platform Access、公式Webサイト:https://open.weixin.qq.comでは、公式Webサイトにアプリケーションを登録および追加した後、app_idとapp_secretを取得できます。
ステップ1:次のように、authservice、wechatauthserviceを継承するインターフェイスを作成します
パブリックインターフェイスwechatauthservice extends authservice {public jsonobject getuserinfo(String AccessToken、String OpenID);}ステップ2: Wechatserviceの特定の実装は次のとおりです
@servicepublic class wechatauthserviceimpl extends defaultauthserviceimpl explments wechatauthservice {private logger logger = loggerfactory.getlogger(wechatauthserviceimpl.class); "https://open.weixin.qq.com/connect/qrconnect?appid=%S&redirect_uri=%S&response_type=code&scope =%&state = %% s#wechat_redirect"; //ユーザーのURLを取得し、PointIDおよびAccess-Toke Private Static Final String AccessToke_openid_url = "https://api.weixin.qqc.com/sns/oauth2/access_token?appid =%secretret=%S&code =%&grant_type = authorization_code" "; private static final string refresh_token_url = "https://api.weixin.qqc.com/sns/oauth2/refresh_token?appid=%S&grant_type=refresh_token&refresh_token=%S"; private static final string user_info_url = "https://api.weixin.qqq.com/sns/userinfo?access_token=%S&openid=%S&lang=zh_cn"; private static final string app_id = "xxxxxx"; private static final string app_secret = "xxxxxx";プライベート静的最終文字列scope = "snsapi_login";プライベート文字列callbackurl = "https://www.xxx.cn/auth/wechat"; // domain name @override public string getauthorizationurl()を呼び出すunsupportedencodingexception {callbackurl = urlencoder.encode(callbackurl、 "utf-8"); string url = string.format(autherization_url、app_id、callbackurl、scope、system.currenttimemillis()); return url; } @Override public String getAccesStoken(String code){string url = string.format(accesstoke_openid_url、app_id、app_secret、code); uricomponentsbuilder builder = uricomponentsbuilder.fromhttpurl(url); uri uri = builder.build()。encode()。touri(); string resp = getRestTemplate()。getForObject(uri、string.class); logger.error( "getaccestoken resp ="+resp); if(resp.contains( "openid")){jsonobject jsonobject = jsonobject.parseobject(resp); string access_token = jsonobject.getString( "Access_Token"); string openid = jsonobject.getString( "OpenID");; jsonobject res = new jsonobject(); res.put( "Access_Token"、Access_Token); res.put( "openid"、openid); res.put( "refresh_token"、jsonobject.getString( "refresh_token")); RES.TOJSONSTRING(); } else {throw new ServersException( "アクセストークンFailed、msg ="+rep); }} // WeChatインターフェイスでは、TokenとOpenIDが一緒に戻ります。したがって、この方法は@Override public String getopenid(String AccessToken){return null; } @Override public jsonObject getUserInfo(String AccessToken、String OpenID){string url = string.format(user_info_url、accesstoken、openid); uricomponentsbuilder builder = uricomponentsbuilder.fromhttpurl(url); uri uri = builder.build()。encode()。touri(); string resp = getRestTemplate()。getForObject(uri、string.class); logger.error( "getuserinfo resp ="+rep); if(resp.contains( "errcode")){throw new serviceException( "ユーザー情報の取得、msg ="+rep); } else {jsonobject data = jsonobject.parseObject(resp); jsonObject result = new jsonobject(); result.put( "id"、data.getString( "Unionid")); result.put( "nickname"、data.getString( "nickname")); result.put( "avatar"、data.getString( "headimgurl"));返品結果; }} // wechatのトークンの有効期間は2時間しかなく、随時再取得する必要があるため、職員はrefresh_tokenに従ってトークンを更新して取得する方法を提供します。このプロジェクトはユーザー//情報のみを取得し、情報をライブラリに保存するため、@Overrideパブリック文字列REFRESHTOKEN(String REFRESH_TOKEN){String url = String.Format(REFRESH_TOKEN_URL、APP_ID、REFRESH_TOKEN)の2時間で十分に保存します。 uricomponentsbuilder builder = uricomponentsbuilder.fromhttpurl(url); uri uri = builder.build()。encode()。touri(); ResponseNtity <JSonObject> resp = getRestTemplate()。getForentity(uri、jsonobject.class); jsonobject jsonobject = resp.getBody(); string access_token = jsonobject.getString( "Access_Token"); runter access_token; }}ステップ3:
コントローラーで呼び出されると、コードは次のとおりです。
@RequestMapping(value = "/wxloginpage"、method = requestmethod.get)public jsonobject wxloginpage()throws exception {string uri = wechatauthservice.getauthorizationurl(); return loginpage(uri); } @RequestMapping(value = "/wechat")public void callback(string code、httpservletrequest request、httpservletResponse応答)スロー例外{文字列result = wechatauthservice.getAccestoken(code); jsonobject jsonobject = jsonobject.parseobject(result); string access_token = jsonobject.getString( "Access_Token"); string openid = jsonobject.getString( "OpenID"); // String REFRESH_TOKEN = JSONOBJECT.GETSTRING( "REFRESH_TOKEN"); // access_tokenをCookieに保存し、2時間有効期限が切れます。 AccessTokencookie.setMaxage(60 *2); Response.AddCookie(AccessTokencookie); Cookie OpenIDCookie = new Cookie( "OpenID"、openID); OpenIdCookie.setMaxage(60 *2); Response.AddCookie(OpenIDCookie); //ユーザーがOpenIDに基づいてログインしたかどうかを判断します。 kmsuser user = userservice.getuserbyCondition(openID); if(user == null){respons.sendredirect(request.getContextPath() + "/student/html/index.min.html#/bind?type="+constants.login_type_wechat); } else {//ユーザーが既に存在する場合、response.sendredirect(request.getContextPath() + "/student/html/index.min.html#/app/home?open_id=" + openID); }}ステップ4:
フロントデスクJSで、最初にAuth/WXLoginPageを要求し、認証アドレスを取得し、ユーザー認証後にCall Back/Auth/Wechatを使用してから、この方法で論理処理を実行します。
遭遇したトラブル:
1.公式WeChat Webサイトでコールバックドメイン名を構成する場合、HTTPまたはHTTPSプロトコルは必要ありません。ドメインを書くだけです。たとえば、http://baidu.comでは、baidu.comに記入するだけです。 baidu.com/auth/wechatなどのプロジェクトの下のコントローラーにジャンプしたい場合は、baidu.comを構成するだけで、後続のauth/wechatを指定する必要はありません。後続のアドレスは、コードのコールバックのアドレスに記述できます。コードはhttps://baidu.com/auth/wechatとして構成する必要があります。
2。承認されたQRコードインターフェイスにジャンプすると、QRコードをリリースできない状況に遭遇します。これは、コード内のコールバックアドレスのためです。上記のコードでメソッドの構成に問題はないはずです。
上記はこの記事のすべての内容です。みんなの学習に役立つことを願っています。誰もがwulin.comをもっとサポートすることを願っています。