Home  >  Article  >  Backend Development  >  Sina, Tencent, Taobao login_PHP tutorial

Sina, Tencent, Taobao login_PHP tutorial

WBOY
WBOYOriginal
2016-07-20 11:13:06973browse

You can use it directly

<?<span php
</span><span session_start</span><span ();
</span><span class</span><span  openlogin{
        
        </span><span public</span> <span $_URL</span> = ""<span ;
        
        </span><span public</span> <span $config</span>    =    <span array</span><span ();

        </span><span public</span> <span function</span><span  __construct(){
            </span><span $this</span>-><span openlogin();
        }
        </span><span function</span><span  openlogin(){    

        }

        </span><span /*</span><span 获取登陆页面URL</span><span */</span>
        <span public</span> <span function</span><span  login_url(){
            
            </span><span if</span>(<span empty</span>(<span $this</span>-><span config)){
                </span><span return</span> <span false</span><span ; 
            }
            
            </span><span $config</span> = <span $this</span>-><span config;
            </span><span $login_url</span>    =    <span $config</span>['login_url'<span ];
            </span><span $_SESSION</span>['state'] = <span $state</span> = <span md5</span>(<span uniqid</span>(<span rand</span>(), <span TRUE</span><span ));
            </span><span $array</span> = <span array</span><span (
                </span>"response_type"=>"code",
                "state"    =>    <span $state</span>,
                "client_id"=><span $config</span>['appkey'],
                "redirect_uri"=><span urlencode</span>( <span $config</span>['redirect_uri'<span ] )
            );

            </span><span $this</span>->set(<span $array</span><span );

            </span><span $url</span>    =  <span $this</span>->combineURL(<span $login_url</span> , <span $this</span>-><span _param);

            </span><span if</span>(<span $url</span><span ){
                @</span><span header</span>("Location:".<span $url</span><span );
            }</span><span else</span><span {
                </span><span return</span> <span false</span><span ;
            }
        }

        </span><span /*</span><span 获取access_token</span><span */</span>
        <span public</span> <span function</span><span  get_access_token(){
            </span><span if</span>(<span empty</span>(<span $this</span>-><span config)){
                </span><span return</span> <span false</span><span ; 
            }

            </span><span $config</span> = <span $this</span>-><span config;

            </span><span if</span>(! <span $config</span>['code'] = <span $_REQUEST</span>['code'<span ] ){
                </span><span return</span> <span false</span><span ;
            }

            </span><span $url</span>    =    <span $config</span>['authorization_url'<span ];
            </span><span $state</span>    =    <span $_SESSION</span>['state'<span ];
            </span><span $array</span> = <span array</span><span (
                </span>"grant_type"=>"authorization_code",
                "client_id"    =>    <span $config</span>['appkey'],
                "client_secret"=><span $config</span>['appsecret'],
                "code"=><span $config</span>['code'],
                "redirect_uri"=><span urlencode</span>( <span $config</span>['redirect_uri'] ),
                "state"=><span $state</span><span 
            );
            </span><span $this</span>->set(<span $array</span><span );
            </span><span return</span>  <span $this</span>->post_contents(<span $url</span><span );
        }        
    
    
        
        </span><span /*</span><span  set $this->_param 数组</span><span */</span>
        <span public</span> <span function</span> set(<span $array</span><span ) {
            </span><span if</span>(<span empty</span>(<span $array</span><span )){
                </span><span return</span> <span false</span><span ;
            }
            </span><span $this</span>->_param = <span array</span><span ();
            </span><span foreach</span>(<span $array</span>  <span as</span> <span $name</span>=><span $value</span><span ){
                </span><span $this</span>->_param[<span $name</span>] = <span $value</span><span ;
            }
        }
        </span><span /*</span><span *
         * post_contents
         * 服务器通过post请求获得内容
         * @param string $url       请求的url,拼接后的
         * @return string           请求返回的内容
         </span><span */</span>
        <span public</span> <span function</span> post_contents(<span $url</span><span ){
            </span><span if</span>(<span empty</span>(<span $url</span><span )){
                </span><span return</span> <span false</span><span ;
            }
            </span><span $param</span>    = <span $this</span>->combineURL("" , <span $this</span>-><span _param);
            </span><span $ch</span> =<span  curl_init();
            </span><span //</span><span  设置URL和相应的选项</span>
            curl_setopt(<span $ch</span>, CURLOPT_URL, <span $url</span><span );    
            curl_setopt(</span><span $ch</span>, CURLOPT_FAILONERROR, <span false</span><span );
            curl_setopt(</span><span $ch</span>, CURLOPT_RETURNTRANSFER, <span true</span><span );
            curl_setopt (</span><span $ch</span>, CURLOPT_SSL_VERIFYPEER, 0<span );  
             curl_setopt (</span><span $ch</span>, CURLOPT_SSL_VERIFYHOST, 0<span ); 
            curl_setopt(</span><span $ch</span>, CURLOPT_POST, 1<span );
            curl_setopt(</span><span $ch</span>, CURLOPT_POSTFIELDS, <span $param</span><span );            
            </span><span //</span><span  抓取URL并把它传递给浏览器</span>
            <span $reponse</span> = curl_exec(<span $ch</span><span );            
            curl_close(</span><span $ch</span><span );
            </span><span return</span> <span $reponse</span><span ;
            
        }
        
        </span><span /*</span><span *
         * get_contents
         * 服务器通过get请求获得内容
         * @param string $url       请求的url,拼接后的
         * @return string           请求返回的内容
         </span><span */</span>
        <span public</span> <span function</span> get_contents(<span $url</span><span ){
                </span><span $ch</span> =<span  curl_init();
                curl_setopt(</span><span $ch</span>, CURLOPT_SSL_VERIFYPEER, <span FALSE</span><span );
                curl_setopt(</span><span $ch</span>, CURLOPT_RETURNTRANSFER, <span TRUE</span><span );
                curl_setopt(</span><span $ch</span>, CURLOPT_URL, <span $url</span><span );
                </span><span $response</span> =  curl_exec(<span $ch</span><span );
                curl_close(</span><span $ch</span><span );

            </span><span //</span><span -------请求为空</span>
            <span if</span>(<span empty</span>(<span $response</span><span )){
                </span><span return</span> <span false</span><span ;
            }

            </span><span return</span> <span $response</span><span ;
        }

        </span><span /*</span><span *
             * combineURL
             * 拼接url
             * @param string $baseURL   基于的url
             * @param array  $keysArr   参数列表数组
             * @return string           返回拼接的url
             </span><span */</span>
        <span public</span> <span function</span> combineURL(<span $baseURL</span>,<span $keysArr</span><span ){
            </span><span if</span>( <span $baseURL</span>==""<span  ){
                </span><span $combined</span>    =    ""<span ;
            }</span><span else</span><span {
                </span><span $combined</span> = <span $baseURL</span>."?"<span ;
            }
            </span><span $valueArr</span> = <span array</span><span ();

            </span><span foreach</span>(<span $keysArr</span> <span as</span> <span $key</span> => <span $val</span><span ){
                </span><span $valueArr</span>[] = "<span $key</span>=<span $val</span>"<span ;
            }

            </span><span $keyStr</span> = <span implode</span>("&",<span $valueArr</span><span );
            </span><span $combined</span> .= (<span $keyStr</span><span );
            
            </span><span return</span> <span $combined</span><span ;
        }
        
}


