亚洲视频二区I天堂网av 在线I丰满人妻AV一区二区三I088精品在线观看视频IAV在线网站免费I亚洲人成影院在线I91精品91久久久777777I131M久I日日摸日日

027-81331413

java實現(xiàn)微信小程序登錄態(tài)維護

發(fā)布時間:2020-12-11 瀏覽:3440

  相信不少喜歡開發(fā)的朋友都已經(jīng)知道微信小程序是個什么物種了,樓主也是從小程序內(nèi)測期間就開始關注,并且也寫過幾個已經(jīng)上線的微信小程序。但是基本上都是寫的純前端,最近樓主從后端到前端寫一個完整的小程序項目,中間碰到了一些問題,樓主會找一些個人覺得有學習價值的點不定時的拿出來跟大家分享,希望對你有一些幫助。

  ????本次就從最基本的微信小程序登錄態(tài)維護開始吧。小程序官方api文檔里面有對登錄態(tài)的一個完整的解釋,并且有相關的代碼。想看詳情,可以出門右轉(zhuǎn):https://mp.weixin.qq.com/debug/wxadoc/dev/api/api-login.html#wxloginobject我第一次看的時候沒怎么看懂,并且代碼沒有提供java版本的,這讓一個java程序員情何以堪,所以在努力研究了以后決定要做一個java版本的簡單的demo放出來。

  ????作為服務端,如果想獲得到使用微信小程序的會員信息,就需要小程序作為客戶端把會員的基本信息傳過來。類似于手機號,openId可以作為當前小程序中用戶的唯一性標志。然而如果把會員的openId信息明文直接在服務端與小程序端來回傳輸?shù)脑挘瑫邪踩缘膯栴}。萬一被別人得到這個openId,就相當于得到會員的手機號一樣,就可以做一些其他操作了,顯然是不安全的。

  ????為了解決這一問題微信采用了相對安全的方式。

  //app.js

  App({

  onLaunch: function() {

  wx.login({

  success: function(res) {

  if (res.code) {

  //發(fā)起網(wǎng)絡請求

  wx.request({

  url: 'https://test.com/onLogin',

  data: {

  code: res.code

  }

  })

  } else {

  console.log('獲取用戶登錄態(tài)失敗!' + res.errMsg)

  }

  }

  });

  }

  })

  微信小程序端會調(diào)用wx.login的api,然后會得到一個code,這個code對外人來講是沒有任何意義的,可以放心的傳給服務端。服務端得到code以后,加上你申請小程序時的appId, app secret,去調(diào)微信的接口

  https://api.weixin.qq.com/sns/jscode2session?appid=APPID&secret=SECRET&js_code=JSCODE&grant_type=authorization_code 就可以得到以下參數(shù):

  openid 用戶唯一標識 session_key 會話密鑰 unionid 本字段在滿足一定條件的情況下才返回 其中openid 就是會員的唯一性標記,此時服務端可以保存下來。 session_key 以后解密 unionId(整個開放平臺會員的唯一性標識)時有用。

  ????服務端得到openid以后,為了后邊的交互,要保存下來。一般來講有兩種方式:一種是直接入數(shù)據(jù)庫,一種是采用效率高一點的緩存。樓主采用的是后者,方式是redis。

  ????按照微信的建議此時需要生成一個不重復值作為openId的唯一性標識。這里采用的是java的uuid。然后把這個uuid值作為key,把openid以及后面會用到的session_key作為value,存進redis。并且把uuid值返回給小程序。這樣小程序就可以直接拿uuid值跟服務端交互。

  ????也許會有人問,如果有人得到uuid值其實跟得到openid沒什么區(qū)別啊,都相當于是會員的唯一性標志。

  ????所以這里要對這個uuid值進行一個處理。首先存入redis時要有時效性。session_key在微信服務器有效期是30天,建議服務端緩存session_key不超過30天。當小程序傳過來的uuid值過期時,認為這是過期的uuid,則重新走wx.login步驟。

  ????為了方便redis中不僅會寸uuid與openid的對應關系。還會再存一條openid對應uuid的記錄,目的是為了下一次重新wx.login步驟時根據(jù)openid找到之前老的uuid,如果存在的話就刪掉,然后查詢一條新的uuid值,并且把openid對應的這條記錄也更新掉。這樣redis服務器中就不會有多余的臟數(shù)據(jù),減輕服務器的負擔。

  ????以上就是我理解的整個登錄態(tài)的過程,當然還有wx.checkSession這些沒有講到,其實就是發(fā)現(xiàn)session_key失效是再重新走一遍上述的流程就可以了。所以沒有仔細說。不知道我有沒有講清楚。我會把整個流程的關鍵代碼貼出來,供大家參考。

  @ActionKey("/loginByWeixin")

  public void loginByWeixin() throws Exception {

  logger.info("Start getSessionKey");

  String json = HttpKit.readData(getRequest());

  JSONObject reqJson = JSON.parseObject(json);

  String jsCode = reqJson.getString("code");

  if (jsCode == null || "".equals(jsCode)) {

  logger.info("缺少必要參數(shù)");

  renderJson(new OutRoot().setCode("100").setMsg(SYS.PARAMETER_FAIL));

  } else {

  List record = appInfoService.selectAppInfo();

  String appId = record.get(0).get("app_id");

  String appSecret = record.get(0).getStr("app_secret");

  if (appId == null || "".equals(appId) || appSecret == null || "".equals(appSecret)) {

  logger.info("缺少必要參數(shù)");

  renderJson(new OutRoot().setCode("100").setMsg(SYS.PARAMETER_FAIL));

  } else {

  String url = "https://api.weixin.qq.com/sns/jscode2session";

  String httpUrl = url + "?appid=" + appId + "&secret=" + appSecret + "&js_code=" + jsCode

  + "&grant_type=authorization_code";

  String ret =


主站蜘蛛池模板: 国产精品久久久久av免费 | 91视频在线观看免费 | 国产一区网址 | 欧美日韩不卡一区二区 | 久久视频在线看 | 日韩激情一二三区 | 久久欧美视频 | 欧美夫妻性生活电影 | 日本精品久久久一区二区三区 | 黄色免费网战 | 国产一级片直播 | 伊人色综合网 | 视频在线观看91 | 99热高清| 日本黄色免费网站 | www久久久久| 免费观看一区二区 | 日韩av一区二区三区四区 | av性网站| 久久久久久久99精品免费观看 | 国产精品色视频 | 狠狠狠色 | 国产一二区视频 | 超级碰碰视频 | 成年人免费看的视频 | 国产精品免费久久久久 | 中文字幕制服丝袜av久久 | 在线观看你懂的网站 | 97超级碰碰碰视频在线观看 | 色综合久久精品 | 99久久日韩精品免费热麻豆美女 | 亚洲激情中文 | 国产在线看 | 欧美日韩一区二区三区免费视频 | 日韩伦理片hd | 麻豆91网站 | 天天艹天天 | 十八岁以下禁止观看的1000个网站 | 超碰人人超 | www免费视频com━ | 成人免费在线电影 | 天天久久综合 | 黄色小说免费观看 | 免费久久视频 | 国产精品一区免费在线观看 | 亚洲精品久久久久久国 | 日本 在线 视频 中文 有码 | 不卡视频在线看 | 国产精品久久二区 | 日韩久久精品一区 | 亚洲精品久久久久中文字幕m男 | 粉嫩av一区二区三区四区在线观看 | 欧美日韩3p | 99免费在线视频观看 | 天天操夜夜操国产精品 | 综合激情网 | 欧美大码xxxx | 国产精品嫩草影院123 | 国产精品成人a免费观看 | 欧美性色网站 | 成av在线 | 国产精品专区在线 | 免费观看黄色av | 久久永久免费 | 五月婷在线观看 | 国产精品精品久久久久久 | 国产精品久久久久久久久费观看 | 中文字幕国产精品一区二区 | 啪啪动态视频 | 国产99久久精品一区二区300 | 亚洲国产天堂av | 香蕉视频在线视频 | 十八岁以下禁止观看的1000个网站 | 97视频在线观看播放 | 就要干b | 高清精品在线 | 国内精品久久久久影院优 | 久久久久免费观看 | 激情欧美在线观看 | 超碰.com| 亚洲精品高清在线 | 欧美日韩午夜爽爽 | 有没有在线观看av | 久久这里有精品 | 黄色精品久久 | 91精选在线 | a级免费观看| 精品日韩在线一区 | 欧美污污视频 | 一区二区三区免费在线观看视频 | 97视频免费 | 亚洲精品一区中文字幕乱码 | 日韩欧美一区二区在线播放 | 一本一本久久a久久精品综合妖精 | 免费亚洲黄色 | 欧美片一区二区三区 | 国产精彩视频 | 久久久久久久久久亚洲精品 | 久久香蕉电影 |