Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?php
- /**
- * Набор методов для запроса к API uCoz
- * @author Sergey Driver86 Pugovkin <[email protected]> – разработчик методов для запроса (php версия)
- * @author Dmitry Kiselev <[email protected]> – модификация и адаптация под 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;
- }
- }
Add Comment
Please, Sign In to add comment