文档 & 平台 & 说明
- twitter登录文档
- 开发者平台
- 申请成为开发流程按引导操作就可以了, 但是要注意信息填写要真实完善的信息, 否则容易被拒绝(被拒绝可能不能二次申请, 之前不能, 现在不知道能不能)
- 目前推特一个号只能开通一个免费应用, 可付费开通多个
- 设置基础信息
- User authentication settings 用户认证设置
需要填写重定向地址, 与之后代码中重定向地址要相同 - 使用 OAuth 2.0, v2 Twitter API 端点, 所以使用 OAuth 2.0的clientID 及 Secret
流程
- 生成跳转到twitter授权页面的url
- 授权后会带着用户code重定向到你的重定向地址
- 用code获取 access_token
- 用access_token获取用户信息
- 获取到用户信息之后就是本身的登录或者注册流程了
代码
HTML
# 一个点击跳转的按钮即可
<a class="animate" href="/signin?type=twitter" target="_blank"></a>
PHP
/**
* 登录/注册
*/
public function signin(Request $request)
{
$type = $request->get('type');
if ($type == 'twitter') {
// 生成跳转到twitter授权页面的url, 重定向到授权页面
$twitterModel = New NewTwitterLogin()
$uri = $twitterModel->createOauthLink();
return redirect()->away($url);
}
}
/**
* twitter 回调接口
*/
public function callBackTwitter()
{
// 获取重定向链接中的code
$code = $request->get('code');
$twitter = new NewTwitterLogin();
// 用code 获取 access_token
$token = $twitter->getAccessToken($code);
// 用 access_token 获取用户信息
$userInfo = $twitter->getUserInfo($token);
// 处理自己的登录/注册逻辑
}
- NewTwitterLogin.php model文件
<?php
namespace App\Http\Models\Website;
class NewTwitterLogin
{
private $key = '*****';
private $secret = '*********';
// oauth 2.0 使用
private $clientId = '********';
private $clientSecret = '*******';
private $redirect_uri = '*****' // 重定向url
// 创建链接
public function createOauthLink()
{
$url = "https://twitter.com/i/oauth2/authorize?response_type=code&client_id={$this->clientId}&redirect_uri={$this->redirect_uri}&scope=users.read%20tweet.read&state=twitter&code_challenge=challenge&code_challenge_method=plain";
return $url;
}
/**
* 获取access_token
*
* @param string code 登录授权后返回用户code
*/
public function getAccessToken($code)
{
$url = 'https://api.twitter.com/2/oauth2/token';
// Authorization Basic
$basic = base64_encode($this->clientId . ':' . $this->clientSecret);
$header = [
"Content-Type: application/x-www-form-urlencoded",
"Authorization: Basic $basic",
];
$data = [
'code' => $code,
'grant_type' => 'authorization_code',
'redirect_uri' => $this->redirect_uri,
'code_verifier' => 'challenge',
];
$data = http_build_query($data);
$res = $this->curlMethod($url, $header, $data);
return $res['access_token'];
}
/**
* 获取用户信息
*/
public function getUserInfo($token)
{
$uri = 'https://api.twitter.com/2/users/me';
$header = [
"Authorization: Bearer $token",
];
$res = $this->curlMethod($uri, $header, [], 'GET');
return $res['data'];
}
public function curlMethod($uri, $header, $data = [], $method = 'POST', $json = true)
{
$curl = curl_init();
if ($data && is_array($data) && $json) {
$data = json_encode($data);
}
curl_setopt_array($curl, array(
CURLOPT_URL => $uri,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
// CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => $method,
CURLOPT_POSTFIELDS => $data,
CURLOPT_HTTPHEADER => $header,
));
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
return json_decode($response, true);
}
}
文章来源地址https://www.toymoban.com/news/detail-853029.html
文章来源:https://www.toymoban.com/news/detail-853029.html
到了这里,关于PHP Twitter 推特 第三方登录的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!