微信小程序+PHP 实现授权登录

微信小程序+PHP 实现授权登录1.写wxml页面<!–前台页面,通过判断决定展示登录还是信息–><viewwx:if="{{isHide}}"><viewwx:if=

大家好,又见面了,我是你们的朋友全栈君。

1.写wxml页面

<!--前台页面,通过判断决定展示登录还是信息-->
<view wx:if="{{isHide}}">
    <view wx:if="{{canIUse}}" >
        <view class='header'>
            <image src='/image/hhh.jpg'></image>
        </view>
 
        <view class='content'>
            <view>申请获取以下权限</view>
            <text>获得你的公开信息(昵称,头像等)</text>
        </view>
 
        <button class='bottom' type='primary' open-type="getUserInfo" bindtap="login">
            授权登录
        </button>
    </view>
    <view wx:else>请升级微信版本</view>
</view>
 
<view wx:else>
    <view>我的首页内容</view>
</view>

2.写wxss页面

.header {
    margin: 90rpx 0 90rpx 50rpx;
    border-bottom: 1px solid #ccc;
    text-align: center;
    width: 650rpx;
    height: 300rpx;
    line-height: 450rpx;
}
 
.header image {
    width: 200rpx;
    height: 200rpx;
}
 
.content {
    margin-left: 50rpx;
    margin-bottom: 90rpx;
}
 
.content text {
    display: block;
    color: #9d9d9d;
    margin-top: 40rpx;
}
 
.bottom {
    border-radius: 80rpx;
    margin: 70rpx 50rpx;
    font-size: 35rpx;
}

3.写js页面

// index.js
// 获取应用实例
const app = getApp()

Page({
  data: {
    canIUse: wx.canIUse('button.open-type.getUserInfo'),
    // 前台判断用的就是这个
    isHide: true
  },

  //点击事件
  login(){
    var _this=this;
    wx.getUserProfile({
      desc: 'desc',
      success: (res)=>{
        //点击允许后获取微信昵称与微信头像
        var nickName=res.userInfo.nickName;
        var log=res.userInfo.avatarUrl;
        wx.login({
          success:function(e){
            //请求成功后获取你的code值
            var code=e.code;
            wx.request({
              //请求后台
              url: 'http://www.day12.com/home/Login/loginInfo',
              //传code、nickName、log
              data: {code:code,nickName:nickName,log:log},
              header:{
                'content-type':'application/x-www-form-urlencoded'
              },
              success: function(arr){
                //判断后台请求成功后
                if(arr.data.code==200){
                  //将返回的ID值存入缓存中
                  wx.setStorageSync('id', arr.data.id)
                  //弹框提示
                  wx.showToast({
                    title: arr.data.msg,
                    icon: 'success'
                  })
                  //修改isHide值,以便于前台的判断展示
                  _this.setData({
                    isHide:false
                  })
                }
              }
            })
          }
        })
      },
      fail:(res)=>{
        //点击拒绝后弹框提示
        wx.showToast({
          title: '授权登录失败',
          icon: 'error'
        })
      }
    })
  }
})

4.写PHP后台代码

public function loginInfo(){
//        接收前台传来的值
        $code=input('code');
        $nickName=input('nickName');
        $log=input('log');
//        判断是否为空
        if (empty($code)||empty($nickName)||empty($log)){
            return json(['code'=>1,'data'=>'','mag'=>'参数不正确']);
        }

//        在config中封装的,封装样式如下(这个码用你自己的微信扫描后会出现) 网址:https://mp.weixin.qq.com/
//        return [
//            'appID'=>'',
//            'AppSecret'=>''
//        ];
        $appID=config('appID');
        $appSecret=config('AppSecret');

//        请求地址
        $url="https://api.weixin.qq.com/sns/jscode2session?appid=".$appID."&secret=".$appSecret."&js_code=".$code."&grant_type=authorization_code";
//        getUrl是在common中封装的,封装样式如下
//        function getUrl($url){
//            $ch = curl_init();
//            curl_setopt($ch, CURLOPT_URL, $url);
//            curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
//            curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
//            curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
//            $output = curl_exec($ch);
//            curl_close($ch);
//            $output = json_decode($output,true);
//            return $output;
//        }
        $res=getUrl($url);

//        调用成功后定义一个新的数组,最主要的session_key和openid两个值
        $arr=[
          'nickName'=>$nickName,
          'log'=>$log,
          'session_key'=>$res['session_key'],
          'openid'=>$res['openid'],
          'code'=>$code
        ];

//        new一个模型
        $model=new User();
//        根据openid查询一条数据
        $item=$model->where('openid',$res['openid'])->find();
//        如果有就修改session_key这个字段,如果没有就新添加一条数据
        if ($item){
            $data=$model->where('openid',$res['openid'])->update(['session_key'=>$res['session_key']]);
        }else{
            $data=$model->insert($arr);
        }
//        返回主键ID
        return json(['code'=>200,'id'=>$item['id'],'msg'=>'登录成功']);
    }

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/155584.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 机器学习(二):有监督学习、无监督学习和半监督学习

    机器学习(二):有监督学习、无监督学习和半监督学习一、基本概念1特征(feature)数据的特征。举例:书的内容2标签(label)数据的标签。举例:书属于的类别,例如“计算机”“图形学”“英文书”“教材”等。3学习(learning)将很多数据丢给计算机分析,以此来训练该计算机,培养计算机给数据分类的能力。换句话说,学习指的就是找到特征与标签的映射(mapping)关系。这样当有特征而无标签的未知数据输入时,我们就可以通过已有的

    2022年5月27日
    35
  • 数字信号处理实验(一)

    实验目的本次实验目的为:在matlab环境下产生几种基本的数字信号,并对这些基本的信号进行运算和变换,同时利用程序结果对采样定理进行验证,深刻理解采样定理。通过自己录制音频信号并对不同的音频信号进行不同处理,加深理解音频信号中声道的原理,以及混声、回声的形成原理。实验内容用matlab产生单位脉冲信号,单位阶跃信号,矩形信号,正弦信号,余弦信号,指数信号,产生并观察f(x)=sinc(x)函数的波

    2022年4月8日
    105
  • pycharm单步调试快捷键_pycharm运行代码快捷键

    pycharm单步调试快捷键_pycharm运行代码快捷键1.PyCharm常用快捷键Ctrl+/#注释Ctrl+A#全选Ctrl+C#不需要选中一行,直接复制整行内容Ctrl+X#不需要选中一行,直接剪切整行内容Ctrl+V#粘贴Ctrl+D#复制并粘贴,直接在下一行粘贴该行整行(或选中)的内容Ctrl+Z#回退到上一步操作Ctrl+Shift+N#

    2022年8月28日
    3
  • IE阻止了此网站安装ActiveX控件

    IE阻止了此网站安装ActiveX控件解决方法:工具——Internet选项——安全受信任站点,然后点击站点,把地址(这个你自己确定该站点是不是可信任的)复制进去,然后点添加,再点关闭然后继续点可信任站点,再点下面的自定义级别,在弹出的对话框里面对所有关于activex的选项做如下操作1:如果之前是启用或者提示的,不修改2:如果之前是禁用的,改成启用或提示重新访问此站点,即可。

    2022年5月14日
    86
  • 点到圆的最近距离公式推导

    点到圆的最近距离公式推导该距离公式在 CircleFittin 相关的一篇文章中用到 现实现其推导过程 设圆的一般的方程形式 任一点 P 的坐标 点 P 到圆上点得最短距离的公式 推导过程 1 由圆一般方程形式可以推导出圆的标准方程形式 nbsp nbsp nbsp nbsp nbsp nbsp nbsp 且有 即 nbsp nbsp nbsp nbsp nbsp nbsp nbsp 圆心坐标 nbsp 半径 2 点到圆的最短距离 nbsp nbsp nbsp nbsp nbsp nbsp 点到圆的最短距离等于点到圆心的距离减去半径的绝

    2025年6月10日
    2
  • linux卸载软件_centos7如何卸载

    linux卸载软件_centos7如何卸载1、首先使用:rpm-qa|grepjava,如下图所示:2、然后依次执行:rpm-e–nodepspython-javapackages-3.4.1-11.el7.noarch,其中python-javapackages-3.4.1-11.el7.noarch是包的名称,如下图所示:3、再次执行rpm-qa|grepjava进行查看,如下图所示:4…

    2022年9月22日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号