You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
160 lines
4.7 KiB
160 lines
4.7 KiB
<?php |
|
/** |
|
* @copyright ©2018 浙江禾匠信息科技 |
|
* @author Lu Wei |
|
* @link http://www.zjhejiang.com/ |
|
* Created by IntelliJ IDEA |
|
* Date Time: 2018/10/15 19:27 |
|
*/ |
|
|
|
|
|
namespace app\hejiang\cloud; |
|
|
|
|
|
use app\models\Admin; |
|
use app\models\Store; |
|
use Curl\Curl; |
|
|
|
class HttpClient |
|
{ |
|
public static $urlEncodeQueryString = true; |
|
public static $curlTimeout = 30; |
|
|
|
public static function get($url, $params = []) |
|
{ |
|
$url = self::getUrl($url); |
|
$curl = self::getCulr(); |
|
$curl->get($url, $params); |
|
if ($curl->error) { |
|
if ($curl->response) { |
|
return $curl->response; |
|
} else { |
|
throw new CloudException($curl->http_error_message, $curl->http_status_code); |
|
} |
|
} |
|
return $curl->response; |
|
} |
|
|
|
public static function post($url, $data = [], $params = []) |
|
{ |
|
$url = self::getUrl($url); |
|
$url = self::appendParams($url, $params); |
|
$curl = self::getCulr(); |
|
$curl->post($url, $data); |
|
if ($curl->error) { |
|
if ($curl->response) { |
|
return $curl->response; |
|
} else { |
|
throw new CloudException($curl->error_message, $curl->error_code); |
|
} |
|
} |
|
return $curl->response; |
|
} |
|
|
|
private static function getUrl($url) |
|
{ |
|
if (mb_stripos($url, 'http') === 0) { |
|
return $url; |
|
} |
|
$url = mb_stripos($url, '/') === 0 ? mb_substr($url, 1) : $url; |
|
$baseUrl = Config::BASE_URL; |
|
$baseUrl = mb_stripos($baseUrl, '/') === (mb_strlen($baseUrl) - 1) ? $baseUrl : $baseUrl . '/'; |
|
return $baseUrl . $url; |
|
} |
|
|
|
private static function appendParams($url, $params = []) |
|
{ |
|
if (!is_array($params)) { |
|
return $url; |
|
} |
|
if (!count($params)) { |
|
return $url; |
|
} |
|
$url = trim($url, '?'); |
|
$url = trim($url, '&'); |
|
$queryString = static::paramsToQueryString($params); |
|
if (mb_stripos($url, '?')) { |
|
return $url . '&' . $queryString; |
|
} else { |
|
return $url . '?' . $queryString; |
|
} |
|
} |
|
|
|
private static function paramsToQueryString($params = []) |
|
{ |
|
if (!is_array($params)) { |
|
return ''; |
|
} |
|
if (!count($params)) { |
|
return ''; |
|
} |
|
$str = ''; |
|
foreach ($params as $k => $v) { |
|
if (static::$urlEncodeQueryString) { |
|
$v = urlencode($v); |
|
} |
|
$str .= "{$k}={$v}&"; |
|
} |
|
return trim($str, '&'); |
|
} |
|
|
|
private static function getCulr() |
|
{ |
|
$curl = new Curl(); |
|
$curl->setOpt(CURLOPT_SSL_VERIFYHOST, false); |
|
$curl->setOpt(CURLOPT_SSL_VERIFYPEER, false); |
|
$curl->setOpt(CURLOPT_TIMEOUT, static::$curlTimeout); |
|
$curl->setHeader('DOMAIN', static::getDomain()); |
|
$curl->setHeader('REQUEST-INFO', static::getRequestInfo()); |
|
$curl->setHeader('X-HOST-DATA', static::getHostData()); |
|
return $curl; |
|
} |
|
|
|
private static function getDomain() |
|
{ |
|
$localAuthInfo = Cloud::getLocalAuthInfo(); |
|
if ($localAuthInfo && !empty($localAuthInfo['domain'])) { |
|
return $localAuthInfo['domain']; |
|
} else { |
|
return \Yii::$app->request->getHostName(); |
|
} |
|
} |
|
|
|
private static function getHostData() |
|
{ |
|
$data = []; |
|
try { |
|
$installed_plugins = []; |
|
$plugins = CloudPlugin::getInstallPluginList(); |
|
foreach ($plugins as $plugin) { |
|
$installed_plugins[] = $plugin['name']; |
|
} |
|
$data['installed_plugins'] = $installed_plugins; |
|
} catch (\Exception $e) { |
|
} |
|
$sub_account_num = (Admin::find()->where(['is_delete' => 0])->count()) - 1; |
|
$data['sub_account_num'] = $sub_account_num; |
|
$app_num = Store::find()->count(); |
|
$data['app_num'] = $app_num; |
|
return base64_encode(json_encode($data, JSON_UNESCAPED_UNICODE)); |
|
} |
|
|
|
/** |
|
* return base64_encode(json_encode( ['domain', 'url', 'path', 'version'] )) |
|
* @return string |
|
*/ |
|
private static function getRequestInfo() |
|
{ |
|
try { |
|
$version = hj_core_version(); |
|
} catch (\Exception $e) { |
|
$version = '0.0.0'; |
|
} |
|
return base64_encode(json_encode([ |
|
'domain' => \Yii::$app->request->hostName, |
|
'url' => \Yii::$app->request->absoluteUrl, |
|
'path' => \Yii::$app->basePath, |
|
'version' => $version, |
|
], JSON_UNESCAPED_UNICODE)); |
|
} |
|
}
|
|
|