</span><span class</span> qq_openlogin <span extends</span><span  openlogin{
    </span><span private</span> <span $openname</span>    =    "qq"<span ;
    </span><span public</span> <span $config</span> = <span array</span><span (
                </span>"appkey"=>"your appkey",
                "appsecret"=>"your appsecret",
                "redirect_uri"=>"XXXXX",
                "login_url" => "https://graph.qq.com/oauth2.0/authorize",    
                "scope"=>"get_user_info,add_share,list_album,add_album,upload_pic,add_topic,add_one_blog,add_weibo,check_page_fans,add_t,add_pic_t,del_t,get_repost_list,get_info,get_other_info,get_fanslist,get_idolist,add_idol,del_idol,get_tenpay_addr",
                "authorization_url"=>"https://graph.qq.com/oauth2.0/token"<span 
            );

    </span><span function</span><span  __construct()
    {
        </span><span $this</span>-><span qq_openlogin();
    }
    
    </span><span function</span><span  qq_openlogin(){
        parent</span>::<span __construct();
    }


    </span><span function</span><span  get_access_token(){
        </span><span $response</span>    =    parent::<span get_access_token();
        
        </span><span /*</span><span 检测错误是否发生</span><span */</span>
        <span if</span>(<span strpos</span>(<span $response</span>, "callback") !== <span false</span><span ){

            </span><span $lpos</span> = <span strpos</span>(<span $response</span>, "("<span );
            </span><span $rpos</span> = <span strrpos</span>(<span $response</span>, ")"<span );
            </span><span $response</span>  = <span substr</span>(<span $response</span>, <span $lpos</span> + 1, <span $rpos</span> - <span $lpos</span> -1<span );
            </span><span $msg</span> = json_decode(<span $response</span><span );

            </span><span if</span>(<span isset</span>(<span $msg</span>-><span error)){
                </span><span return</span> <span false</span><span ;
            }
        }

        </span><span $params</span> = <span array</span><span ();
        </span><span parse_str</span>(<span $response</span>, <span $params</span><span );
        </span><span /*</span><span access_token == $params[access_token]</span><span */</span>
        
        <span /*</span><span 获取 openid </span><span */</span>
        <span $response</span>    =    <span $this</span>->get_contents("https://graph.qq.com/oauth2.0/me?access_token=".<span $params</span>['access_token'<span ]);

        </span><span //</span><span --------检测错误是否发生</span>
        <span if</span>(<span strpos</span>(<span $response</span>, "callback") !== <span false</span><span ){

            </span><span $lpos</span> = <span strpos</span>(<span $response</span>, "("<span );
            </span><span $rpos</span> = <span strrpos</span>(<span $response</span>, ")"<span );
            </span><span $response</span> = <span substr</span>(<span $response</span>, <span $lpos</span> + 1, <span $rpos</span> - <span $lpos</span> -1<span );
        }

        </span><span $user</span> = json_decode(<span $response</span><span );
        </span><span if</span>(<span isset</span>(<span $user</span>-><span error)){
            </span><span return</span> <span false</span><span ;
        }

        </span><span /*</span><span 
            获取用户信息需要参数:openid(用户的ID,与QQ号码一一对应),access_token(可通过使用Authorization_Code获取Access_Token 或来获取access_token有3个月有效期),oauth_consumer_key(用户appid),format(返回格式) 
                
        </span><span */</span>
        <span /*</span><span 数据库保存</span><span */</span>
        <span $open_param</span>    =    <span array</span><span (
            </span>"openid"=><span $user</span>->openid,
            "access_token"=><span $params</span>['access_token'<span ]
        );
        </span><span //
</span>        <span $open_param</span>['oauth_consumer_key']    =    <span $this</span>->config['appkey'<span ];
        </span><span $open_param</span>['format']                =    "json"<span ;
        </span><span /*</span><span 拼接url</span><span */</span>
        <span $get_user_url</span> = <span $this</span>->combineURL("https://graph.qq.com/user/get_user_info",<span $open_param</span><span );
        </span><span //</span><span 猎取用户信息</span>
        <span $userinfo</span>    =    <span $this</span>->get_contents(<span $get_user_url</span><span );        

        </span><span $userinfo</span>    =    json_decode(<span $userinfo</span><span );

        </span><span return</span> <span $userinfo</span><span ;        
    }
}

