自动缩放 API 身份验证 PHP 不起作用
Automating Zoom API authentication with PHP not working
我正在尝试使用 Zoom API 使登录过程自动化,以允许我使用我的网站来创建会议,但我似乎无法让登录工作以允许我获得调用 API 方法的验证码。我在 PHP 中这样做,我是新手,所以可能会犯一些基本错误。
如果我通过邮递员在下面的代码中进行 2 次调用并将代码从邮递员复制到我的 PHP 然后它会工作一个小时(我猜这是因为 cookie 有一个小时的有效期?)。考虑到我认为这取决于 cookie,我尝试了几种方法来复制 set-cookie header 中返回的 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;
// ---------------------------------------------------------------
?>
我的解决方案是改用刷新令牌调用,以避免每次调用都需要登录。现在,每次调用 Zoom API 我都会刷新令牌,然后进行 API 调用,将令牌存储在服务器上以备将来使用。
除了为每个请求刷新令牌外,您还可以在 jwt 令牌站点上使用自己的客户端密钥生成不朽令牌。例如,我在 2052 年之前生成了一个有效令牌,并且可以请求任意数量的请求。
首先,您应该从 Zoom 获取令牌并打开 jwt.io 网站并将其粘贴到此处。您可以更改时区,exp:过期时间,iat:开始时间
最后,您传递 client_secret 密钥
我正在尝试使用 Zoom API 使登录过程自动化,以允许我使用我的网站来创建会议,但我似乎无法让登录工作以允许我获得调用 API 方法的验证码。我在 PHP 中这样做,我是新手,所以可能会犯一些基本错误。
如果我通过邮递员在下面的代码中进行 2 次调用并将代码从邮递员复制到我的 PHP 然后它会工作一个小时(我猜这是因为 cookie 有一个小时的有效期?)。考虑到我认为这取决于 cookie,我尝试了几种方法来复制 set-cookie header 中返回的 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;
// ---------------------------------------------------------------
?>
我的解决方案是改用刷新令牌调用,以避免每次调用都需要登录。现在,每次调用 Zoom API 我都会刷新令牌,然后进行 API 调用,将令牌存储在服务器上以备将来使用。
除了为每个请求刷新令牌外,您还可以在 jwt 令牌站点上使用自己的客户端密钥生成不朽令牌。例如,我在 2052 年之前生成了一个有效令牌,并且可以请求任意数量的请求。
首先,您应该从 Zoom 获取令牌并打开 jwt.io 网站并将其粘贴到此处。您可以更改时区,exp:过期时间,iat:开始时间
最后,您传递 client_secret 密钥