微信小程序获取openid
2017-10-20 09:15
288 查看
获取openId (用户唯一标识)和session_key
第一步,获取code调用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) } } }); } })
第二步,根据code获取openid和session_key
这是一个 HTTPS 接口,开发者服务器使用登录凭证 code 获取 session_key 和 openid。session_key 是对用户数据进行加密签名的密钥。为了自身应用安全,session_key 不应该在网络上传输。
接口地址:
https://api.weixin.qq.com/sns/jscode2session?appid=APPID&secret=SECRET&js_code=JSCODE&grant_type=authorization_code
返回值说明:
//根据code获取openid等信息 wx.login({ //获取code success: function (res) { var code = res.code; //返回code console.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 //返回openid console.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获取新的用户登录态。
示例代码:
wx.checkSession({ success: function(){ //session 未过期,并且在本生命周期一直有效 }, fail: function(){ //登录态过期 wx.login() //重新登录 .... } })
最后登录时序图:
相关文章推荐
- 微信小程序的获取openid的坑
- 微信小程序获取用户openId的实现方法
- 微信小程序之获取并解密用户数据(获取openId、unionId)
- 微信小程序获取用户OpenId
- 解决微信小程序中在其他页面无法使用app.js中获取的userInfo或openid的问题
- 微信小程序开发之获取openid及用户信息
- 微信小程序获取openid服务器端代码
- 微信小程序获取openid等参数报错errcode:48001 errmsg:'api unauthorized'
- 微信小程序如何获取openid及用户信息
- 微信小程序授权获取用户详细信息openid
- 获取openid [微信小程序]
- 微信小程序支付开发笔记1--获取openId
- 微信小程序之获取并解密用户数据(获取openId、unionId)
- 微信小程序获取用户openid
- 微信小程序调用微信登陆获取openid及java做为服务端示例
- 微信小程序 获取session_key和openid
- 微信小程序开发获取openid和openGId
- 微信小程序 获取session_key和openid
- 微信小程序 获取微信OpenId详解及实例代码
- 微信小程序开发之用户系统 一键登录 获取session_key和openid