微信小程序授權登錄


  最近做微信小程序,需要用戶授權登錄和獲取微信綁定的手機號。

  首先我是個渣渣,看微信文檔理解不了人家的邏輯,所以。。。我覺得微信小程序的文檔寫的簡直是一坨粑粑,好了吐槽完畢,進入正文

  首先這個流程是怎么樣的呢?他這個流程圖還是很ok的  

 

簡單來說就是通過wx.log方法獲取當前的code,用這個code來向微信服務器驗證,然后拿到openid和sessionkey,然后在用openid來獲得授權,嘛,我是后端,沒寫過前端,所以,不曉得怎么獲取code,我們接着說 后台怎么獲得授權吧,就這樣子

'https://api.weixin.qq.com/sns/jscode2session?appid='.$appid.'&secret='.$secret.'&js_code='.$code.'&grant_type=authorization_code';

我們通過訪問人家的接口,獲取數據嘛,最簡單了,來看地址的參數 appid和secret都是成為開發者就能獲取到的,還要個code就是前段傳過來的。上代碼

 public function openid(){
        $code= input('code');
        $appid = '*************';
        $secret = '************';  //secret
        if (!$code) {
            return json(array('code'=>"0",'msg'=>'缺少code參數!'));
        }
        if (!$appid || !$secret) {
            return json(array('code'=>"0",'msg'=>'參數錯誤!'));
        }
        $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);
            curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);// 設置是否檢查服務器端的證書
            $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);

        return json(array('code'=>"0",'msg'=>'獲取成功!','data'=>json_decode($res)));
    }

然后前段就可以獲取到代表用戶的openid和sessionkey了,然后就是我們需要授權下,

//授權登錄接口
    public function authlogin(){
       
        $openid = input('openid');
        if (!$openid) {
            return json(array('code'=>"1",'msg'=>'授權失敗!'));
        }
        $con = array();
        $con['wxid']=trim($openid);
       
        $uid = db('user')->where($con)->value('id'); //查詢是否有openid
        if ($uid) { //如果有openid
           
            $userinfo = db('user')->where('id='.$uid)->find(); //查詢wxid是否為0

            $err = array(); //用來存放查詢出來的用戶id,昵稱和頭像
            $err['id'] = $uid;
            $err['nickname'] = $userinfo['nname'];
            $err['phono'] = $userinfo['phono'];
            $err['touxiang'] = $userinfo['touxiang'];
    
            return json(array('code'=>"0",'msg'=>'成功','data'=>$err));
        }else{ //如果用戶首次登錄,就是注冊
            $data = array();
            $data['nname'] = input('nname'); //獲取用戶名
            $data['touxiang'] = input('touxiang'); //頭像地址
            $data['phono'] = input('phono'); //手機號
           
            $data['sex'] = input('sex');  //性別
            
            $data['wxid'] = $openid; //openid
            $data['retime'] = time(); //當前時間
 
            if (!$data['wxid']) {
                return json(array('code'=>"1",'msg'=>'授權失敗!'));
            }
            $res = db('user')->insertGetId($data);
            if ($res) {
                $err = array();
                $err['id'] = $res;
                $err['nickname'] = urldecode($data['nname']);
                $err['phono'] = urldecode($data['phono']);
                $err['icon'] = $data['touxiang'];
                return json(array('code'=>"0",'msg'=>'成功','data'=>$err));
            }else{
                return json(array('code'=>"1",'msg'=>'授權失敗!'));
            }
        }
    }

 

嗯,大概就這樣子


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM