Semasa proses pembangunan projek biasa, selain mendaftar akaun di laman web ini untuk log masuk, anda juga boleh menghubungi antara muka pihak ketiga untuk log masuk ke tapak web. Di sini kami mengambil log masuk Weibo sebagai contoh. Log masuk Weibo termasuk pengesahan identiti, perhubungan pengguna dan penyebaran kandungan. Benarkan pengguna log masuk dengan akaun Weibo untuk mengakses tapak web pihak ketiga, berkongsi kandungan dan menyegerakkan maklumat.
1. Pertama, anda perlu membimbing pengguna yang memerlukan kebenaran ke alamat berikut:
https://api.weibo.com/oauth2/authorize?client_id=YOUR_CLIENT_ID&response_type=code&redirect_uri=YOUR_REGISTERED_REDIRECT_URI
Jika pengguna bersetuju untuk memberi kebenaran, halaman tersebut melompat ke YOUR_REGISTERED_REDIRECT_URI/?code=CODE:
2. anda perlu mengikut kod yang diperolehi di atas Exchange untuk Token Akses:
https://api.weibo.com/oauth2/access_token?client_id=YOUR_CLIENT_ID&client_secret=YOUR_CLIENT_SECRET&grant_type=authorization_code&redirect_uri=YOUR_REGISTERED_REDIRECT_URI&code=CODE
Nilai pulangan: JSON
{ "access_token": "SlAV32hkKG", "remind_in": 3600, "expires_in": 3600 }
3 Akhir sekali, gunakan Token Akses OAuth2.0 yang diperoleh untuk memanggil API, dapatkan identiti pengguna dan lengkapkan log masuk pengguna.
Untuk kemudahan, kami mula-mula merangkum get dan pos ke common.php di bawah aplikasi:
Application public file common.php:
function get( $url, $_header = NULL ){ $curl = curl_init(); //curl_setopt ( $curl, CURLOPT_SAFE_UPLOAD, false); if( stripos($url, 'https://') !==FALSE ) { curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE); curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE); } curl_setopt($curl, CURLOPT_URL, $url); curl_setopt($curl, CURLOPT_HEADER, 0); curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); if ( $_header != NULL ) { curl_setopt($curl, CURLOPT_HTTPHEADER, $_header); } $ret = curl_exec($curl); $info = curl_getinfo($curl); curl_close($curl); if( intval( $info["http_code"] ) == 200 ) { return $ret; } return false;}/* * post method */function post( $url, $param ){ $oCurl = curl_init (); curl_setopt ( $oCurl, CURLOPT_SAFE_UPLOAD, false); if (stripos ( $url, "https://" ) !== FALSE) { curl_setopt ( $oCurl, CURLOPT_SSL_VERIFYPEER, FALSE ); curl_setopt ( $oCurl, CURLOPT_SSL_VERIFYHOST, false ); } curl_setopt ( $oCurl, CURLOPT_URL, $url ); curl_setopt ( $oCurl, CURLOPT_RETURNTRANSFER, 1 ); curl_setopt ( $oCurl, CURLOPT_POST, true ); curl_setopt ( $oCurl, CURLOPT_POSTFIELDS, $param ); $sContent = curl_exec ( $oCurl ); $aStatus = curl_getinfo ( $oCurl ); curl_close ( $oCurl ); if (intval ( $aStatus ["http_code"] ) == 200) { return $sContent; } else { return false; }}
Kod pemprosesan pengawal Log masuk.php:
class Login extends \think\Controller { public function index() { $key = "****"; $redirect_uri = "***微博应用安全域名***/?backurl=***项目本地域名***/home/login/webLogin?"; //授权后将页面重定向到本地项目 $redirect_uri = urlencode($redirect_uri); $wb_url = "https://api.weibo.com/oauth2/authorize?client_id={$key}&response_type=code&redirect_uri={$redirect_uri}"; $this -> assign('wb_url',$wb_url); return view('login'); } public function webLogin(){ $key = "*****"; //接收code值 $code = input('get.code'); //换取Access Token: post方式请求 替换参数: client_id, client_secret,redirect_uri, code $secret = "********"; $redirect_uri = "********"; $url = "https://api.weibo.com/oauth2/access_token?client_id={$key}&client_secret={$secret}&grant_type=authorization_code&redirect_uri={$redirect_uri}&code={$code}"; $token = post($url, array()); $token = json_decode($token, true); //获取用户信息 : get方法,替换参数: access_token, uid $url = "https://api.weibo.com/2/users/show.json?access_token={$token['access_token']}&uid={$token['uid']}"; $info = get($url); if($info){ echo "<p>登录成功</p>"; } } }
Template code
rreeee
精品PHP中高级进阶学习教程,需要加微信:PHPopen888,还可加入微信群,分享tp,laravel,swoole等...