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