</span><span class</span> weibo_openlogin <span extends</span><span  openlogin{
    </span><span private</span> <span $openname</span>    =    "weibo"<span ;
    </span><span public</span> <span $config</span> = <span array</span><span (
                </span>"appkey"=>"your appkey",
                "appsecret"=>"your appsecret",
                "login_url"    =>    "https://api.weibo.com/oauth2/authorize",
                "redirect_uri"=>"XXXXXXX",
                "authorization_url"=>"https://api.weibo.com/oauth2/access_token"<span 
            );

    </span><span function</span><span  __construct()
    {
        </span><span $this</span>-><span qq_openlogin();
    }
    
    </span><span function</span><span  qq_openlogin(){
        parent</span>::<span __construct();
    }

    </span><span function</span><span  get_access_token(){
        </span><span $response</span>    =    parent::<span get_access_token();

        </span><span $userinfo</span> = json_decode(<span $response</span><span );

        </span><span return</span> <span $userinfo</span><span ;
    }

}

</span><span class</span> taobao_openlogin <span extends</span><span  openlogin{
    </span><span private</span> <span $openname</span>    =    "taobao"<span ;
    </span><span public</span> <span $config</span> = <span array</span><span (
                </span>"appkey"=>"your appkey",
                "appsecret"=>"your appsecret",
                "redirect_uri"=>"XXXXX",
                "authorization_url"=>"https://oauth.taobao.com/token",
                "login_url"=>"https://oauth.taobao.com/authorize"<span 
            );

    </span><span function</span><span  __construct()
    {
        </span><span $this</span>-><span qq_openlogin();
    }
    
    </span><span function</span><span  qq_openlogin(){
        parent</span>::<span __construct();
    }

    </span><span function</span><span  get_access_token(){
        </span><span $response</span>    =    parent::<span get_access_token();

        </span><span $userinfo</span> = json_decode(<span $response</span><span );

        </span><span return</span> <span $userinfo</span><span ;
    }

}




