Files
OMS/app/ome/statics/lib/oauth.php
2026-01-04 17:22:44 +08:00

179 lines
5.1 KiB
PHP

<?php
/**
* Copyright 2026 ShopeX (https://www.shopex.cn)
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
include(dirname(__FILE__)."/oauth/response.php");
include(dirname(__FILE__)."/oauth/request.php");
class oauth2{
protected $token_type = 'Bearer';
private $__request;
private $__response;
private $__config;
function __construct($config){
$this->key = $config['key'];
$this->secret = $config['secret'];
$this->site = $config['site'];
$this->oauth = $config['oauth'];
$this->__config = $config;
}
public function get_token($code)
{
$url = "{$this->oauth}/token";
$data = array(
'grant_type' => 'authorization_code',
'code' => $code,
'redirect_uri' => "",
'client_id'=>$this->key,
'client_secret'=>$this->secret,
);
$this->request()->get_info($url, $data);
$params = $this->request()->parsed();
$token = $params['access_token'];
unset($params['expires_in'], $params['token_type'], $params['access_token']);
$this->token = $token;
return array('token'=>$token, 'params'=>$params);
}
public function authorize_url($callback){
$data = array(
'response_type' => 'code',
'client_id' => $this->key,
'redirect_uri'=>$callback,
);
$query = http_build_query($data);
$url = "{$this->oauth}/authorize?{$query}";
return $url;
}
public function logout_url($callback)
{
$data = array(
'redirect_uri'=>$callback,
);
$query = http_build_query($data);
$url = "{$this->oauth}/logout?{$query}";
return $url;
}
public function request($token=null)
{
if (!$this->__request)
$this->__request = new oauth2_request($this->__config, $token);
return $this->__request;
}
public function response()
{
if (!$this->__response)
$this->__response = new oauth2_response($this->__config);
return $this->__response;
}
public function verify_api_params()
{
$arr_get = $_GET;
$arr_post = $_POST;
$sign = $arr_get['sign'];
$arr_get = $arr_get['sign'];
echo "<pre>";
print_r($_GET);
print_r($_POST);
return true;
}
public function sign($action, $url, $data=array(), $signtime=null)
{
$parse_url = parse_url($url);
$path = $parse_url['path'];
$get_data['sign_method'] = 'md5';
$get_data['sign_time'] = $signtime ? $signtime : time();
$get_data['client_id'] = $this->key;
$post_data = array();
if(strtolower($action)=='get') {
$get_data = array_merge($data, $get_data);
} else {
$post_data = $data;
}
$get_data = $this->ksort($get_data);
$post_data = $this->ksort($post_data);
$get_params = rawurlencode(urldecode(http_build_query($get_data)));
$post_params = rawurlencode(urldecode(http_build_query($post_data)));
$header_params = rawurlencode(urldecode(http_build_query($header_data)));
#$get_params = $post_params = $header_params = null;
#foreach(array('get_params' =>$get_data, 'post_params'=>$post_data) as $key => $val){
# $$key = $this->build_query($val);
#}
#$get_params = rawurlencode(ltrim($get_params, '&'));
#$post_params = rawurlencode(ltrim($post_params, '&'));
#$header_params = rawurlencode(ltrim($header_params, '&'));
$path = rawurlencode('/'.ltrim($path, '/'));
#$orgsign = "{$this->secret}&".strtoupper($action)."&{$path}&{$get_params}&{$this->secret}";
$orgsign = "{$this->secret}&".strtoupper($action)."&{$path}&{$header_params}&{$get_params}&{$post_params}&{$this->secret}";
$sign = strtoupper(md5($orgsign));
#echo "\r\n", $orgsign, "\r\n", $sign, "\r\n";
$get_data['sign'] = $sign;
return $get_data;
}
private function build_query($row, $pre=null)
{
$r = null;
foreach($row as $k => $v) {
if(is_array($v)){
$r .= '&'. $this->build_query($v, ($pre ? "{$pre}[$k]" : $k));
} else {
$r .= '&'. ($pre ? "{$pre}[{$k}]" : $k) . "=" .$v;
}
}
return $r;
}
private function ksort($data)
{
ksort($data);
foreach($data as $key => &$val){
if (is_array($val)) {
$val = $this->ksort($val);
}
}
return $data;
}
}