获取code 浏览器请求:
https://pass.gdddc.edu.cn/#/loginAuth?client_id=XXXXXXXXXX
&schoolId=14407&grant_type=code&redirect_uri=https://ms.gdddc.edu.cn/login&response_type=code
&state=123
获取token 用curl请求:
$data['code'] = $_GET['code'];
$data['grant_type'] = 'authorization_code';
$data['client_id'] = 'XXXXXXXXX';
$data['client_secret'] = 'XXXXXXXXXXXXXXXX';
$data['redirect_uri'] = 'https://ms.gdddc.edu.cn/';
$data['state'] = '123';
$token_json = $this->https_request("https://pass.gdddc.edu.cn/auth/oauth/token",http_build_query($data));
$token_arr = json_decode($token_json,true);//dd($token_json);
if($token_arr['code'] != 200){
dd($token_json);
}
获取信息:
function login()
{
$data['code'] = $_GET['code'];
$data['grant_type'] = 'authorization_code';
$data['client_id'] = 'XXXXXXXX';
$data['client_secret'] = 'XXXXXXXXXXXXXX';
$data['redirect_uri'] = 'https://ms.gdddc.edu.cn/';
$data['state'] = '123';
$token_json = $this->https_request("https://pass.gdddc.edu.cn/auth/oauth/token",http_build_query($data));
$token_arr = json_decode($token_json,true);//dd($token_json);
if($token_arr['code'] != 200){
dd($token_json);
}
$token = $token_arr['data']['accessToken'];
$h = array('content-type: application/json','Authorization:'.$token);
$user_json = $this->https_request("https://pass.gdddc.edu.cn/auth/user/info",'1',$h);
$user_arr = json_decode($user_json,true);
if($user_arr['code'] != 200){
dd($user_json);
}
$username = $user_arr['data']['xh'];
$email = $username . '@' . app()->env;
$password = md5($username);
$name = $user_arr['data']['xm'];
$type = $user_arr['data']['userType'];
$departname = '广东舞蹈戏剧职业学院';
//教师
if($type == '01'){
$type = 3;
}elseif($type =='00'){
//学生
$type = 2;
}else{
//其他
$type = 1;
}
if(!empty($departname)){
// dd($department);
$departments = DB::table('department')->select('departmentid')->where('name', $departname)->first();
if (empty($departments)) {
$data = [
'parentid' => 1,
'name' => $departname,
];
$departmentid = DB::table('department')->insertGetId($data);
//部门预先分配5000个激活次数
//windows 7/8
$data1 = [
'departmentid' => $departmentid,
'keyid' => 3,
'count' => 10000,
'status' => 1
];
// office
$data2 = [
'departmentid' => $departmentid,
'keyid' => 4,
'count' => 10000,
'status' => 1
];
// Windows 10/11
$data3 = [
'departmentid' => $departmentid,
'keyid' => 5,
'count' => 10000,
'status' => 1
];
//WINSERVER2012R2
$data4 = [
'departmentid' => $departmentid,
'keyid' => 9,
'count' => 10000,
'status' => 1
];
// visio
$data5 = [
'departmentid' => $departmentid,
'keyid' => 10,
'count' => 10000,
'status' => 1
];
// WINSERVER2016
$data6 = [
'departmentid' => $departmentid,
'keyid' => 12,
'count' => 10000,
'status' => 1
];
// WINSERVER2019
$data7 = [
'departmentid' => $departmentid,
'keyid' => 14,
'count' => 10000,
'status' => 1
];
// WINSERVER2022
$data8 = [
'departmentid' => $departmentid,
'keyid' => 15,
'count' => 10000,
'status' => 1
];
// Project
$data9 = [
'departmentid' => $departmentid,
'keyid' => 16,
'count' => 10000,
'status' => 1
];
DB::table('department__key')->insert([$data1,$data2,$data3,$data4,$data5,$data6,$data7,$data8,$data9]);
} else {
$departmentid = $departments->departmentid;
if ($departmentid == 1) {
$departmentid = 2;
}
}
}else{//部门名称为空,归属学校
$departmentid = 2;
}
$user = UserService::get_user_by_username($username);
if (!$user) {
// 获取userid, 并且保存用户信息
$userId = UserService::add_user($email, $password, $username, $name, $departmentid, 1, str_random(32), $type);
// 自动分配密钥
$reason = 'CAS登录自动分配密钥';
$managers = ManagerService::managers();
KeyService::auto_assign($userId, $managers[0]->managerid, $reason);
} else {
$userId = $user->userid;
//更新
//DB::table('user')->where('userid',$userId)->update(['name'=>$name,'type'=>$type]);
}
Session::set('user.provider', 'user');
Auth::loginUsingId($userId);
\Ca\Logger::getInstance()->UserAccessLog();
return Redirect::to('/');
}
function https_request($url, $data = null, $header_arr = array('content-type: application/x-www-form-urlencoded'))
{
$curl = curl_init();//初始化
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_TIMEOUT, 30);//允许 cURL 函数执行的最长秒数。
/*if (!empty($port)) {
curl_setopt($curl, CURLOPT_PORT, $port);//可选的用来指定连接端口,默认80端口可不写
}*/
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);
curl_setopt($curl, CURLOPT_HTTPHEADER, $header_arr);//设置请求目标url头部信息
if (!empty($data)) {
//$data不为空,发送post请求
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, $data); //$data:数组
}
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
$output = curl_exec($curl);//执行命令
$error = curl_error($curl);//错误信息
if ($error || $output == FALSE) {
//报错信息
return 'ERROR ' . curl_error($curl);
}
curl_close($curl);
return $output;
}