日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

springboot 微信授權網(wǎng)頁登錄操作流程

瀏覽:138日期:2022-06-16 16:00:22
操作流程

假設你已經(jīng)有自己的域名,因為微信公眾號和微信回調(diào)都需要域名

先看看官方給的文檔

根據(jù)官方文檔,主要流程如下:

(1)引導用戶進入授權頁面同意授權,獲取code

(2)通過code換取網(wǎng)頁授權access_token(與基礎支持中的access_token不同)

(3)刷新access_token(如果有需要)

(3)通過網(wǎng)頁授權access_token和openid獲取用戶基本信息

提示:以下是本篇文章正文內(nèi)容,下面案例可供參考

編寫微信授權方法和獲取用戶信息方法 二、使用步驟獲取微信二維碼信息

代碼如下(示例):

/** * 公眾號微信登錄授權 */ @RequestMapping('/wxLogin') public void wxLogin(HttpServletResponse response) throws IOException { //這個url的域名必須在公眾號中進行注冊驗證,這個地址是成功后的回調(diào)地址 String backUrl = 'http://7ca0c439f61c.ngrok.io/callback';//使用自己的域名 // 第一步:用戶同意授權,獲取code //請求地址 snsapi_base snsapi_userinfo String url = 'https://open.weixin.qq.com/connect/oauth2/authorize' + '?appid=' + HttpClientUtil.APPID + '&redirect_uri=' + URLEncoder.encode(backUrl,'utf-8') + '&response_type=code' + '&scope=snsapi_userinfo' + '&state=STATE#wechat_redirect'; logger.info('forward重定向地址{' + url + '}'); //必須重定向,否則不能成功 response.sendRedirect(url); }備注:在前端頁面直接加載url 就可以出現(xiàn)二維碼界面了。直接用的微信的頁面,也可以根據(jù)自己的愛好進行設計頁面 /** * 公眾號微信登錄授權回調(diào)函數(shù) */ @RequestMapping('/callback') public UserLoginRes callback(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { UserLoginRes userLoginRes = new UserLoginRes(); try{ WXUserInfoReq weixinUserInfo = new WXUserInfoReq(); /*start 獲取微信用戶基本信息*/ String code = req.getParameter('code'); //第二步:通過code換取網(wǎng)頁授權access_token String url = 'https://api.weixin.qq.com/sns/oauth2/access_token?' + 'appid=' + HttpClientUtil.APPID + '&secret=' + HttpClientUtil.APPSECRET + '&code=' + code + '&grant_type=authorization_code'; System.out.println(url); String result = HttpClientUtil.doGet(url); JSONObject jsonObject = JSON.parseObject(result); /* { 'access_token':'ACCESS_TOKEN', 'expires_in':7200, 'refresh_token':'REFRESH_TOKEN', 'openid':'OPENID', 'scope':'SCOPE' } */ String openid = jsonObject.getString('openid'); String access_token = jsonObject.getString('access_token'); //第三步驗證access_token是否失效; String chickUrl = 'https://api.weixin.qq.com/sns/auth?access_token=' + access_token + '&openid=' + openid; String resultInfo = HttpClientUtil.doGet(chickUrl); JSONObject chickuserInfo = JSON.parseObject(resultInfo); System.out.println(chickuserInfo.toString()); if (!'0'.equals(chickuserInfo.getString('errcode'))) { String refreshInfo1 = HttpClientUtil.doGet(chickUrl); JSONObject refreshInfo = JSON.parseObject(refreshInfo1); /* { 'access_token':'ACCESS_TOKEN', 'expires_in':7200, 'refresh_token':'REFRESH_TOKEN', 'openid':'OPENID', 'scope':'SCOPE' } */ access_token = refreshInfo.getString('access_token'); } // 第四步:拉取用戶信息 String infoUrl = 'https://api.weixin.qq.com/sns/userinfo?access_token=' + access_token + '&openid=' + openid + '&lang=zh_CN'; JSONObject userInfo = JSON.parseObject(HttpClientUtil.doGet(infoUrl)); /* { 'openid':' OPENID', 'nickname': NICKNAME, 'sex':'1', 'province':'PROVINCE' 'city':'CITY', 'country':'COUNTRY', 'headimgurl': 'http://wx.qlogo.cn/mmopen/g3MonUZtNHkdmzicIlibx6iaFqAc56vxLSUfpb6n5WKSYVY0ChQKkiaJSgQ1dZuTOgvLLrhJbERQQ4eMsv84eavHiaiceqxibJxCfHe/46', 'privilege':[ 'PRIVILEGE1' 'PRIVILEGE2' ], 'unionid': 'o6_bmasdasdsad6_2sgVt7hMZOPfL' } */ System.out.println(userInfo.getString('openid') + ':' + userInfo.getString('nickname') +':' + userInfo.getString('sex')); }catch (Exception e){ e.printStackTrace(); userLoginRes.setResult('NO'); userLoginRes.setRtnErrId('ERROR'); userLoginRes.setRtnErrMsg(e.getMessage()); } return userLoginRes; }使用到的HttpClientUtil工具類

代碼如下(示例):

public class HttpClientUtil { //appid、secret為自己公眾號平臺的appid和secret public static final String APPID='xxxxxxx'; public static final String APPSECRET ='xxxxxxx'; public static String doGet(String url, Map<String, String> param) { // 創(chuàng)建Httpclient對象 CloseableHttpClient httpclient = HttpClients.createDefault(); String resultString = ''; CloseableHttpResponse response = null; HttpGet httpGet = null; try { // 創(chuàng)建uri URIBuilder builder = new URIBuilder(url); if (param != null) { for (String key : param.keySet()) { builder.addParameter(key, param.get(key)); } } URI uri = builder.build(); // 創(chuàng)建http GET請求 httpGet = new HttpGet(uri); httpGet.setHeader('Host', 'api.weixin.qq.com'); httpGet.setHeader('User-Agent', 'Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko'); httpGet.setHeader('Accept', 'text/html, application/xhtml+xml, */*'); httpGet.setHeader('Accept-Encoding', 'gzip, deflate, br'); httpGet.setHeader('Connection', 'keep-alive'); httpGet.setHeader('Accept-Language', 'zh-CN'); httpGet.setHeader('Cache-Control', 'no-cache'); // 執(zhí)行請求 response = httpclient.execute(httpGet); // 判斷返回狀態(tài)是否為200 if (response.getStatusLine().getStatusCode() == 200) { resultString = EntityUtils.toString(response.getEntity(), 'UTF-8'); } } catch (Exception e) { e.printStackTrace(); } finally { try { if (response != null) { response.close(); } httpGet.releaseConnection(); httpclient.close(); } catch (IOException e) { e.printStackTrace(); } } return resultString; } public static String doGet(String url) { return doGet(url, null); } public static String doPost(String url, Map<String, String> param) { // 創(chuàng)建Httpclient對象 CloseableHttpClient httpClient = HttpClients.createDefault(); CloseableHttpResponse response = null; String resultString = ''; try { // 創(chuàng)建Http Post請求 HttpPost httpPost = new HttpPost(url); // 創(chuàng)建參數(shù)列表 if (param != null) { List<NameValuePair> paramList = new ArrayList<>(); for (String key : param.keySet()) { paramList.add(new BasicNameValuePair(key, param.get(key))); } // 模擬表單 UrlEncodedFormEntity entity = new UrlEncodedFormEntity(paramList); httpPost.setEntity(entity); } // 執(zhí)行http請求 response = httpClient.execute(httpPost); resultString = EntityUtils.toString(response.getEntity(), 'utf-8'); } catch (Exception e) { e.printStackTrace(); } finally { try { response.close(); } catch (IOException e) { e.printStackTrace(); } } return resultString; } public static String doPost(String url) { return doPost(url, null); } public static String doPostJson(String url, String json) { // 創(chuàng)建Httpclient對象 CloseableHttpClient httpClient = HttpClients.createDefault(); CloseableHttpResponse response = null; String resultString = ''; try { // 創(chuàng)建Http Post請求 HttpPost httpPost = new HttpPost(url); // 創(chuàng)建請求內(nèi)容 StringEntity entity = new StringEntity(json, ContentType.APPLICATION_JSON); httpPost.setEntity(entity); // 執(zhí)行http請求 response = httpClient.execute(httpPost); resultString = EntityUtils.toString(response.getEntity(), 'utf-8'); } catch (Exception e) { e.printStackTrace(); } finally { try { response.close(); } catch (IOException e) { e.printStackTrace(); } } return resultString; } public static String doGetStr(String httpurl) { HttpURLConnection connection = null; InputStream is = null; BufferedReader br = null; String result = null;// 返回結果字符串 try { // 創(chuàng)建遠程url連接對象 URL url = new URL(httpurl); // 通過遠程url連接對象打開一個連接,強轉成httpURLConnection類 connection = (HttpURLConnection) url.openConnection(); // 設置連接方式:get connection.setRequestMethod('GET'); // 設置連接主機服務器的超時時間:15000毫秒 connection.setConnectTimeout(15000); // 設置讀取遠程返回的數(shù)據(jù)時間:60000毫秒 connection.setReadTimeout(60000); //設置請求頭 connection.setRequestProperty('Host', 'api.weixin.qq.com'); connection.setRequestProperty('User-Agent', 'Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko'); connection.setRequestProperty('Accept', 'text/html, application/xhtml+xml, */*'); connection.setRequestProperty('Accept-Encoding', 'gzip, deflate, br'); connection.setRequestProperty('Connection', 'keep-alive'); connection.setRequestProperty('Accept-Language', 'zh-CN'); connection.setRequestProperty('Cache-Control', 'no-cache'); // 發(fā)送請求 connection.connect(); // 通過connection連接,獲取輸入流 if (connection.getResponseCode() == 200) { is = connection.getInputStream(); // 封裝輸入流is,并指定字符集 br = new BufferedReader(new InputStreamReader(is, 'UTF-8')); // 存放數(shù)據(jù) StringBuffer sbf = new StringBuffer(); String temp = null; while ((temp = br.readLine()) != null) { sbf.append(temp); sbf.append('rn'); } result = sbf.toString(); } } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { // 關閉資源 if (null != br) { try { br.close(); } catch (IOException e) { e.printStackTrace(); } } if (null != is) { try { is.close(); } catch (IOException e) { e.printStackTrace(); } } connection.disconnect();// 關閉遠程連接 } return result; } }最后根據(jù)實際業(yè)務處理用戶登錄

//3.根據(jù)uuid查詢用戶是否存在,如果存在直接登錄。如果不存在則自動注冊,在登錄 UserInfoModel userInfoByWechat = iUserDao.getUserInfoByWechat(userInfoStr.get('unionid').toString()); if (userInfoByWechat != null) { return ReturnMessage.success(0,'獲取成功',userInfoByWechat); } //4.數(shù)據(jù)庫添加用戶信息 String username = userInfoStr.get('nickname').toString(); String unionid = userInfoStr.get('unionid').toString(); UserInfoBean userInfoBean = new UserInfoBean(); userInfoBean.setUuid(unionid); userInfoBean.setUsername(username); // 微信登錄 userInfoBean.setStatus(2); iUserDao.insertUser(userInfoBean); //5.根據(jù)uuid查詢新注冊的用戶信息 UserInfoModel userInfoModel= iUserDao.getUserInfoByWechat(unionid); if (userInfoModel == null) { return ReturnMessage.fail(400,'用戶添加失敗,請重新操作'); }

到此這篇關于springboot 微信授權網(wǎng)頁登錄操作流程的文章就介紹到這了,更多相關springboot 微信授權登錄內(nèi)容請搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持好吧啦網(wǎng)!

標簽: 微信
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
国产a久久精品一区二区三区| 中文字幕一区二区精品区| 国产精品久久久久久久久久久久久久久 | a天堂资源在线| 久久精品免费看| 国产成人免费视频网站视频社区| 日韩一区三区| 日本精品久久| 免费观看不卡av| 日韩avvvv在线播放| 综合一区在线| 欧美精品国产| 国产精品久久久久久久久久10秀| 一区福利视频| 在线中文字幕播放| 亚洲九九精品| 快she精品国产999| 欧美日韩免费观看视频| 欧美国产极品| 福利一区二区| 少妇久久久久| 欧美美女一区| 精品91久久久久| 久久国产精品亚洲77777| 蜜桃传媒麻豆第一区在线观看| 亚洲一区二区三区无吗| 国产精品一区二区av交换| 男人的天堂久久精品| 亚洲色图综合| 麻豆国产精品视频| 精品久久精品| 亚洲综合中文| 国产乱码精品一区二区亚洲| 日韩va欧美va亚洲va久久| 青青草91久久久久久久久| 久久久久伊人| 丝袜美腿一区二区三区| 亚洲精品少妇| 国产精品videossex久久发布| 精品国产欧美| 国产一级一区二区| 日本欧洲一区二区| 婷婷成人基地| 中文在线日韩| 日本国产亚洲| 亚洲成人av观看| 999精品在线| 激情综合网站| 日韩精品91亚洲二区在线观看| 国产精品探花在线观看| 麻豆理论在线观看| 日韩视频精品在线观看| 亚洲高清毛片| 日韩和欧美的一区| 亚洲天堂资源| 国产精品大片免费观看| 久久一区二区中文字幕| 久久人人97超碰国产公开结果| 亚洲专区视频| 日韩精品诱惑一区?区三区| 欧美亚洲福利| 免费在线观看一区二区三区| 色老板在线视频一区二区| 亚洲九九精品| 欧美日韩一区二区三区视频播放| 欧美视频久久| 视频一区欧美精品| 99国产精品自拍| 国产一区二区三区精品在线观看| 99国产精品久久久久久久| 黄色在线网站噜噜噜| 欧美啪啪一区| 偷拍精品精品一区二区三区| 电影亚洲精品噜噜在线观看| 日韩精品导航| 免费在线观看日韩欧美| 国产精品免费看| 欧美日韩在线网站| 国产精品一区二区精品视频观看| 视频一区二区不卡| 女人天堂亚洲aⅴ在线观看| 国产99亚洲| 国产精品99一区二区| 三级在线看中文字幕完整版| 国产精品久久国产愉拍| 日韩视频1区| 欧美在线精品一区| 久久高清国产| 激情综合亚洲| 高清不卡亚洲| 私拍精品福利视频在线一区| 91日韩欧美| 欧美在线网站| 日韩三级一区| 国产精选一区| 精品国产欧美日韩| 久久精品日韩欧美| 中文字幕高清在线播放| 国产精品精品国产一区二区| 日本成人在线一区| 国产极品一区| 久久国产影院| 欧美黄色网页| 免费人成在线不卡| 亚洲精品字幕| 欧美激情aⅴ一区二区三区| 久久免费精品| 久久精品av| 日韩和欧美一区二区三区| 中文字幕人成乱码在线观看 | 快she精品国产999| 91精品丝袜国产高跟在线| 久久精品国产99国产精品| 欧美日韩1区| 狠狠躁少妇一区二区三区| 欧美日韩免费观看一区=区三区| 亚洲精品护士| 久久精品亚洲人成影院 | 麻豆视频观看网址久久| 国产成年精品| 日韩精品午夜视频| 国内精品福利| 久久精品九色| 日韩天堂av| 久草精品视频| 伊人久久亚洲| 中国字幕a在线看韩国电影| 日本在线视频一区二区| 久久一区二区三区电影| 国产精品自拍区| 国产毛片久久| av在线日韩| 伊人久久国产| 老鸭窝一区二区久久精品| 国产三级精品三级在线观看国产| aa国产精品| 亚洲成人不卡| 四虎国产精品免费观看| 狂野欧美性猛交xxxx| 日韩亚洲精品在线观看| 亚洲免费影视| 老色鬼精品视频在线观看播放| 色综合视频一区二区三区日韩 | 成人台湾亚洲精品一区二区| 三级亚洲高清视频| 日韩欧美自拍| 成人午夜在线| 亚洲播播91| 伊人网在线播放| 日韩精品91亚洲二区在线观看| 亚洲精品少妇| 国产精品视频一区视频二区| 蜜臀精品一区二区三区在线观看| 午夜久久美女| 中文无码日韩欧| 日韩激情啪啪| 国产精品成人一区二区不卡| 天堂а√在线最新版中文在线| 麻豆国产欧美日韩综合精品二区| 欧美国产另类| 国产网站在线| 香蕉精品视频在线观看| 亚洲伊人精品酒店| **爰片久久毛片| 另类综合日韩欧美亚洲| 韩国久久久久久| 老司机精品久久| 欧美一区免费| 99久精品视频在线观看视频| 亚洲综合图色| 久久97视频| 色爱av综合网| 亚洲tv在线| 丁香婷婷久久| 免费一区二区视频| 免费在线小视频| 婷婷五月色综合香五月| 亚洲精品成a人ⅴ香蕉片| 国产一区二区精品久| 91精品婷婷色在线观看| 欧美久久一区二区三区| 伊人久久亚洲影院| 精品亚洲自拍| 日韩精品视频网| 午夜日韩福利| 国产一区二区三区久久久久久久久| 日韩在线观看一区二区| 日韩中文首页| 国模大尺度视频一区二区| 男女男精品视频网| 国产精品亚洲片在线播放| 亚洲精品.com| 欧美在线日韩| 午夜在线视频观看日韩17c| 久久激情五月婷婷| 亚洲欧美日韩高清在线| 久久中文字幕一区二区三区| 天堂va在线高清一区| 另类激情亚洲| 国产精品社区|