// 获取access_token
    private function getAccessToken($url, $header)
    {
        $curl = curl_init();
        curl_setopt($curl, CURLOPT_URL, $url);
        curl_setopt($curl, CURLOPT_HEADER, 0);
        curl_setopt($curl, CURLOPT_TIMEOUT, 1);
        curl_setopt($curl, CURLOPT_HTTPHEADER, $header);
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
        return curl_exec($curl);
    } 
  // 微信授权登录
 function wxAuthLogin()
    {
       // $param = $this->request->param();
        $code = $this->frparam('code',1,'','POST');
        $appid = 'appid';
        $secret = 'appSecrect';
        $url = "https://api.weixin.qq.com/cgi-bin/token?appid=$appid&secret=$secret&grant_type=client_credential";
        try {
            $header = array('Accept: application/json',);
            // 获取access_token
            $wx_access_token = json_decode($this->getAccessToken($url, $header), true);
 
            $url = "https://api.weixin.qq.com/wxa/business/getuserphonenumber?access_token=" . $wx_access_token['access_token'];
            $data = array('code' => $code); // 请确保$code变量已经定义
            $options = array(
                'http' => array(
                    'header' => "Content-Type: application/json\r\n",
                    'method' => 'POST',
                    'content' => json_encode($data)
                )
            );
            $context = stream_context_create($options);
            $response = file_get_contents($url, false, $context);
            $result = json_decode($response, true);
            if ($result['errcode'] != 0) {
                JsonReturn(["code" => 1, "msg" => '登录失败']);
            }else{
               $tel = $result['phone_info']['phoneNumber'];
               $m = M('member')->find(['tel'=>$w['tel']]);
              if($m){
                  //走登录流程
                  $update['logintime'] = time();
                   M('member')->update(array('id'=>$m['id']),$update);
                   
                   $payload = [
                        'userId' => $m['id'], 
                        'exp' => time() + 60,     // 1小时后过期
                        'tel' => $tel          // 自定义数据
                        ];
                   $userInfo['name']=$m['username'];
                   $userInfo['id']=$m['id'];
                   $userInfo['litpic']=$m['litpic'];
                   $token =TokenManager::generateToken($payload);
                  
                   JsonReturn(['code'=>0,'msg'=>'登录成功!','token'=>$token,userInfo=>$userInfo]);
               }else{
                   //新增用户
                     //$w['username'] = getRandChar(6);
                     $w['username'] = '微信用户';
                    $w['tel'] = $tel;
                    $w['gid'] = 1;
                    $w['litpic'] = 'https://thirdwx.qlogo.cn/mmopen/vi_32/POgEwh4mIHO4nibH0KlMECNjjGxQUq24ZEaGT4poC6icRiccVGKSyXwibcPq4BWmiaIGuG1icwxaQX6grC9VemZoJ8rg/132';
                    $w['regtime']=time();
                    $r = M('member')->add($w);  
                    if($r){
                        //走登录流程
                       $payload = [
                            'userId' => $r['id'], 
                            'exp' => time() + 60,     // 1小时后过期
                            'tel' => $tel          // 自定义数据
                            ];
                       $userInfo['name']=$w['username'];
                       $userInfo['id']=$r['id'];
                       $userInfo['litpic']=$w['litpic'];
                       $token =TokenManager::generateToken($payload);
                       JsonReturn(['code'=>0,'msg'=>'登录成功!','token'=>$token,userInfo=>$userInfo]); 
                            
                        
                    }
               }

              
            }
           

        } catch (Exception $exception) {
            return json(["code" => 0, "msg" => $exception->getMessage()]);
        }
    }

标签: none

您需要先登录才能发表评论。