Files
ntonpower/extend/sso/SSOClient.php
2026-10-14 14:00:29 +08:00

115 lines
3.7 KiB
PHP
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
namespace sso;
use apiRes\Api;
use think\facade\Session;
class SSOClient
{
private $sso_url = '';
private $app_id = '';
private $app_secret = '';
private $public_ssl_key = '';
private $private_ssl_key = '';
public function __construct($data)
{
// $this->sso_url = config('sso.sso_url');
// if (config('sso.app_id')) $this->app_id = config('sso.app_id');
// if (config('sso.app_secret')) $this->app_secret = config('sso.app_secret');
// if (config('sso.public_key')) $this->public_ssl_key = config('sso.public_key');
// if (config('sso.private_key')) $this->private_ssl_key = config('sso.private_key');
$this->app_id = $data['app_id'];
$this->sso_url = $data['sso_url'];
$this->app_secret = $data['app_secret'];
$this->public_ssl_key = $data['public_key'];
$this->private_ssl_key = $data['private_key'];
}
/**
* 校验code,返回access_token
*/
public function getAccessToken($code)
{
if (empty($code)) {
return Api::error('参数code不能为空', [], true);
}
$data = [
'app_id' => $this->app_id,
'app_secret' => $this->app_secret,
'code' => $code
];
return $this->http('authorize/access_token', $data, true, ['cookie'=>'PHPSESSID=' . Session::getId()]);
}
/**
* 刷新access_token
*/
public function refreshToken($refresh_token, $sessid='')
{
if (empty($refresh_token)) {
return Api::error('参数refresh_token不能为空', [], true);
}
$data = [
'app_id' => $this->app_id,
'app_secret' => $this->app_secret,
'refresh_token' => $refresh_token
];
return $this->http('authorize/refresh_token', $data, true, ['cookie'=>'PHPSESSID=' . $sessid]);
}
/**
* 通知sso退出登录
*/
public function notifySSOServerSigninOut($access_token, $sessid='')
{
if (empty($access_token)) {
return Api::error('参数access_token不能为空', [], true);
}
$data = [
'app_id' => $this->app_id,
'app_secret' => $this->app_secret,
'access_token' => $access_token,
];
if (empty($sessid)) {
$sessid = Session::getId();
}
return $this->http('authorize/signin_out', $data, true, ['cookie'=>'PHPSESSID=' . $sessid]);
}
/**
* 请求数据
*/
private function http($url, $data, $is_post=false, $options=[])
{
$data = json_encode($data);
$headerArray = [
'Content-type: application/json;charset=utf-8',
'Accept: application/json'
];
$url = $this->sso_url . $url;
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST,FALSE);
if ($is_post) {
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
}
curl_setopt($curl,CURLOPT_HTTPHEADER,$headerArray);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
if (!empty($options['cookie'])) {
curl_setopt($curl, CURLOPT_COOKIE, $options['cookie']);
}
$output = curl_exec($curl);
$http_status = curl_errno($curl);
$http_msg = curl_error($curl);
curl_close($curl);
if ($http_status == 0) {
return json_decode($output, true);
} else {
return ['errno' => $http_status, 'errmsg' => $http_msg, 'data' => []];
}
}
}