728x90
반응형
저는 코드이그나이터로 진행하고 헬퍼를 통해서 만들고 진행해봤습니다. 코드이그나이터를 사용하지 않거나 혹은 다른 프레임워크를 쓰더라도 일반 함수 파일을 만든다고 생각하셔도 됩니다.
토큰 발급
ZOOM API 작업을 수행하기 위해서는 토큰이 먼저 필요합니다.
토큰은 1시간마다 만료되기 때문에 만료되면 새로 발급을 받아줘야 합니다.
1시간마다 스케줄링을 돌리거나 에러가 날 경우 try-catch문을 통해서 새로 발급받고 진행하는 방법이 있으나 해당 부분은 생략하겠습니다.
zoom_test_helper.php
defined('BASEPATH') OR exit('No direct script access allowed');
define('JOOM_ROOT', dirname(__FILE__) . '/zoom');
require($_SERVER['DOCUMENT_ROOT'].'/vendor/autoload.php');
define('CLIENT_ID', 'CLIENT_ID 값');
define('CLIENT_SECRET', 'CLIENT_SECRET 값');
define('ACCOUNT_ID', 'ACCOUNT_ID 값');
/*
토큰 발급
*/
function zoomTokenIssue(){
$client = new GuzzleHttp\Client(['base_uri' => 'https://zoom.us']);
$response = $client->request('POST', '/oauth/token', [
"headers" => [
"Authorization" => "Basic ". base64_encode(CLIENT_ID.':'.CLIENT_SECRET)
,"Host" => "zoom.us"
],
'form_params' => [
"account_id" => ACCOUNT_ID,
"grant_type" => "account_credentials"
]
]);
$result = json_decode($response->getBody());
$token = $result->access_token;
## 토큰 리턴
return $token;
}
Main.php
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
class Main extends CI_Controller {
public function __construct(){
parent::__construct();
}
public function index(){
$this->load->helper('zoom_test_helper');
echo zoomTokenIssue();
}
}
결과
성공하였다면 아래처럼 발급받은 토큰을 확인할 수 있습니다.
토큰 DB 저장
zoom_test_helper.php
zoomTokenIssue 함수에서 리턴값은 지워주고 updateZoomToken(토큰값) 소스를 추가해줍니다.
function zoomTokenIssue()
{
$client = new GuzzleHttp\Client(['base_uri' => 'https://zoom.us']);
$response = $client->request('POST', '/oauth/token', [
"headers" => [
"Authorization" => "Basic ". base64_encode(CLIENT_ID.':'.CLIENT_SECRET)
,"Host" => "zoom.us"
],
'form_params' => [
"account_id" => ACCOUNT_ID,
"grant_type" => "account_credentials"
]
]);
$result = json_decode($response->getBody());
##추가
updateZoomToken($result->access_token);
//return $result;
}
zoomTokenIssue함수 아래에 updateZoomToken()함수를 만들어줍니다.
최초의 토큰값이 없다면 테이블에 데이터를 넣어주고 없다면 새로 받은 토큰 값으로 업데이트 해줍니다.
/*
토큰 생성&업데이트 - 1시간 주기별로 업데이트 해야 함.
*/
function updateZoomToken($token){
$CI =& get_instance();
$SQL = "SELECT * FROM zoom_oauth";
if($CI->db->query($SQL)->num_rows()){
$SQL = "UPDATE zoom_oauth SET provider_value = ? WHERE provider = 'zoom' ";
}else{
$SQL = "INSERT INTO zoom_oauth SET provider = 'zoom', provider_value = ? ";
}
$CI->db->query($SQL, array($token));
}
토큰 가져오기
해당 부분은 저장된 토큰을 가져오는 쿼리만 있으므로 설명은 생략하겠습니다.
/*
토큰 가져오기
*/
function getToken(){
$CI =& get_instance();
return $CI->db->query("SELECT provider_value FROM zoom_oauth WHERE provider = 'zoom'")->row()->provider_value;
}
zoom 생성
function createZoom($topic,$pwd, $zoom_id ='me' ){
$client = new GuzzleHttp\Client(['base_uri' => 'https://api.zoom.us']);
$token = getToken();
$response = $client->request('POST', '/v2/users/'.$zoom_id.'/meetings', [
"headers" => [
"Authorization" => "Bearer " . $token
],
'json' => [
"topic" => $topic,
"type" => 2,
"start_time" => date('Y-m-d\TH:i:s'),
"duration" => "60", // mins
"password" => $pwd ?? null,
],
]);
return json_decode($response->getBody());
}
Main.php
public function index(){
$this->load->helper('zoom_test_helper');
$data = createZoom('줌 생성 이름',null);
echo $data->join_url; // zoom 이동 링크
//$data->id - ZOOM ID
//$data->start_url - 호스트 전용 URL
}
기타 결과값들은 아래의 문서를 통해서 확인할 수 있으니 참고해주세요.
Zoom Meeting API
API Reference for /docs/api/rest/reference/zoom-api/methods
developers.zoom.us
리턴받은 join_url 경로를 따라 이동하면 아래처럼 생성되는 것을 확인할 수 있습니다.
zoom 생성
728x90
반응형
'IT > PHP | CI' 카테고리의 다른 글
[PHP] 객체형 배열 값이 존재하는지 확인하는 법 (0) | 2024.07.23 |
---|---|
[PHP] 포함된 문자 찾기 str_contains(), str_starts_with(), str_ends_with() 및 strpos() (0) | 2024.06.22 |
[PHP/CodeIgniter] ZOOM API 연동하기 (sever-to-sever OAuth) - 1 (0) | 2023.09.27 |
[CodeIgniter] db 에러(error) 시 멈춤 무시하기 (0) | 2023.08.02 |
[PHP] strpos함수로 특정 키워드(문자열) 포함 여부 체크하기 (0) | 2023.07.04 |