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

027-81331413

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

發(fā)布時(shí)間:2020-12-11 瀏覽:3312

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

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

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

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

  //app.js

  App({

  onLaunch: function() {

  wx.login({

  success: function(res) {

  if (res.code) {

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

  wx.request({

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

  data: {

  code: res.code

  }

  })

  } else {

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

  }

  }

  });

  }

  })

  微信小程序端會調(diào)用wx.login的api,然后會得到一個(gè)code,這個(gè)code對外人來講是沒有任何意義的,可以放心的傳給服務(wù)端。服務(wù)端得到code以后,加上你申請小程序時(shí)的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 用戶唯一標(biāo)識 session_key 會話密鑰 unionid 本字段在滿足一定條件的情況下才返回 其中openid 就是會員的唯一性標(biāo)記,此時(shí)服務(wù)端可以保存下來。 session_key 以后解密 unionId(整個(gè)開放平臺會員的唯一性標(biāo)識)時(shí)有用。

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

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

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

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

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

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

  @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 | 国产激情视频在线播放 | 成人毛片在线播放 | 中文字幕人妻熟女人妻 | 中文字幕免费在线视频 | 俺去啦俺来也五月天 | 欧美sese | 精品看片 | 天天射天天日本一道 | 伊人tv| 香蕉av777xxx色综合一区 | 日韩天天干 | 精品国产91久久久久久 | 亚洲三区av | 色婷综合 | 久久久中文| 激情伊人五月天久久综合 | 亚洲成人一 | 久久免费少妇做爰 | 51永久免费观看国产nbamba | av在线影视| 亚洲精品在线免费播放 | 午夜看毛片 | 亚洲中文字幕无码爆乳app | 性色av免费 | 五月天国产在线 | 亚洲无人区码一码二码三码的含义 | 中文字幕日产每天更新40 | 美女视频黄频a免费 | 亚洲精品一区二区三区蜜桃久 | 视频国产在线 | 亚洲黄色小说视频 | 中文国产一区 | 精品乱码一区二区三四区 | 性中国少妇熟妇xxxx农村 | 97精品人妻系列无码人妻 | 亚洲精品日日夜夜 | 成年女人免费碰碰视频 | 鸭子tv国产在线永久播放 | 中文在线观看免费网站 | 久久人妻少妇偷人精品综合桃色 | 国产亚洲成av人片在线观看桃 | 青草视频免费观看 | 91国内精品野花午夜精品 | 一区在线视频 | va在线视频 | 伊人久久大香线蕉av波多野结衣 | 欧美色图在线视频 | 精品欧美一区二区三区在线观看 | 色无极亚洲色图 | 一本之道新久 | 欧美大尺度做爰啪啪免费 | 91精品国产综合久久久久久丝袜 | 色综合色欲色综合色综合色乛 | 无码加勒比一区二区三区四区 | 曰的好深好爽免费视频网站 | 亚洲 欧美 另类 综合 偷拍 | 理伦少妇片一级 | 亚洲精品乱码久久久久久按摩 | 免费欧美日韩 | 亚洲一区二区三区四区五区六区 | 国产aⅴ片 | 国产精品夜色一区二区三区 | 99久久亚洲精品视香蕉蕉v | 亚洲看片网站 | 欧美日韩一级久久久久久免费看 | 国产中文字幕第一页 | 亚洲理论在线观看 | 日本在线小视频 | 国产网红福利视频一区二区 | 人人妻人人a爽人人模夜夜夜 | 57pao国产精品一区 | 日本护士xxxxhd少妇 | 精国产品一区二区三区四季综 | 久久精品中文騷妇女内射 | 人体做爰aaaa免费 | 国产成人在线免费 | 色琪琪丁香婷婷综合久久 | 中文字幕日韩精品亚洲七区 | 女子spa高潮呻吟抽搐 | 一卡二卡在线视频 | 久久久久久九九九九 | 一本清日本在线视频精品 | 伊人老司机 | 美女一区二区三区 | 66亚洲一卡2卡新区成片发布 | 国产精品无码久久四虎 | 中文字幕免费中文 | 香蕉97超级碰碰碰视频 | 亚洲色 国产 欧美 日韩 | 玩成熟老熟女视频 | 大学生久久香蕉国产线看观看 | 亚洲精品无码av人在线播放 | 日本公妇乱偷中文字幕 | 欧美国产日韩亚洲中文 | 欧美第一黄网免费网站 | 亚洲制服丝袜精品久久 | 色就是色欧美色图 | 欧美激情视频在线 |