专栏首页沈唁志微信小程序调用接口获取登录获取用户信息

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

微信小程序 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.errM3g)
          }
        }
      });
    }
  },
})

PHP 代码:code 换取 session_key

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

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 回调。请开发者兼容用户拒绝授权的场景。
 //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 //时间戳
    }
}

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

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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 整合ThinkPHP功能系列之微信网页OAuth2.0授权登录

    OAuth(开放授权)是一个开放标准,允许用户让第三方应用访问该用户在某一网站上存储的私密的资源(如照片,视频,联系人列表),而无需将用户名和密码提供给第三方应...

    沈唁
  • 如何提高GitHub日常使用、下载速度?

    程序猿大多数是离不开GitHub这个巨大的开源宝库的,而更多的时候我们需要使用 git clone 一个项目到本地的时候会发现这个速度是真的无话可说

    沈唁
  • 博客开启HTTPS

    沈唁
  • 拍照技术烂?实时在线AI构图模型V**,让你变身摄影大神!

    简介:中国科学院软件研究所在读硕士二年级,研究方向为智能人机交互方法及其在医疗、教育等领域的应用,热衷于 AI 与 HCI 的互相结合。目前正在准备申请人机交互...

    AI科技大本营
  • Parcel,零配置开发 React 应用!

    本文译自 Create a React app with zero configuration using Parcel。 webpack 已经经历三四年的发展...

    企鹅号小编
  • 微信斑马系统:微信朋友圈广告背后的利器

    随着移动互联网迅速发展,大数据技术为企业带来了前所未有的发展机遇,然而中小企业和传统行业由于其数据量缺乏且单一,技术投入不足的劣势,面对大数据技术发展带来的红利...

    暴走大数据
  • 如何做一个实体日历技术方面印刷方面

    本篇唠下做一本实体日历用到了哪些东西, 虽然工作量大部分是技术编码方面, 但剩余联系打印社及了解打印纸张和打印的质量等东西对我来说比编码难多了。 甚至和打印店讨...

    用户1416054
  • 尼尔森交互原则

    用户2025931
  • Kaggle的入门介绍:通过竞赛磨练机器学习技能

    在数据科学领域,可用的资源非常的多:从Datacamp到Udacity再到KDnuggets,在网上有很多可以在线学习数据科学的地方。但是,如果你是一个喜欢在实...

    AiTechYun
  • php生成传参小程序二维码

    https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/qr-code....

    许坏

扫码关注云+社区

领取腾讯云代金券