真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

利用java實(shí)現(xiàn)一個(gè)微信小程序登錄態(tài)維護(hù)功能

利用java實(shí)現(xiàn)一個(gè)微信小程序登錄態(tài)維護(hù)功能?很多新手對(duì)此不是很清楚,為了幫助大家解決這個(gè)難題,下面小編將為大家詳細(xì)講解,有這方面需求的人可以來(lái)學(xué)習(xí)下,希望你能有所收獲。

公司主營(yíng)業(yè)務(wù):成都做網(wǎng)站、網(wǎng)站制作、移動(dòng)網(wǎng)站開發(fā)等業(yè)務(wù)。幫助企業(yè)客戶真正實(shí)現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競(jìng)爭(zhēng)能力。創(chuàng)新互聯(lián)是一支青春激揚(yáng)、勤奮敬業(yè)、活力青春激揚(yáng)、勤奮敬業(yè)、活力澎湃、和諧高效的團(tuán)隊(duì)。公司秉承以“開放、自由、嚴(yán)謹(jǐn)、自律”為核心的企業(yè)文化,感謝他們對(duì)我們的高要求,感謝他們從不同領(lǐng)域給我們帶來(lái)的挑戰(zhàn),讓我們激情的團(tuán)隊(duì)有機(jī)會(huì)用頭腦與智慧不斷的給客戶帶來(lái)驚喜。創(chuàng)新互聯(lián)推出仲巴免費(fèi)做網(wǎng)站回饋大家。

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

為了解決這一問(wèn)題微信采用了相對(duì)安全的方式。

//app.js
App({
 onLaunch: function() {
  wx.login({
   success: function(res) {
    if (res.code) {
     //發(fā)起網(wǎng)絡(luò)請(qǐng)求
     wx.request({
      url: 'https://test.com/onLogin',
      data: {
       code: res.code
      }
     })
    } else {
     console.log('獲取用戶登錄態(tài)失敗!' + res.errMsg)
    }
   }
  });
 }
})

微信小程序端會(huì)調(diào)用wx.login的api,然后會(huì)得到一個(gè)code,這個(gè)code對(duì)外人來(lái)講是沒(méi)有任何意義的,可以放心的傳給服務(wù)端。服務(wù)端得到code以后,加上你申請(qǐng)小程序時(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)識(shí)
  • session_key 會(huì)話密鑰
  • unionid 本字段在滿足一定條件的情況下才返回

其中openid 就是會(huì)員的唯一性標(biāo)記,此時(shí)服務(wù)端可以保存下來(lái)。

session_key 以后解密 unionId(整個(gè)開放平臺(tái)會(huì)員的唯一性標(biāo)識(shí))時(shí)有用。

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

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

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

所以這里要對(duì)這個(gè)uuid值進(jìn)行一個(gè)處理。首先存入redis時(shí)要有時(shí)效性。session_key在微信 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 = HttpRequest.sendGetRequest(httpUrl); logger.info("微信返回的結(jié)果 {}", ret); if (ret == null || "".equals(ret)) { logger.info("網(wǎng)絡(luò)超時(shí)"); renderJson(new OutRoot().setCode("101").setMsg(SYS.CONTACT_FAIL)); } else { JSONObject obj = JSONObject.parseObject(ret); if (obj.containsKey("errcode")) { String errcode = obj.get("errcode").toString(); logger.info("微信返回的錯(cuò)誤碼{}", errcode); renderJson(new OutRoot().setCode("101").setMsg(SYS.CONTACT_FAIL)); } else if (obj.containsKey("session_key")) { logger.info("調(diào)微信成功"); // 開始處理userInfo String openId = obj.get("openid").toString(); Record tbMember = new Record(); tbMember.set("weixin_openid", openId); System.out.println("openId==" + openId); // 先查詢openId存在不存在,存在不入庫(kù),不存在就入庫(kù) List memberList = tbMemberService.selectMember(tbMember); if (memberList != null && memberList.size() > 0) { logger.info("openId已經(jīng)存在,不需要插入"); } else { JSONObject rawDataJson = reqJson.getJSONObject("userInfo"); String nickName = rawDataJson.getString("nickName"); String avatarUrl = rawDataJson.getString("avatarUrl"); String gender = rawDataJson.getString("gender"); String province = rawDataJson.getString("province"); String city = rawDataJson.getString("city"); String country = rawDataJson.getString("country"); tbMember.set("gender", gender); tbMember.set("nick_name", nickName); tbMember.set("avatar_url", avatarUrl); Long openId2 = tbMemberService.addMember(tbMember); logger.info("openId不存在,插入數(shù)據(jù)庫(kù)"); } // (1) 獲得sessionkey String sessionKey = obj.get("session_key").toString(); logger.info("sessionKey==" + sessionKey); logger.info("openId==" + openId); // (2) 得到sessionkey以后存到緩存,key值采用不會(huì)重復(fù)的uuid String rsession = UUID.randomUUID().toString(); Cache tokenCache = Redis.use("redis_00"); // (3) 首先根據(jù)openId,取出來(lái)之前存的openId對(duì)應(yīng)的sessionKey的值。 String oldSeesionKey = tokenCache.getJedis().get(openId); if (oldSeesionKey != null && !"".equals(oldSeesionKey)) { logger.info("oldSeesionKey==" + oldSeesionKey); // (4) 刪除之前openId對(duì)應(yīng)的緩存 tokenCache.getJedis().del(oldSeesionKey); logger.info("老的openId刪除以后==" + tokenCache.getJedis().get(oldSeesionKey)); } // (5) 開始緩存新的sessionKey: key --> uuid, value --> sessionObj JSONObject sessionObj = new JSONObject(); sessionObj.put("openId", openId); sessionObj.put("sessionKey", sessionKey); tokenCache.getJedis().set(rsession, sessionObj.toJSONString()); // (6) 開始緩存新的openId與session對(duì)應(yīng)關(guān)系 : key --> openId , value --> rsession tokenCache.getJedis().set(openId, rsession); String newOpenId = tokenCache.getJedis().get(openId); String newrSession = tokenCache.getJedis().get(rsession); logger.info("新的openId==" + newOpenId); logger.info("新的newrSession==" + newrSession); // (7) 把新的sessionKey返回給小程序 JSONObject objret = new JSONObject(); objret.put("rdSessionKey", rsession); objret.put("errno", 0); renderJson(objret); } } } } }

看完上述內(nèi)容是否對(duì)您有幫助呢?如果還想對(duì)相關(guān)知識(shí)有進(jìn)一步的了解或閱讀更多相關(guān)文章,請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝您對(duì)創(chuàng)新互聯(lián)的支持。


網(wǎng)站題目:利用java實(shí)現(xiàn)一個(gè)微信小程序登錄態(tài)維護(hù)功能
標(biāo)題鏈接:
http://weahome.cn/article/goiedh.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部