標籤

BAT (38) shell (34) Virtual Machine (33) Xubuntu (29) acfs (25) PHP (24) CentOS (21) Virtul Box (20) 編輯器 (17) 資料庫 (15) lubuntu (13) windows (13) CPP (12) ubuntu (12) chrome (11) laravel (10) Docker (9) Python (9) 5A88 (7) VMware (6) 資料結構 (6) Javascript (5) Node (5) Proxmox VE (5) 公告系統 (5) 程式積木 (5) Android Studio (4) ANN (3) OB2D2016x64 (3) Xoops (3) clonezilla (3) samba (3) 公文 (3) 其他 (3) 硬體 (3) API (2) Android (2) AppInvent2 (2) Html (2) Hyper-V (2) Nas (2) botnet (2) mbot (2) swift (2) wordpress (2) 樣板 (2) 防火牆 (2) AD的應用 (1) Ansible (1) Arduino (1) CSS (1) GitLab (1) HA Proxy (1) LegoEV3 (1) PowerShell (1) Scratch (1) VM (1) XenServer (1) kotlin (1) linuxmint (1) lxc (1)

2020年4月26日 星期日

校務系統cloudschool API相關資料及實作與程式碼的關聯

一、實作
1.建立API
(1)進入彰化縣CloudSchool,系統管理->模組管理->API及憑證設定
(2)新增學校伺服器API
    可以得到用戶端ID用戶端密碼
2.Rest API 測試工具
3.測試方式,以 學期資料 api 為例 https://api.chc.edu.tw/semester-data
與程式碼的關聯

   圖中的Access Token Request Endpoint為 https://api.chc.edu.tw/oauth?authorize
               Client ID 為 用戶端ID
               Client Secret 為 用戶端密碼
與程式碼的關聯
// API URL

$api_url = 'https://api.chc.edu.tw';
// 設定擷取的URL網址

curl_setopt($ch, CURLOPT_URL, $api_url."/oauth?authorize");
//設定CURLOPT_POST為TRUE或1,表示要用POST傳遞
curl_setopt($ch, CURLOPT_POST, TRUE);
//將curl_exec()獲得的訊息以文件流的形式返回,而不是直接輸出
////將結果回傳成字串
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
//CURLOPT_POSTFIELDS後面則是要傳接的POST資料
curl_setopt($ch, CURLOPT_POSTFIELDS, array(
'client_id' => $client_id,
'client_secret' => $client_secret,
'grant_type' => 'client_credentials'
));

   圖中按下1,2就會出現-> 3.按下 HEADERS
與程式碼的關聯
//curl_exec($ch)為執行
$data = curl_exec($ch);
//json_decode($data) 將json轉成object,測試語法var_dump(json_decode($data)); 
//json_decode($data,true) 將json轉成array,測試語法var_dump(json_decode($data,true));


$data = json_decode($data);
//取 access token

$access_token = $data->access_token;
  圖中按下1.,即可取的資料,如下圖
與程式碼的關聯
//執行API
$authorization = "Authorization: Bearer ".$access_token;
// 設定擷取的URL網址
curl_setopt($ch, CURLOPT_URL, $api_url.$api_name);
//設定自定義http標頭set custom HTTP headers
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json' , $authorization )); // **Inject Token into Header**
//自定義字串的請求 custom string for request
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "GET");
//將curl_exec()獲得的訊息以文件流的形式返回,而不是直接輸出
//將結果回傳成字串
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
//是否抓取轉址
//curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
   
與程式碼的關聯˙\
//curl_exec($ch)為執行
$result = curl_exec($ch);
//json_decode($data) 將json轉成object,測試語法var_dump(json_decode($data)); 
//json_decode($data,true) 將json轉成array,測試語法var_dump(json_decode($data,true));
$data = json_decode($result);

// 關閉 CURL 連線
curl_close($ch); 



OAuthApiTest.php

<?php
/**
  同步遠端學校學期資料
**/

// 更改為學校的 API ID
$client_id = 'XXXXXXXXXXXXXXXXXXXXX';
// 更改為學校的 API 密碼
$client_secret = 'XXXXXXXXXXXXXXXXX';

// =================================================

// API NAME
$api_name = '/semester-data';
// API URL
$api_url = 'https://api.chc.edu.tw';
// 建立 CURL 連線
$ch = curl_init();

// 取 access token
// 設定擷取的URL網址
curl_setopt($ch, CURLOPT_URL, $api_url."/oauth?authorize");

//設定CURLOPT_POST為TRUE或1,表示要用POST傳遞
curl_setopt($ch, CURLOPT_POST, TRUE);
// the variable
//將curl_exec()獲得的訊息以文件流的形式返回,而不是直接輸出
////將結果回傳成字串
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
//CURLOPT_POSTFIELDS後面則是要傳接的POST資料
curl_setopt($ch, CURLOPT_POSTFIELDS, array(
'client_id' => $client_id,
'client_secret' => $client_secret,
'grant_type' => 'client_credentials'
));
//curl_exec($ch)為執行
$data = curl_exec($ch);
//json_decode($data) 將json轉成object,測試語法var_dump(json_decode($data)); 
//json_decode($data,true) 將json轉成array,測試語法var_dump(json_decode($data,true));
$data = json_decode($data);
//取 access token
$access_token = $data->access_token;

//執行API
$authorization = "Authorization: Bearer ".$access_token;
// 設定擷取的URL網址
curl_setopt($ch, CURLOPT_URL, $api_url.$api_name);
//設定自定義http標頭set custom HTTP headers
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json' , $authorization )); // **Inject Token into Header**
//自定義字串的請求 custom string for request
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "GET");
//將curl_exec()獲得的訊息以文件流的形式返回,而不是直接輸出
//將結果回傳成字串
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
//是否抓取轉址
//curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
//curl_exec($ch)為執行
$result = curl_exec($ch);
//json_decode($data) 將json轉成object,測試語法var_dump(json_decode($data)); 
//json_decode($data,true) 將json轉成array,測試語法var_dump(json_decode($data,true));
$data = json_decode($result);

// 關閉 CURL 連線
curl_close($ch); 

print_r($data);

?>
資料來源:
1.臺中市政府教育局校端 API 應用手冊 (1.0.0)
2.OAuth2 API
3.OAuth2 API
4.臺中市雲端校務系統與Windows AD帳號整合(7)
5.雲端校務系統與OPENLDAP帳號整合(3)
6.將 Cloud School 學期資料同步至校內伺服器資料庫
7.如何實作 Cloudschool OAUth2 認證?
8.[程式][PHP] 如何使用PHP CURL,基礎教學
9.[php]json_decode 將json轉成陣列或object
10.[PHP]curl抓取網頁

沒有留言:

張貼留言

在 Windows 10 x64 1909版,使用BAT快速安裝公文系統與人事服務網(自然人憑證)版

相關內容移往 https://skjhcreator.blogspot.com/2021/02/windows-10-x64-1909bat.html