ennio21

uapi ucoz

Apr 2nd, 2016
156
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 10.37 KB | None | 0 0
  1. <?php
  2. /**
  3.  * Набор методов для запроса к API uCoz
  4.  * @author Sergey Driver86 Pugovkin <[email protected]> – разработчик методов для запроса (php версия)
  5.  * @author Dmitry Kiselev <[email protected]> – модификация и адаптация под uAPI + images. api.ucoz.net
  6.  * @version 2.0 от 24 марта 2016
  7.  */
  8.  
  9.  
  10. /**
  11. Ссылка на ваш сайт в юкозе, для обращения к uAPI
  12. Обратите внимание, что нужно вводить с / на конце.
  13. Если у сайта есть прикрепленный домен – необходимо указывать его.
  14. Если же сайт доступен по wwww – сайт необходимо указывать вместе с www. Например: http://www.mywebsite.ucoz.ru/ или http://www.mywebsite.com/
  15. */
  16. $myWebsite = 'http://ucoz.ucoz.ru/';
  17. /**
  18. Закончили формировать ссылку
  19. */
  20.  
  21. class Request {
  22.     /**
  23.      * Настройки
  24.      * @var array
  25.      */
  26.     public $config;
  27.     /**
  28.      * Обязательные параметры, передаваемые через URL при запросе к API
  29.      * @var array
  30.      */
  31.     private $params;
  32.     /**
  33.      * Конструктор класса
  34.      * @param array $config Настройки
  35.      */
  36.     function __construct($config = array()) {
  37.         $this->config = $config;
  38.         $this->params = array(
  39.             'oauth_version' =>  '1.0',
  40.             'oauth_timestamp' => time(),
  41.             'oauth_nonce' => md5(microtime() . mt_rand()),
  42.             'oauth_signature_method' => 'HMAC-SHA1',
  43.             'oauth_consumer_key' => $this->config['oauth_consumer_key'],
  44.             'oauth_token' => $this->config['oauth_token'],
  45.         );
  46.     }
  47.  
  48.     /**
  49.      * Создание подписи запроса
  50.      * @param string $method    Метод запроса, например GET
  51.      * @param string $url       URL запроса, например /blog
  52.      * @param string $params    Все параметры, передаваемые через URL при запросе к API
  53.      * @return string
  54.      */
  55.     private function getSignature($method, $url, $params) {
  56.         ksort($params);
  57.         $baseString = strtoupper($method) . '&' . urlencode($url) . '&' . urlencode(strtr(http_build_query($params), array ('+' => '%20')));
  58.         return urlencode(base64_encode(hash_hmac('sha1', $baseString, $this->config['oauth_consumer_secret'] . '&' . $this->config['oauth_token_secret'], true)));
  59.     }
  60.  
  61.     /**
  62.      * Возвращает базовое имя файла для использования в подписи запроса
  63.      * @param array $match  Совпадения при поиске по регулярному выражению preg_replace_callback
  64.      * @return string
  65.      */
  66.     private function getBaseName($match) {
  67.         return basename($match[1]);
  68.     }
  69.  
  70.     /**
  71.      * Запрос к API методом GET
  72.      * @param string $url   URL запроса, например /blog
  73.      * @param array $data   Массив данных
  74.      * @return array
  75.      */
  76.     public function get($url, $data = array()) {
  77.         global $myWebsite;
  78.         $this->params['oauth_nonce'] = md5(microtime() . mt_rand());
  79.         $url = $myWebsite.'uapi' . trim(strtolower($url), '').'';
  80.         $queryString = http_build_query($this->params + $data + array('oauth_signature' => $this->getSignature('GET', $url, $this->params + $data)));
  81.         $curl = curl_init();
  82.         curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
  83.         curl_setopt($curl, CURLOPT_URL, $url . '?' . $queryString);
  84.         $result = curl_exec($curl);
  85.         curl_close($curl);
  86.         return $result;
  87.     }
  88.  
  89.     /**
  90.      * Запрос к API методом POST
  91.      * @param string $url   URL запроса, например /blog
  92.      * @param array $data   Массив данных
  93.      * @return array
  94.      */
  95.     public function post($url, $data) {
  96.         global $myWebsite;
  97.         $this->params['oauth_nonce'] = md5(microtime() . mt_rand());
  98.  
  99.         /**
  100.         Делаем так, чтобы изображения при отправке отправлялись,
  101.         а не валились в инвалид сигнутаре
  102.         */
  103.         $x=1;
  104.         while ($x<50) {
  105.             if(empty($data['file'.$x])) break;
  106.                 $getfile1others = basename($data['file'.$x]);
  107.                 $findme = '@';
  108.                 $pos = strpos($getfile1others, $findme);
  109.                 if ($pos === false) {
  110.                 $getfile1shop_array = array(
  111.                 'file'.$x => '@'.$getfile1others
  112.                  );
  113.                 } else {
  114.                 $getfile1shop_array = array(
  115.                 'file'.$x => ''.$getfile1others
  116.                  );
  117.                 }
  118.         unset($data['file'.$x]);
  119.         $data = array_merge($getfile1shop_array, $data);
  120.         $x++;
  121.         }  
  122.  
  123.  
  124.  
  125.  
  126.         if(!empty($data['file_add_cnt']))  {
  127.             $allcountfilesshop = $data['file_add_cnt'];
  128.         }  
  129.  
  130.         if ($url == '/shop/editgoods') {
  131.  
  132.         $i= $allcountfilesshop;
  133.         while ($i<50) {
  134.             if(empty($data['file_add_'.$i]) && $data['file_add_'.$i] != 'file_add_cnt') break;
  135.                 $getfile1shop = basename($data['file_add_'.$i]);
  136.                 $findme = '@';
  137.                 $pos = strpos($getfile1shop, $findme);
  138.                 if ($pos === false) {
  139.                 $getfile1shop_array = array(
  140.                 'file_add_'.$i => '@'.$getfile1shop
  141.                  );
  142.                 } else {
  143.                 $getfile1shop_array = array(
  144.                 'file_add_'.$i => ''.$getfile1shop
  145.                  );
  146.                 }
  147.         unset($data['file_add_'.$i]);
  148.         $data = array_merge($getfile1shop_array, $data);
  149.         $i++;
  150.         }  
  151.  
  152.         }
  153.  
  154.         $url = $myWebsite.'uapi' . trim(strtolower($url), '').'/';
  155.         $sign = array('oauth_signature' => $this->getSignature('POST', $url, $this->params + preg_replace_callback('/^@(.+)$/', array($this, 'getBaseName'), $data)));
  156.         $queryString = http_build_query($sign);
  157.         $curl = curl_init();
  158.         curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
  159.         curl_setopt($curl, CURLOPT_URL, $url . '?' . $queryString);
  160.         curl_setopt($curl, CURLOPT_POST, true);
  161.         $forcurlpost = array_merge($this->params + $data, $sign);
  162.         curl_setopt($curl, CURLOPT_POSTFIELDS, $forcurlpost);
  163.         $result = curl_exec($curl);
  164.         curl_close($curl);
  165.         return $result;
  166.     }
  167.  
  168.     /**
  169.      * Запрос к API методом PUT
  170.      * @param string $url   URL запроса, например /blog
  171.      * @param array $data   Массив данных
  172.      * @return array
  173.      */
  174.     public function put($url, $data) {
  175.         global $myWebsite;
  176.         $this->params['oauth_nonce'] = md5(microtime() . mt_rand());
  177.  
  178.  /**
  179.         Делаем так, чтобы изображения при отправке отправлялись,
  180.         а не валились в инвалид сигнутаре
  181.         */
  182.         $x=1;
  183.         while ($x<50) {
  184.             if(empty($data['file'.$x])) break;
  185.                 $getfile1others = basename($data['file'.$x]);
  186.                 $findme = '@';
  187.                 $pos = strpos($getfile1others, $findme);
  188.                 if ($pos === false) {
  189.                 $getfile1shop_array = array(
  190.                 'file'.$x => '@'.$getfile1others
  191.                  );
  192.                 } else {
  193.                 $getfile1shop_array = array(
  194.                 'file'.$x => ''.$getfile1others
  195.                  );
  196.                 }
  197.         unset($data['file'.$x]);
  198.         $data = array_merge($getfile1shop_array, $data);
  199.         $x++;
  200.         }  
  201.  
  202.  
  203.  
  204.  
  205.         if(!empty($data['file_add_cnt']))  {
  206.             $allcountfilesshop = $data['file_add_cnt'];
  207.         }  
  208.  
  209.         if ($url == '/shop/editgoods') {
  210.  
  211.         $i= $allcountfilesshop;
  212.         while ($i<50) {
  213.             if(empty($data['file_add_'.$i]) && $data['file_add_'.$i] != 'file_add_cnt') break;
  214.                 $getfile1shop = basename($data['file_add_'.$i]);
  215.                 $findme = '@';
  216.                 $pos = strpos($getfile1shop, $findme);
  217.                 if ($pos === false) {
  218.                 $getfile1shop_array = array(
  219.                 'file_add_'.$i => '@'.$getfile1shop
  220.                  );
  221.                 } else {
  222.                 $getfile1shop_array = array(
  223.                 'file_add_'.$i => ''.$getfile1shop
  224.                  );
  225.                 }
  226.         unset($data['file_add_'.$i]);
  227.         $data = array_merge($getfile1shop_array, $data);
  228.         $i++;
  229.         }  
  230.  
  231.         }
  232.  
  233.         $url = $myWebsite.'uapi' . trim(strtolower($url), '').'/';
  234.         $sign = array('oauth_signature' => $this->getSignature('PUT', $url, $this->params + preg_replace_callback('/^@(.+)$/', array($this, 'getBaseName'), $data)));
  235.         $queryString = http_build_query($sign);
  236.         $curl = curl_init();
  237.         curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
  238.         curl_setopt($curl, CURLOPT_URL, $url . '?' . $queryString);
  239.         curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'PUT');
  240.         $forcurlpost = array_merge($this->params + $data, $sign);
  241.         curl_setopt($curl, CURLOPT_POSTFIELDS, $forcurlpost);
  242.         $result = curl_exec($curl);
  243.         curl_close($curl);
  244.         return $result;
  245.     }
  246.  
  247.     /**
  248.      * Запрос к API методом DELETE
  249.      * @param string $url   URL запроса, например /blog
  250.      * @param array $data   Массив данных
  251.      * @return array
  252.      */
  253.     public function delete($url, $data) {
  254.         global $myWebsite;
  255.         $this->params['oauth_nonce'] = md5(microtime() . mt_rand());
  256.         $url = $myWebsite.'uapi' . trim(strtolower($url), '').'/';
  257.         $queryString = http_build_query($this->params + $data + array('oauth_signature' => $this->getSignature('DELETE', $url, $this->params + $data)));
  258.         $curl = curl_init();
  259.         curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
  260.         curl_setopt($curl, CURLOPT_URL, $url . '?' . $queryString);
  261.         curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'DELETE');
  262.         $result = json_decode(curl_exec($curl), true);
  263.         curl_close($curl);
  264.         return $result;
  265.     }
  266. }
Add Comment
Please, Sign In to add comment