php 微信小程序登录

本人在微信小程序登录时,由于每次都敲重复代码,决定写一份博客。方便以后使用。

先放小程序端代码。没有样式,需要自拟。

微信小程序 wxml代码


<view>
  <button  bindtap="getUserProfile" >微信一键登录</button>
</view>

微信小程序js代码

getUserProfile: function (res) {
    wx.getUserProfile({
      desc: '用于完善会员资料', // 声明获取用户个人信息后的用途,后续会展示在弹窗中,请谨慎填写
      success: res => {
        let name = res.userInfo.nickName
        wx.login({
          success: res => {
            console.log(res)
            wx.request({
              url: 'http://www.work.com/api/wxLogin',
              data:{code:res.code,name:name},
              method:"POST",
              success:res=>{
                console.log(res)
                if(res.data.code==200){
                  wx.setStorageSync('token', res.data.data)
                  wx.switchTab({
                    url: '/pages/index/index'
                  })
                }
              }
            })
          }
        })
      }
    })
  },

代码简陋凑合看吧。

php后台代码

token生成方式等于没有,注意。

/**
     * 微信用户登录
     * @param Request $request
     * @return array|string[]
     */
    public function wxLogin(Request $request)
    {
        //验证前端数据
        if(empty($request['code'])) return ['code'=>'1001','data'=>'','msg'=>'参数不全'];
        //获取前端的传值
        $code = $request['code'];
        $name = $request['name'];
        //从config中获取配置数据
        $appid = config('app.wx.appid');
        $secret = config('app.wx.secret');
        //拼接路径
        $url = config('app.wx.loginUrl') . "?appid=$appid&secret=$secret&js_code=$code&grant_type=authorization_code";
        //调用curl方法发起请求
        $res = $this->curl($url,true);
        //判断请求是否成功
        if (!isset($res['openid'])) return ['code' => 1001, 'msg' => '无法获取openid', 'data' => ''];
        //查询用户数据是否存在
        $user = \App\Models\Users::where('openid',$res['openid'])->first();
        if (isset($user)) {
            //如果用户数据存在就更新sessi_key和用户名称
            $result = \App\Models\Users::where('id',$user['id'])->update(['session_key'=>$res['session_key'],'name'=>$name]);
            if($result) {
                //更新成功生成token
                $token = base64_encode($user['id']);
                return ['code' => 200, 'msg' => '成功', 'data' =>$token];
            }
            //更新失败
            return ['code' => 1002, 'msg' => '修改失败', 'data' => ''];
        }
        //数据不存在,执行添加
        $res['name'] = $name;
        $result = \App\Models\Users::insertGetId($res);
        //判断添加后返回的用户id是否存在
        if (isset($result)) {
            //存在返回token
            $token = base64_encode($result);
            return ['code' => 200, 'msg' => '成功', 'data' =>$token];
        }
        return ['code' => 1003, 'msg' => '数据添加失败', 'data' => ''];
    }

    /**
     * 调用第三方接口
     * @param string $url
     * @return array
     */
    public function curl($url,$is_https='')
    {
        //初始化
        $ch = curl_init();
        //设置路由
        curl_setopt($ch, CURLOPT_URL, $url);
        //如果为https页面
        if($is_https){
            curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
            curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
        }
        //设置成功后返回文件而不是直接输出
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        //执行curl
        $output = curl_exec($ch);
        //释放内存关闭curl
        curl_close($ch);
        //返回数据为json格式需要解码
        $output = json_decode($output, true);
        return $output;
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值