微信小程序学习之路——API登陆

登陆

在小程序中,登陆分为2步,第一步需要获取登陆凭证,第二步用用户凭证获取用户登陆态信息,登陆态信息可用于后续支付等流程。

1.wx.login(Object)

调用接口获取登陆凭证(code)进而换取用户登陆信息,包括用户唯一表示(openid)及本次登陆的会话密钥(session_key),用户数据的加解密通信需要依赖会话密钥完成,Object参数属性如下:

属性 类型 默认值 必填 说明 最低版本
timeout number   超时时间,单位ms 1.9.90
success function   接口调用成功的回调函数  
fail function   接口调用失败的回调函数  
complete function   接口调用结束的回调函数(调用成功、失败都会执行)

示例如下:

wx.login({
  success:function(res){
    if(!res.code){
      return;
    }
    //这里建议调用后台接口进行登陆转换、保存工作
    wx.request({
      url: 'https://myserver.com/login',
      data: {
        code: res.code
      },
      success: function (loginInfo) {
        console.log('登陆成功');
      }
    });
  }
});

2.code换取session_key,获取用户信息

调用wx.login()获取code后我们需要在5分钟内用code换取session_key、openid等用户信息,为此官方暴露了一个HTTP接口,尽管我们可以直接通过wx.request()调用接口,获取用户信息,但是由于session_key是对用户数据进行加密签名的密钥,为了自身应用安全,尽量使用后台服务器调用这个接口,保存登陆信息,返回给小程序前台,接口地址如下:

https://api.weixin.qq.com/sns/jscode2session?appid=APPID&secret=SECRET&js_code=JSCODE&grant_type=authorization_code

接口的请求参数:

参数 必填 说明
appid 小程序唯一标识
secret 小程序的 app secret
js_code 登录时获取的 code
grant_type 填写为 authorization_code

 

返回参数:

参数 说明
openid 用户唯一标识
session_key 会话密钥
expires_in 会话有效期,以秒为单位,如2592000代表会话有效期为30天

 

返回值示例如下:

//正常返回的JSON数据包
{
  "openid":"OPENID",
  "session_key":"SESSIONKEY"
  "expires_in":2592000
}
//错误时返回JSON数据包(示例为code无效)
{
  "errcode":40029,
  "errmsg":"invalid code"
}

3.登陆态维护

开发中,每个项目应该利用后台维护登陆态,不能直接把session_key、openid等字段作为用户的标识或者session的标识,通过 wx.login 接口获得的用户登录态拥有一定的时效性。用户越久未使用小程序,用户登录态越有可能失效。反之如果用户一直在使用小程序,则用户登录态一直保持有效。具体时效逻辑由微信维护,对开发者透明。开发者只需要调用 wx.checkSession 接口检测当前用户登录态是否有效。

4.wx.checkSession(Object)

检查登录态是否过期,参数属性如下:

属性 类型 默认值 必填 说明
success function   接口调用成功的回调函数
fail function   接口调用失败的回调函数
complete function   接口调用结束的回调函数(调用成功、失败都会执行)

示例代码如下:

wx.checkSession({
  success:function(){
    //登陆态未过期
  },
  fail:function(){
    //登陆态过期
  }
})

登录流程时序

更多内容请参考官方文档:https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/login.html

 

你可能感兴趣的:(微信小程序)