mirror of
https://gitee.com/ShopeX/OMS
synced 2026-04-01 05:26:43 +08:00
179 lines
5.1 KiB
PHP
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;
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|