微信小程序调用接口获取登录获取用户信息

微信小程序getPhoneNumber获取手机号的功能需要需先调用wx.login接口,今天就来一篇wx.login接口和wx.getUserInfo接口的文章,这两个接口通常在小程序中还是十分常用的。

wx.login

调用接口获取登录凭证(code)进而换取用户登录态信息,包括用户的唯一标识(openid) 及本次登录的 会话密钥(session_key)等。用户数据的加解密通讯需要依赖会话密钥完成。

注:调用 login 会引起登录态的刷新,之前的 sessionKey 可能会失效。

小程序端代码:

没什么说的,直接调用就行了,重点是PHP代码

//app.js
App({
  onLaunch: function() {
    this.getOpenId()
  },
  //获取openid
  getOpenId: function (cb) {
    var that = this
    if (this.globalData.openid) {
      typeof cb == "function" && cb(this.globalData.openid)
    } else {
      wx.login({
        success: function (res) {
          // console.log(res.code);//(1)如果登录成功打印code值
          if (res.code) {
            //发起网络请求
            wx.request({
              url: 'https://api.qq52o.me/Api/openid',
              data: {
                code: res.code//将code值传入php中
              },
              success: function (result) {
                console.log(result);//传入成功code值返回过来
                var res = result.data
                that.globalData.openid = res.openid
                that.globalData.session_key = res.session_key

                typeof cb == "function" && cb(that.globalData.openid);
                typeof cb == "function" && cb(that.globalData.session_key);
              }
            })
          } else {
            conso1e.log('获取用户登录态失败!' + res.errMsg)
          }
        }
      });
    }
  },
})

PHP代码:code 换取 session_key

​这是一个 HTTPS 接口,开发者服务器使用登录凭证 code 获取 session_key 和 openid。

public function openid(){
   $code= $_REQUEST['code'];
   // 需要修改APPID和SECRET
   $url="https://api.weixin.qq.com/sns/jscode2session?appid=APPID&secret=SECRET&js_code=$code&grant_type=authorization_code";
   function getcurl ($url){
            $ch = curl_init();
            curl_setopt ($ch,CURLOPT_URL,$url);
            curl_setopt ($ch,CURLOPT_RETURNTRANSFER,1);
            curl_setopt ($ch,CURLOPT_TIMEOUT,30);
            $content=curl_exec($ch);
            $status=(int)curl_getinfo($ch,CURLINFO_HTTP_CODE );
            if( $status==404)
            {
                return  "";
            }
            curl_close($ch) ;
            return $content;
    }
    //code换取openid
    $res= getcurl($url);
    print_r($res);
}

请求参数:

参数 必填 说明
appid 小程序唯一标识
secret 小程序的 app secret
js_code 登录时获取的 code 此代码中为$code 无需更改
grant_type 填写为 authorization_code

 

完成以上步骤,就相当于完成了微信的授权登陆,调用wx.login接口成功。接着,完成授权以后,通常的小程序都有一个我的页面,需要显示用户的头像以及微信名等,下面介绍wx.getUserInfo获取用户信息接口。

wx.getUserInfo

获取用户信息,withCredentials 为 true 时需要先调用 wx.login 接口,需要用户授权 scope.userInfo。

此处的用户授权,即为需要获取用户授权同意后才能调用,如果拒绝则调用失败。

  • 如果用户未接受或拒绝过此权限,会弹窗询问用户,用户点击同意后方可调用接口;
  • 如果用户已授权,可以直接调用接口;
  • 如果用户已拒绝授权,则短期内不会出现弹窗,而是直接进入接口 fail 回调。请开发者兼容用户拒绝授权的场景。
 //app.js
  getUserInfo: function (cb) {
    var that = this
    if (this.globalData.userInfo) {
      typeof cb == "function" && cb(this.globalData.userInfo)
    } else {
      //调用登录接口
      wx.login({
        success: function () {
          wx.getUserInfo({
            success: function (res) {
              var userInfo = res.userInfo
              that.globalData.userInfo = res.userInfo;
              typeof cb == "function" && cb(that.globalData.userInfo);
            }
          })
        }
      })
    }
  },

很简单的调用用户信息就完成了,声明全局变量即可。

userInfo参数说明:

解密后为以下 json 结构

{
    "openId": "OPENID", //用户的openid
    "nickName": "NICKNAME", //用户昵称
    "gender": GENDER, //用户的性别,值为1时是男性,值为2时是女性,值为0时是未知
    "city": "CITY", //用户所在城市
    "province": "PROVINCE", //用户所在省份
    "country": "COUNTRY", //用户所在国家
    "avatarUrl": "AVATARURL", //用户头像
    "unionId": "UNIONID",
    "watermark":
    {
    "appid":"APPID", //小程序的appid
    "timestamp":TIMESTAMP //时间戳
    }
}

如果有什么问题可以留言,或者加我好友联系。

5 条评论

发表评论

*