前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >微信小程序调用接口获取登录获取用户信息

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

作者头像
沈唁
发布2018-05-24 17:07:41
6.6K1
发布2018-05-24 17:07:41
举报
文章被收录于专栏:沈唁志沈唁志

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

wx.login

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

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

小程序端代码:

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

代码语言:javascript
复制
//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.errM3g)
          }
        }
      });
    }
  },
})

PHP 代码:code 换取 session_key

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

代码语言:javascript
复制
public function openid(){
   $code= $_REQUEST['code'];
   $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 回调。请开发者兼容用户拒绝授权的场景。
代码语言:javascript
复制
 //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 结构

代码语言:javascript
复制
{
    "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 //时间戳
    }
}

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

沈唁志|一个PHPer的成长之路! 原创文章采用CC BY-NC-SA 4.0协议进行许可,转载请注明:转载自:微信小程序调用接口获取登录获取用户信息

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018-03-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云开发 CloudBase
云开发(Tencent CloudBase,TCB)是腾讯云提供的云原生一体化开发环境和工具平台,为200万+企业和开发者提供高可用、自动弹性扩缩的后端云服务,可用于云端一体化开发多种端应用(小程序、公众号、Web 应用等),避免了应用开发过程中繁琐的服务器搭建及运维,开发者可以专注于业务逻辑的实现,开发门槛更低,效率更高。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档