</span><span if</span>(<span $_GET</span>['openname'<span ]){
    </span><span $openname</span>    =    <span $_GET</span>['openname']."_openlogin"<span ;
    </span><span $openlogin</span>    = <span new</span> <span $openname</span><span ();
    </span><span if</span>(!<span isset</span>(<span $_REQUEST</span>['code'<span ])){        
        </span><span //</span><span 请求url</span>
        <span $url</span> = <span $openlogin</span>-><span login_url();
        </span><span if</span>(!<span $url</span><span ){
            </span><span echo</span> "0"<span ;
            </span><span exit</span><span ();
        }
    }</span><span else</span><span {
        </span><span if</span>(<span isset</span>(<span $_REQUEST</span>["state"]) && (<span $_SESSION</span>['state']    !=    <span $_REQUEST</span>["state"<span ] )){
            </span><span echo</span> "1"<span ;
            </span><span exit</span><span ();
        }    
    
        </span><span $rs</span> = <span $openlogin</span>-><span get_access_token();
        
        </span><span print_r</span>( <span $rs</span><span  );

    }

}



</span>?>

Add a Renren login

<span class</span> renren_openlogin <span extends</span><span  openlogin{
    </span><span private</span> <span $openname</span>    =    "renren"<span ;
    </span><span public</span> <span $config</span> = <span array</span><span (
                </span>"appid"=>"your appid",
                "appkey"=>"your appkey",
                "appsecret"=>"your secret key",
                "redirect_uri"=>"XXXXXX",
                "authorization_url"=>"https://graph.renren.com/oauth/token",
                "login_url"=>"https://graph.renren.com/oauth/authorize"<span 
            );

    </span><span function</span><span  __construct()
    {
        </span><span $this</span>-><span qq_openlogin();
    }
    
    </span><span function</span><span  qq_openlogin(){
        parent</span>::<span __construct();
    }

    </span><span function</span><span  get_access_token(){
        </span><span $response</span>    =    parent::<span get_access_token();

        </span><span $userinfo</span> = json_decode(<span $response</span><span );

        </span><span return</span> <span $userinfo</span><span ;
        </span><span /*</span><span 
                access_token:获取的Access Token;
                expires_in:Access Token的有效期,以秒为单位;
                refresh_token:用于刷新Access Token 的 Refresh Token,长期有效,不会过期;
                scope:Access Token最终的访问范围,既用户实际授予的权限列表(用户在授权页面时,有可能会取消掉某些请求的权限)。关于权限的具体信息请参考
        </span><span */</span><span 
    }

    </span><span /*</span><span 获取登陆页面URL</span><span */</span>
    <span public</span> <span function</span><span  login_url(){
        
        </span><span if</span>(<span empty</span>(<span $this</span>-><span config)){
            </span><span return</span> <span false</span><span ; 
        }
        
        </span><span $config</span> = <span $this</span>-><span config;
        </span><span $login_url</span>    =    <span $config</span>['login_url'<span ];
        </span><span $array</span> = <span array</span><span (
            </span>"response_type"=>"code",
            "client_id"=><span $config</span>['appid'],
            "redirect_uri"=><span urlencode</span>( <span $config</span>['redirect_uri'<span ] )
        );

        </span><span $this</span>->set(<span $array</span><span );

        </span><span $url</span>    =  <span $this</span>->combineURL(<span $login_url</span> , <span $this</span>-><span _param);

        </span><span if</span>(<span $url</span><span ){
            @</span><span header</span>("Location:".<span $url</span><span );
        }</span><span else</span><span {
            </span><span return</span> <span false</span><span ;
        }
    }

}</span>

www.bkjia.comtruehttp: //www.bkjia.com/PHPjc/440395.htmlTechArticleCan you use it directly? = "" = - ( ( ( - = - = ['login_url' [' state'] = = ( ( (), = "response_type"="code", "state" = , "client_id"= ['appkey'], "redirect_uri"= ( ['redirect_uri'...
Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn