使用PHP自动执行Zoom API身份验证不起作用

时间:2020-06-12 13:54:14

标签: php authentication oauth

我正在尝试使用Zoom API自动化登录过程,以允许我使用自己的网站来创建会议,但似乎无法使登录生效,以便允许我获取身份验证代码来调用API方法。我正在用PHP进行此操作,但是我还是一个新手,因此可能会犯一些基本错误。

如果我通过邮递员在下面的代码中进行两次调用,并将代码从邮递员复制到我的PHP,那么它将工作一个小时(我想这是因为Cookie的有效期是一个小时?)。考虑到我认为这取决于cookie,我尝试了几种方法来复制set-cookie标头中返回的cookie,但这仍然无法正常工作。有人可以帮我解决我所缺少的吗?抱歉,如果代码很乱...

<?php

$curl = curl_init();
$headers = [];

curl_setopt_array($curl, array(
    CURLOPT_URL => "https://zoom.us/oauth/v2/signin",
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_ENCODING => "",
    CURLOPT_HEADERFUNCTION => function($curl, $header) use (&$headers)
    {
        $len = strlen($header);
        $header = explode(':', $header, 2);
        if (count($header) < 2) // ignore invalid headers
            return $len;

        $headers[strtolower(trim($header[0]))][] = trim($header[1]);

        return $len;
    },
    CURLOPT_MAXREDIRS => 10,
    CURLOPT_TIMEOUT => 0,
    CURLOPT_FOLLOWLOCATION => true,
    CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
    CURLOPT_CUSTOMREQUEST => "POST",
    CURLOPT_POSTFIELDS => array('email' => 'some@thing.com','password' => 'somePassword','client_id' => 'someClientID','redirect_uri' => 'https://www.some.thing','response_type' => 'code','scope' => '','state' => ''),
));

$response = curl_exec($curl);

$cookie2 = "Cookie: ";
echo "<br>_____<br>";
print_r($headers["set-cookie"]);
echo "<br>_____<br>";
//echo var_dump(curl_getinfo($curl));
foreach ($headers["set-cookie"] as &$value) {
    echo "<br>------------<br>";
    echo $value;
    $cookies = explode(';', $value);
    $cookie2 .= $cookies[0] . "; ";
}
unset($value);     


echo "<br>_____<br>";
echo $cookie2;
echo "<br>_____<br>";

echo $response;

$nextUrl = json_decode($response, true)["nextUrl"];

// -------------------------------------------

//$curl = curl_init();

curl_setopt_array($curl, array(
    CURLOPT_URL => "https://zoom.us/oauth/authorize?client_id=clientID&response_type=code&redirect_uri=https://www.some.thing",
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_ENCODING => "",
    CURLOPT_MAXREDIRS => 10,
    CURLOPT_TIMEOUT => 0,
    CURLOPT_FOLLOWLOCATION => true,
    CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
    CURLOPT_CUSTOMREQUEST => "GET",
    CURLOPT_HTTPHEADER => array(
        $cookie2
    ),
));

$response = curl_exec($curl);

curl_close($curl);
$pieces = explode("> ", $response);
$authCode = substr($pieces[1], 0, -3);


echo "auth code: " . $authCode;

// ---------------------------------------------------------------

?>

2 个答案:

答案 0 :(得分:2)

为此,我的解决方案是使用刷新令牌调用,以避免每次调用都需要登录。现在,对于每次对Zoom API的调用,我都会刷新令牌,然后进行API调用,将令牌存储在服务器上以备将来使用。

答案 1 :(得分:0)

除了为每个请求刷新令牌之外,您还可以在jwt令牌站点上使用自己的客户端密码生成不朽令牌。例如,我生产了一个有效的令牌,直到2052年为止,并且可以根据需要请求任意数量的请求。

首先,您应该从Zoom中获取令牌并打开jwt.io网站并将其粘贴到此处。您可以更改时区,exp:到期时间,iat:开始时间

enter image description here

最后,您传递了client_secret密钥

相关问题