PHP Twitter 推特 第三方登录

PHP Twitter 推特 第三方登录

文档 & 平台 & 说明

  • twitter登录文档
  • 开发者平台
  • 申请成为开发流程按引导操作就可以了, 但是要注意信息填写要真实完善的信息, 否则容易被拒绝(被拒绝可能不能二次申请, 之前不能, 现在不知道能不能)
  • 目前推特一个号只能开通一个免费应用, 可付费开通多个
  • 设置基础信息
  • User authentication settings 用户认证设置


    需要填写重定向地址, 与之后代码中重定向地址要相同
  • 使用 OAuth 2.0, v2 Twitter API 端点, 所以使用 OAuth 2.0的clientID 及 Secret

流程

  • 生成跳转到twitter授权页面的url
  • 授权后会带着用户code重定向到你的重定向地址
  • 用code获取 a***ess_token
  • 用a***ess_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 获取 a***ess_token
    $token = $twitter->getA***essToken($code);
    // 用 a***ess_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.***/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;
    }

    /**
     * 获取a***ess_token
     * 
     * @param string code 登录授权后返回用户code
     */
    public function getA***essToken($code)
    {
        $url = 'https://api.twitter.***/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['a***ess_token'];
    }

    /**
     * 获取用户信息
     */
    public function getUserInfo($token)
    {
        $uri = 'https://api.twitter.***/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);
    }
}
转载请说明出处内容投诉
CSS教程_站长资源网 » PHP Twitter 推特 第三方登录

发表评论

欢迎 访客 发表评论

一个令你着迷的主题!

查看演示 官网购买