Skip to content

Instantly share code, notes, and snippets.

@Big-Shark
Created April 26, 2016 02:34
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Big-Shark/ea8d381a7151d0a94c7e2a191e5ccf9a to your computer and use it in GitHub Desktop.
Save Big-Shark/ea8d381a7151d0a94c7e2a191e5ccf9a to your computer and use it in GitHub Desktop.
ucoz
<?php
/**
* Набор методов для запроса к API uCoz
* @author Sergey Driver86 Pugovkin <sergey@pugovk.in> – разработчик методов для запроса (php версия)
* @author Dmitry Kiselev <api@ucoz.net> – модификация и адаптация под uAPI + images. api.ucoz.net
* @version 2.0 от 24 марта 2016
*/
/**
Ссылка на ваш сайт в юкозе, для обращения к uAPI
Обратите внимание, что нужно вводить с / на конце.
Если у сайта есть прикрепленный домен – необходимо указывать его.
Если же сайт доступен по wwww – сайт необходимо указывать вместе с www. Например: http://www.mywebsite.ucoz.ru/ или http://www.mywebsite.com/
*/
$myWebsite = 'http://ucoz.ucoz.ru/';
/**
Закончили формировать ссылку
*/
class Request {
/**
* Настройки
* @var array
*/
public $config;
/**
* Обязательные параметры, передаваемые через URL при запросе к API
* @var array
*/
private $params;
/**
* Конструктор класса
* @param array $config Настройки
*/
function __construct($config = array()) {
$this->config = $config;
$this->params = array(
'oauth_version' => '1.0',
'oauth_timestamp' => time(),
'oauth_nonce' => md5(microtime() . mt_rand()),
'oauth_signature_method' => 'HMAC-SHA1',
'oauth_consumer_key' => $this->config['oauth_consumer_key'],
'oauth_token' => $this->config['oauth_token'],
);
}
/**
* Создание подписи запроса
* @param string $method Метод запроса, например GET
* @param string $url URL запроса, например /blog
* @param string $params Все параметры, передаваемые через URL при запросе к API
* @return string
*/
private function getSignature($method, $url, $params) {
ksort($params);
$baseString = strtoupper($method) . '&' . urlencode($url) . '&' . urlencode(strtr(http_build_query($params), array ('+' => '%20')));
return urlencode(base64_encode(hash_hmac('sha1', $baseString, $this->config['oauth_consumer_secret'] . '&' . $this->config['oauth_token_secret'], true)));
}
/**
* Возвращает базовое имя файла для использования в подписи запроса
* @param array $match Совпадения при поиске по регулярному выражению preg_replace_callback
* @return string
*/
private function getBaseName($match) {
return basename($match[1]);
}
/**
* Запрос к API методом GET
* @param string $url URL запроса, например /blog
* @param array $data Массив данных
* @return array
*/
public function get($url, $data = array()) {
global $myWebsite;
$this->params['oauth_nonce'] = md5(microtime() . mt_rand());
$url = $myWebsite.'uapi' . trim(strtolower($url), '').'';
$queryString = http_build_query($this->params + $data + array('oauth_signature' => $this->getSignature('GET', $url, $this->params + $data)));
$curl = curl_init();
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_URL, $url . '?' . $queryString);
$result = curl_exec($curl);
curl_close($curl);
return $result;
}
/**
* Запрос к API методом POST
* @param string $url URL запроса, например /blog
* @param array $data Массив данных
* @return array
*/
public function post($url, $data) {
global $myWebsite;
$this->params['oauth_nonce'] = md5(microtime() . mt_rand());
/**
Делаем так, чтобы изображения при отправке отправлялись,
а не валились в инвалид сигнутаре
*/
$x=1;
while ($x<50) {
if(empty($data['file'.$x])) break;
$getfile1others = basename($data['file'.$x]);
$findme = '@';
$pos = strpos($getfile1others, $findme);
if ($pos === false) {
$getfile1shop_array = array(
'file'.$x => '@'.$getfile1others
);
} else {
$getfile1shop_array = array(
'file'.$x => ''.$getfile1others
);
}
unset($data['file'.$x]);
$data = array_merge($getfile1shop_array, $data);
$x++;
}
if(!empty($data['file_add_cnt'])) {
$allcountfilesshop = $data['file_add_cnt'];
}
if ($url == '/shop/editgoods') {
$i= $allcountfilesshop;
while ($i<50) {
if(empty($data['file_add_'.$i]) && $data['file_add_'.$i] != 'file_add_cnt') break;
$getfile1shop = basename($data['file_add_'.$i]);
$findme = '@';
$pos = strpos($getfile1shop, $findme);
if ($pos === false) {
$getfile1shop_array = array(
'file_add_'.$i => '@'.$getfile1shop
);
} else {
$getfile1shop_array = array(
'file_add_'.$i => ''.$getfile1shop
);
}
unset($data['file_add_'.$i]);
$data = array_merge($getfile1shop_array, $data);
$i++;
}
}
$url = $myWebsite.'uapi' . trim(strtolower($url), '').'/';
$sign = array('oauth_signature' => $this->getSignature('POST', $url, $this->params + preg_replace_callback('/^@(.+)$/', array($this, 'getBaseName'), $data)));
$queryString = http_build_query($sign);
$curl = curl_init();
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_URL, $url . '?' . $queryString);
curl_setopt($curl, CURLOPT_POST, true);
$forcurlpost = array_merge($this->params + $data, $sign);
curl_setopt($curl, CURLOPT_POSTFIELDS, $forcurlpost);
$result = curl_exec($curl);
curl_close($curl);
return $result;
}
/**
* Запрос к API методом PUT
* @param string $url URL запроса, например /blog
* @param array $data Массив данных
* @return array
*/
public function put($url, $data) {
global $myWebsite;
$this->params['oauth_nonce'] = md5(microtime() . mt_rand());
/**
Делаем так, чтобы изображения при отправке отправлялись,
а не валились в инвалид сигнутаре
*/
$x=1;
while ($x<50) {
if(empty($data['file'.$x])) break;
$getfile1others = basename($data['file'.$x]);
$findme = '@';
$pos = strpos($getfile1others, $findme);
if ($pos === false) {
$getfile1shop_array = array(
'file'.$x => '@'.$getfile1others
);
} else {
$getfile1shop_array = array(
'file'.$x => ''.$getfile1others
);
}
unset($data['file'.$x]);
$data = array_merge($getfile1shop_array, $data);
$x++;
}
if(!empty($data['file_add_cnt'])) {
$allcountfilesshop = $data['file_add_cnt'];
}
if ($url == '/shop/editgoods') {
$i= $allcountfilesshop;
while ($i<50) {
if(empty($data['file_add_'.$i]) && $data['file_add_'.$i] != 'file_add_cnt') break;
$getfile1shop = basename($data['file_add_'.$i]);
$findme = '@';
$pos = strpos($getfile1shop, $findme);
if ($pos === false) {
$getfile1shop_array = array(
'file_add_'.$i => '@'.$getfile1shop
);
} else {
$getfile1shop_array = array(
'file_add_'.$i => ''.$getfile1shop
);
}
unset($data['file_add_'.$i]);
$data = array_merge($getfile1shop_array, $data);
$i++;
}
}
$url = $myWebsite.'uapi' . trim(strtolower($url), '').'/';
$sign = array('oauth_signature' => $this->getSignature('PUT', $url, $this->params + preg_replace_callback('/^@(.+)$/', array($this, 'getBaseName'), $data)));
$queryString = http_build_query($sign);
$curl = curl_init();
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_URL, $url . '?' . $queryString);
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'PUT');
$forcurlpost = array_merge($this->params + $data, $sign);
curl_setopt($curl, CURLOPT_POSTFIELDS, $forcurlpost);
$result = curl_exec($curl);
curl_close($curl);
return $result;
}
/**
* Запрос к API методом DELETE
* @param string $url URL запроса, например /blog
* @param array $data Массив данных
* @return array
*/
public function delete($url, $data) {
global $myWebsite;
$this->params['oauth_nonce'] = md5(microtime() . mt_rand());
$url = $myWebsite.'uapi' . trim(strtolower($url), '').'/';
$queryString = http_build_query($this->params + $data + array('oauth_signature' => $this->getSignature('DELETE', $url, $this->params + $data)));
$curl = curl_init();
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_URL, $url . '?' . $queryString);
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'DELETE');
$result = json_decode(curl_exec($curl), true);
curl_close($curl);
return $result;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment