Maison > Questions et réponses > le corps du texte
Pendant le processus normal de développement d'un projet, en plus de créer un compte sur ce site Web pour vous connecter, vous pouvez également appeler une interface tierce pour vous connecter au site Web. Ici, nous prenons la connexion Weibo comme exemple. La connexion Weibo comprend l'authentification de l'identité, les relations avec les utilisateurs et la diffusion de contenu. Autorisez les utilisateurs à se connecter avec un compte Weibo pour accéder à des sites Web tiers, partager du contenu et synchroniser des informations.
1. Tout d'abord, vous devez guider l'utilisateur qui a besoin d'une autorisation vers l'adresse suivante :
https://api.weibo.com/oauth2/authorize?client_id=YOUR_CLIENT_ID&response_type=code&redirect_uri=YOUR_REGISTERED_REDIRECT_URI
Si l'utilisateur accepte d'autoriser, la page passe à YOUR_REGISTERED_REDIRECT_URI/?code=CODE :
2. vous devez suivre le code obtenu ci-dessus Exchange for Access Token :
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
Valeur de retour : JSON
{ "access_token": "SlAV32hkKG", "remind_in": 3600, "expires_in": 3600 }
3 Enfin, utilisez le jeton d'accès OAuth2.0 obtenu pour appeler l'API, obtenir l'identité de l'utilisateur et compléter. le login de l'utilisateur.
Pour plus de commodité, nous encapsulons d'abord get et post dans common.php sous application :
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; }}
Code de traitement du contrôleur Login.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>"; } } }
Code modèle login.html:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>微博登录</title> </head> <body> <a href="{$wb_url}">点击这里进行微博登录</a> </body> </html>