3v4l.org

run code in 200+ php & hhvm versions
Bugs & Features
<?php /** * Набор методов для запроса к API uCoz. Версия для uCoz PHP сервера * @author Sergey Driver86 Pugovkin <sergey@pugovk.in> – разработчик методов для запроса (php версия) * @author Dmitry Kiselev <api@ucoz.net> – модификация и адаптация под uAPI + images. api.ucoz.net * @version 2.2 от 15 августа 2016 – fixed POST for category */ /** Ссылка на ваш сайт в юкозе, для обращения к uAPI Обратите внимание, что нужно вводить с / на конце. Если у сайта есть прикрепленный домен – необходимо указывать его. Если же сайт доступен по wwww – сайт необходимо указывать вместе с www. Например: http://www.mywebsite.ucoz.ru/ или http://www.mywebsite.com/ */ $myWebsite = 'https://utemplate.pro/'; /** Закончили формировать ссылку */ 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_FOLLOWLOCATION, 1); 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_FOLLOWLOCATION, 1); curl_setopt($curl, CURLOPT_URL, $url . '?' . $forcurlpost); 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_FOLLOWLOCATION, 1); 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_FOLLOWLOCATION, 1); 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; } } // ============================================================== // до сюда нельзя удалять error_reporting(E_ERROR) ; /** * Набор методов для запроса к API uCoz * @author Dmitry Kiselev <api@ucoz.net> – Демонстрация обращения к uAPImodule.php * @version 2.0 от 24 марта 2016 */ $request = new Request(array( 'oauth_consumer_key' => 'edl92g42SHm84bnRbZDW', 'oauth_consumer_secret' => 'wUClCAtSsjvCDs6nDR46zOYItvjKwn', 'oauth_token' => 'A9PL.uc1uujmmzFXmf13Gbeyx2BT1AEiVLiiOkLz', 'oauth_token_secret' => 'CWDmh4QfXOqzIXoEVfpPV9EUoSlEKjNEldItCgiD' )); // Используем // phpinfo(32); $x = '0'; $response = $request->get('/shop/invoices/', array( 'page' => 0, 'id' => '49938,49937,49936,49935,49934,49933,49932,49931,49918,49915,49905,49904,49893,49867,49866,49865,49864,49861,49853,49852,49846,49845,49842,49833,49832,49831,49815,49814,49813,49801,49800,49799,49798,49797,49796,49795,49769,49768,49767,49766,49759,49744,49737,49736,49735,49720,49719,49718,49717,49716,49715,49687,49686,49675,49674,49673,49672,49660,49659,49658,49657,49652,49645,49644,49643,49642,49633,49632,49619,49618,49617,49616,49600,49599,49598,49586,49585,49583,49580,49576,49575,49574,49559,49555,49554,49553,49552,49551,49550,49549,49548,49547,49546,49545,49544,49543,49542,49541,49540,49539,49538,49536,49535,49534,49533' )); $response = json_decode($response, true); //echo '<pre>'; //print_r($response); //echo '</pre>'; while ($x<21) //2090 { $response2 = $request->get('/shop/order/', array( 'order' => $response['success']['orders'][$x]['order_hash'] )); $response2 = json_decode($response2, true); // $response = $request->get('/shop/invoices/', array( // 'page' => $x, // 'id' => '40359,40360,40361,40366,40367,40368,40369,40394,40395,40396,40399,40400,40401,40402,40403,40406,40412,40413,40414,40415,40416,40432,40433,40434,40435,40448,40449,40453,40454,40455,40465,40466,40467,40471,40472,40473,40474,40475,40476,40483,40484,40485,40486,40487,40509,40510,40511,40535,40536,40537,40538,40539,40577,40578,40579,40581,40582,40583,40605,40606,40607,40608,40609,40610,40625,40626,40627,40646,40647,40648,40649,40650,40662,40663,40664,40665,40666,40667,40690,40691,40693,40694,40707,40708,40709,40710,40711,40712,40713,40714,40715,40727,40728,40729,40730,40731,40732,40744,40747,40748,40759,40760,40761,40768,40769,40782,40785,40786,40787,40806,40821,40822,40823,40826,40827,40855,40858,40859,40860,40861,40862,40863,40878,40879,40882,40883,40884,40885,40886,40891,40893,40911,40912,40913,40914,40915,40916,40928,40929,40930,40931,40963,40964,40965,40966,40967,40968,40969,40974,40975,40976' // )); // echo '<pre>'; // print_r(json_decode($response, true)); // echo '</pre>'; // нам нужны profit, id, // echo '<br />'.$response['success']['orders'][$page]['order_hash'].'<br />'; // echo '<pre>'; // print_r(json_decode($response2, true)); // echo '</pre>'; $goods_id = $response2['success']['order_digital_goods']['goods'][0]['id']; $name = $response2['success']['order_goods']['goods'][$goods_id]['added_user']; $price = $response2['success']['order_goods']['goods'][$goods_id]['price']['price_raw']; $num = $response2['success']['order_nom']; $howmusch = '0'; echo ' <table> <tr> <td>'.$num.'</td> <td>'.$name.'</td> <td>'.$price.'</td> </tr> </table> '; $x++; } ?>
Output for 7.0.0 - 7.2.6
Fatal error: Uncaught Error: Call to undefined function curl_init() in /in/J4o3X:81 Stack trace: #0 /in/J4o3X(297): Request->get('https://utempla...', Array) #1 {main} thrown in /in/J4o3X on line 81
Process exited with code 255.
Output for hhvm-3.15.4
<table> <tr> <td></td> <td></td> <td></td> </tr> </table> <table> <tr> <td></td> <td></td> <td></td> </tr> </table> <table> <tr> <td></td> <td></td> <td></td> </tr> </table> <table> <tr> <td></td> <td></td> <td></td> </tr> </table> <table> <tr> <td></td> <td></td> <td></td> </tr> </table> <table> <tr> <td></td> <td></td> <td></td> </tr> </table> <table> <tr> <td></td> <td></td> <td></td> </tr> </table> <table> <tr> <td></td> <td></td> <td></td> </tr> </table> <table> <tr> <td></td> <td></td> <td></td> </tr> </table> <table> <tr> <td></td> <td></td> <td></td> </tr> </table> <table> <tr> <td></td> <td></td> <td></td> </tr> </table> <table> <tr> <td></td> <td></td> <td></td> </tr> </table> <table> <tr> <td></td> <td></td> <td></td> </tr> </table> <table> <tr> <td></td> <td></td> <td></td> </tr> </table> <table> <tr> <td></td> <td></td> <td></td> </tr> </table> <table> <tr> <td></td> <td></td> <td></td> </tr> </table> <table> <tr> <td></td> <td></td> <td></td> </tr> </table> <table> <tr> <td></td> <td></td> <td></td> </tr> </table> <table> <tr> <td></td> <td></td> <td></td> </tr> </table> <table> <tr> <td></td> <td></td> <td></td> </tr> </table> <table> <tr> <td></td> <td></td> <td></td> </tr> </table>
Output for 5.6.0 - 5.6.30
Fatal error: Call to undefined function curl_init() in /in/J4o3X on line 81
Process exited with code 255.