Sina, Tencent, Taobao login_PHP tutorial
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>

What’s still popular is the ease of use, flexibility and a strong ecosystem. 1) Ease of use and simple syntax make it the first choice for beginners. 2) Closely integrated with web development, excellent interaction with HTTP requests and database. 3) The huge ecosystem provides a wealth of tools and libraries. 4) Active community and open source nature adapts them to new needs and technology trends.

PHP and Python are both high-level programming languages that are widely used in web development, data processing and automation tasks. 1.PHP is often used to build dynamic websites and content management systems, while Python is often used to build web frameworks and data science. 2.PHP uses echo to output content, Python uses print. 3. Both support object-oriented programming, but the syntax and keywords are different. 4. PHP supports weak type conversion, while Python is more stringent. 5. PHP performance optimization includes using OPcache and asynchronous programming, while Python uses cProfile and asynchronous programming.

PHP is mainly procedural programming, but also supports object-oriented programming (OOP); Python supports a variety of paradigms, including OOP, functional and procedural programming. PHP is suitable for web development, and Python is suitable for a variety of applications such as data analysis and machine learning.

PHP originated in 1994 and was developed by RasmusLerdorf. It was originally used to track website visitors and gradually evolved into a server-side scripting language and was widely used in web development. Python was developed by Guidovan Rossum in the late 1980s and was first released in 1991. It emphasizes code readability and simplicity, and is suitable for scientific computing, data analysis and other fields.

PHP is suitable for web development and rapid prototyping, and Python is suitable for data science and machine learning. 1.PHP is used for dynamic web development, with simple syntax and suitable for rapid development. 2. Python has concise syntax, is suitable for multiple fields, and has a strong library ecosystem.

PHP remains important in the modernization process because it supports a large number of websites and applications and adapts to development needs through frameworks. 1.PHP7 improves performance and introduces new features. 2. Modern frameworks such as Laravel, Symfony and CodeIgniter simplify development and improve code quality. 3. Performance optimization and best practices further improve application efficiency.

PHPhassignificantlyimpactedwebdevelopmentandextendsbeyondit.1)ItpowersmajorplatformslikeWordPressandexcelsindatabaseinteractions.2)PHP'sadaptabilityallowsittoscaleforlargeapplicationsusingframeworkslikeLaravel.3)Beyondweb,PHPisusedincommand-linescrip

PHP type prompts to improve code quality and readability. 1) Scalar type tips: Since PHP7.0, basic data types are allowed to be specified in function parameters, such as int, float, etc. 2) Return type prompt: Ensure the consistency of the function return value type. 3) Union type prompt: Since PHP8.0, multiple types are allowed to be specified in function parameters or return values. 4) Nullable type prompt: Allows to include null values and handle functions that may return null values.


Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

Video Face Swap
Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article

Hot Tools

mPDF
mPDF is a PHP library that can generate PDF files from UTF-8 encoded HTML. The original author, Ian Back, wrote mPDF to output PDF files "on the fly" from his website and handle different languages. It is slower than original scripts like HTML2FPDF and produces larger files when using Unicode fonts, but supports CSS styles etc. and has a lot of enhancements. Supports almost all languages, including RTL (Arabic and Hebrew) and CJK (Chinese, Japanese and Korean). Supports nested block-level elements (such as P, DIV),

SecLists
SecLists is the ultimate security tester's companion. It is a collection of various types of lists that are frequently used during security assessments, all in one place. SecLists helps make security testing more efficient and productive by conveniently providing all the lists a security tester might need. List types include usernames, passwords, URLs, fuzzing payloads, sensitive data patterns, web shells, and more. The tester can simply pull this repository onto a new test machine and he will have access to every type of list he needs.

WebStorm Mac version
Useful JavaScript development tools

DVWA
Damn Vulnerable Web App (DVWA) is a PHP/MySQL web application that is very vulnerable. Its main goals are to be an aid for security professionals to test their skills and tools in a legal environment, to help web developers better understand the process of securing web applications, and to help teachers/students teach/learn in a classroom environment Web application security. The goal of DVWA is to practice some of the most common web vulnerabilities through a simple and straightforward interface, with varying degrees of difficulty. Please note that this software

Zend Studio 13.0.1
Powerful PHP integrated development environment