微信小程序获取openid
獲取openId (用戶唯一標(biāo)識(shí))和session_key
調(diào)用wx.login(OBJECT) 獲取登錄憑證(code)進(jìn)而換取用戶登錄態(tài)信息,包括用戶的唯一標(biāo)識(shí)(openid)?及本次登錄的?會(huì)話密鑰(session_key)等。用戶數(shù)據(jù)的加解密通訊需要依賴會(huì)話密鑰完成。?
注:調(diào)用 login 會(huì)引起登錄態(tài)的刷新,之前的 sessionKey 可能會(huì)失效
示例代碼:
//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)}}});} })這是一個(gè) HTTPS 接口,開(kāi)發(fā)者服務(wù)器使用登錄憑證 code?獲取 session_key 和 openid。session_key 是對(duì)用戶數(shù)據(jù)進(jìn)行加密簽名的密鑰。為了自身應(yīng)用安全,session_key 不應(yīng)該在網(wǎng)絡(luò)上傳輸。?
接口地址:
返回值說(shuō)明:
//根據(jù)code獲取openid等信息 wx.login({//獲取codesuccess: function (res) {var code = res.code; //返回codeconsole.log(code);var appId = '...';var secret = '...';wx.request({url: 'https://api.weixin.qq.com/sns/jscode2session?appid=' + appId + '&secret=' + secret + '&js_code=' + code + '&grant_type=authorization_code',data: {},header: {'content-type': 'json'},success: function (res) {var openid = res.data.openid //返回openidconsole.log('openid為' + openid);}})}})//正常返回的JSON數(shù)據(jù)包 {"openid": "OPENID","session_key": "SESSIONKEY","unionid": "UNIONID" } //錯(cuò)誤時(shí)返回JSON數(shù)據(jù)包(示例為Code無(wú)效) {"errcode": 40029,"errmsg": "invalid code" }①注意:?此時(shí)如果你未勾選項(xiàng)目中的“開(kāi)發(fā)環(huán)境不效驗(yàn)請(qǐng)求域名、TLS版本以及HTTPS證書(shū)”則會(huì)報(bào)錯(cuò)
到設(shè)置->項(xiàng)目設(shè)置->勾選:開(kāi)發(fā)環(huán)境不校驗(yàn)請(qǐng)求域名、TLS版本以及HTTPS證書(shū)
②接著你會(huì)發(fā)現(xiàn)報(bào)錯(cuò):不在一下合法域名列表,請(qǐng)參考文檔:?
https://map.weixin.qq.com/debug/wxadoc/dev/api/network-request.html?
意思是說(shuō):?
https://api.weixin.qq.com/sns/jscode2session?appid=APPID&secret=SECRET&js_code=JSCODE&grant_type=authorization_code?
不是一個(gè)合法域名,在測(cè)試的時(shí)候是沒(méi)有問(wèn)題的,但是要上線的時(shí)候就出現(xiàn)了問(wèn)題,想著讓管理員把鏈接加到服務(wù)器域名里面,但是操作不允許。。。
小程序服務(wù)器域名配置常見(jiàn)錯(cuò)誤:?
http://kf.qq.com/faq/1706236NjINj1706236VRZBR.html
③解釋:如果在配置服務(wù)器域名中填寫(xiě)了“api.weixin.qq.com”會(huì)出現(xiàn)上述錯(cuò)誤提示。出于安全考慮,為避免開(kāi)發(fā)者將AppSecret放置在小程序的前端代碼內(nèi),平臺(tái)禁止設(shè)置此域名。 小程序的開(kāi)發(fā)者密碼(AppSecret)是一個(gè)非常重要的字段,使用該密碼可以調(diào)用小程序的所有后臺(tái)接口。請(qǐng)不要將該字段放置在微信小程序的前端代碼中,因?yàn)槲⑿攀謾C(jī)客戶端容易被反編譯并輕松獲得Appsecret,造成重大的安全威脅。開(kāi)發(fā)者應(yīng)將Appsecret保存到后臺(tái)服務(wù)器中,通過(guò)服務(wù)器使用Appsecert獲取Accesstoken。微信公眾平臺(tái)小程序后臺(tái)的服務(wù)器地址設(shè)置也將禁止將“api.weixin.qq.com”域名的配置,所有對(duì)于“api.weixin.qq.com”域名下的接口請(qǐng)求請(qǐng)全部通過(guò)后臺(tái)服務(wù)器發(fā)起,請(qǐng)勿直接通過(guò)小程序的前端代碼發(fā)起。
④解決:所以解決辦法就是把code傳給后臺(tái),讓后臺(tái)去請(qǐng)求微信的官方接口獲得openId和session-key。
官網(wǎng)提供的獲取openid等信息,也如下圖所示:?
?
3. 第三步,檢測(cè)用戶登錄狀態(tài)是否有效
通過(guò)wx.checkSession(OBJECT)獲得的用戶登錄態(tài)擁有一定的時(shí)效性。用戶越久未使用小程序,用戶登錄態(tài)越有可能失效。反之如果用戶一直在使用小程序,則用戶登錄態(tài)一直保持有效。具體時(shí)效邏輯由微信維護(hù),對(duì)開(kāi)發(fā)者透明。開(kāi)發(fā)者只需要調(diào)用wx.checkSession接口檢測(cè)當(dāng)前用戶登錄態(tài)是否有效。登錄態(tài)過(guò)期后開(kāi)發(fā)者可以再調(diào)用wx.login獲取新的用戶登錄態(tài)。?
示例代碼:
最后登錄時(shí)序圖:?
總結(jié)
以上是生活随笔為你收集整理的微信小程序获取openid的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 绝地求生信号弹哪里找(《绝地求生》将于)
- 下一篇: Vivaldi 5.7 版本发布:改进