网站首页> 文章专栏> 使用qq登录第三方网站php代码(qq互联)
使用qq登录第三方网站php代码(qq互联)
编辑时间:2018-07-09 09:07:33 作者:mogo 浏览:1038 评论:0

以下代码根据实际需要来:

html代码:


    <a href="#" style="padding-right: 10px;" onclick='qqLogin()'>

                    <img style="width: 45px;" src="/login/images/qq.png">

    </a>


<script>  

    //请求拿到url

   function qqLogin()

        {


            $.post('/oauth/qq',function (res) {

                if(res.code == 200){

                    location.href = res.url;

                }else{

                    alert('提交错误,刷新页面后重试')

                }

            });

        }


</script>

<?php



class QQController 

{

    private   $QQ_API_KEY;

    private  $QQ_API_ID;

    private  $QQ_CALLBACK_URL;


    public function __construct()

    {

        $this->QQ_API_ID = xxxxxxxxxxx ;

        $this->QQ_API_KEY = xxxxxxxxxxx ;

        $this->QQ_CALLBACK_URL = xxxxxxxxxxx ;

    }



    /**

     * curl

     * @param $url

     * @return mixed

     */

    public function curl($url)

    {

        $ch = curl_init();

        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);

        curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);

        curl_setopt($ch, CURLOPT_URL, $url);

        $result = curl_exec($ch);

        curl_close($ch);

        return $result;

    }

/**

*通过Authorization Code获取Access Token

*获取用户形象

*

**/

    public function qq(Request $request)

    {

        $url = "https://graph.qq.com/oauth2.0/token";

        $params['grant_type'] = 'authorization_code';

        $params['client_id'] = $this->QQ_API_ID;

        $params['client_secret'] = $this->QQ_API_KEY;;

        $params['code'] = $request->code;//这里使用的laravel的获取

        $params['redirect_uri'] = $this->QQ_CALLBACK_URL;

        if($request->state == session('qq_connect_state')){//存seesion与接收的state值

            $url .= '?'.http_build_query($params);

            $access = $this->curl($url);

            parse_str($access,$temp);


            //获取openid


            $as['access_token'] = $temp['access_token'];

            //组装token url

            $accessTokenUrl = 'https://graph.qq.com/oauth2.0/me?access_token='.$as['access_token'];


            $openId_str = $this->curl($accessTokenUrl);

            //切分

            $lpos = strpos($openId_str,'(');

            $rpos = strrpos($openId_str,')');

            $openId_json = substr($openId_str,$lpos+1,$rpos-$lpos-1);


            $openId_arr = json_decode($openId_json,true);

            $as['openid'] = $openId_arr['openid'];

            $as['oauth_consumer_key'] = $this->QQ_API_ID;

            //获取用户信息

            $userInfoUrl = 'https://graph.qq.com/user/get_user_info';


            $userInfoUrl .=  '?'.http_build_query($as);

            $userInfo = $this->curl($userInfoUrl);


            $userInfoArr = json_decode($userInfo,true);

            //如果用户不存在的情况下生成账号,存在就直接登录

           //以下代码根据实际要求来,因为每个qq会生成唯一的就可以判断是添加还是登录用户



        }else{


            return redirect('gechat/login');

        }


    }


/**

*获取Authorization Code

*查看文档,按钮请求地址

**/

    public function oauthQq()

    {

        $url = 'https://graph.qq.com/oauth2.0/authorize';

        $params = [];

        $params['response_type'] = 'code';

        $params['client_id'] = $this->QQ_API_ID;

        $params['redirect_uri'] = $this->QQ_CALLBACK_URL;

        $params['state'] = md5('ciel'.time());//这里的是client端的状态值。用于第三方应用防止CSRF攻击,成功授权后回调时会原样带回。请务必严格按照流程检查用户与state参数状态的绑定。

        session()->flash('qq_connect_state',$params['state']);//存入seesion

        if($params){

            $url .= '?'.http_build_query($params);

            return ['url'=> $url,'code'=>200];

        }else{


            return ['msg'=> '刷新页面后重试!','code'=>400];

        }


    }



}

?>

来说两句吧
最新评论