第一步,获取code调用wx.login(OBJECT)获取登录凭证(code)进而换取用户登录态信息,包括用户的唯一标识(openid)及本次登录的会话密钥(session_key)等。用户数据的加解密通讯需要依赖会话密钥完成。
注:调用login会引起登录态的刷新,之前的sessionKey可能会失效
示例代码:
//app.jsApp({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不应该在网络上传输。
接口地址:1返回值说明:
//根据code获取openid等信息wx.login({//获取codesuccess:function(res){varcode=res.code;//返回codeconsole.log(code);varappId='...';varsecret='...';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){varopenid=res.data.openid//返回openidconsole.log('openid为'+openid);}})}})//正常返回的JSON数据包{"openid":"OPENID","session_key":"SESSIONKEY","unionid":"UNIONID"}//错误时返回JSON数据包(示例为Code无效){"errcode":40029,"errmsg":"invalidcode"}①注意:此时如果你未勾选项目中的“开发环境不效验请求域名、TLS版本以及HTTPS证书”则会报错
到设置-项目设置-勾选:开发环境不校验请求域名、TLS版本以及HTTPS证书
②接着你会发现报错:不在一下合法域名列表,请参考文档:意思是说:不是一个合法域名,在测试的时候是没有问题的,但是要上线的时候就出现了问题,想着让管理员把链接加到服务器域名里面,但是操作不允许。。。
小程序服务器域名配置常见错误:
③解释:如果在配置服务器域名中填写了“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()//重新登录....}})最后登录时序图:
原文地址:













