微信小程序+PHP 授权登录

小程序页面代码


小程序js代码

// pages/wxlogin/wxlogin.js
Page({

  /**
   * 页面的初始数据
   */
  data: {

  },
  //点击授权登录调用函数
  wxlogin:function()
  {
    //获取用户名
    wx.getUserProfile({
      desc: 'desc',
     success(res)
     {
       let username=res.userInfo.nickName
       //获取code
       wx.login({
         success(ress)
         {
           let code=ress.code
           //发送请求
          wx.request({
            url: 'http://www.hejialing.com/week3/wx_login',
            //把获取到的用户名和code发送过去
            data:{
              username:username,
              code:code
            },
            dataType:'json',
          
            success(res_json)
            {
              //返回的json数据如果登录200就登录成功
                  if(res_json.data.code==200)
                  {
                    // 登录成功后把openid缓存起来,下次登录判断缓存openid是否存在,存在直接跳转不用登录
                     wx.setStorageSync('openid',res_json.data.data )
                     //缓存后页面跳转
                     wx.navigateTo({
                       url: '/pages/goods/goods',
                     })
                                   
                  }
         
            }
          })
         }
       })

     }
    })
   

  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad: function (options) {
    //页面加载的时候执行
       //页面加载的时候把缓存openid取出来如果有值就证明登录过,就可以直接跳转
        let  openid=wx.getStorageInfoSync('openid');
        if(openid)
        { 
           wx.navigateTo({
          url: '/pages/goods/goods',
           }) 
        }

  },

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady: function () {

  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow: function () {

  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide: function () {

  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload: function () {

  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh: function () {

  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom: function () {

  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage: function () {

  }
})

thinkphp6  控制器代码

 public function wx_login(Request $request)
    {
//        小程序函数wx.getUserProfile({})获取的用户名
        $username=$request->param('username');
        //小程序函数wx.login({})获取的code (code只能用一次,用完就失效,需要重新获取)
        $code=$request->param('code');
        //小程序ID
        $appid='***************';
        //小程序秘钥
        $AppSecret='**********';
        $url="https://api.weixin.qq.com/sns/jscode2session?appid=$appid&secret=$AppSecret&js_code=$code&grant_type=authorization_code";
        $data=json_decode(file_get_contents($url),true);//file_get_contents这个代码是执行$url   json_decode转换数据格式
        $login_data=array([
            'username'=>$username,
            'openid'=>$data['openid'],
            'session_key'=>$data['session_key'],
        ]);
        //实例化模型
        $obj=new wxLogin();
        ///通过上面执行后返回的data数据里openid查询数据表里是否有openid
        $sele_data=$obj->select_loginData($data['openid']);
//        如果有登录成功
        if($sele_data)
        {
            return  json(['code'=>200,'mes'=>'登录成功','data'=>$data['openid']]);
        }else{
            //如果没有就添加这个数据 后返回注册成功
            $obj->insert_user($login_data);
            return  json(['code'=>200,'mes'=>'注册成功','data'=>$data['openid']]);

        }

        



    }

thinkphp6  模型代码

class wxLogin extends Model
{
    protected $table='wxLogin';
    public function select_loginData($openid)
    {
        return $this->where('openid',$openid)->find();
    }
    public function insert_user($data)
    {
        return $this->insert($data);

    }
}

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