diff --git a/application/models/data/DataService.php b/application/models/data/DataService.php index 38eba429..37ea50d5 100644 --- a/application/models/data/DataService.php +++ b/application/models/data/DataService.php @@ -28,8 +28,55 @@ class DataService function get($uuid) { - $sql = "SELECT * FROM ".$this->tbl_dataservice." WHERE uuid='$uuid' LIMIT 1 START 0"; + $sql = "SELECT * FROM ".$this->tbl_dataservice." WHERE uuid='$uuid' LIMIT 1"; $rs = $this->db->query($sql); return $rs->fetch(); } -} + + public function getWsnData($type,$uuid = "",$param = ""){ + include_once("helper/view.php"); + + $dataservice = new \data\DataService(); + $info = $dataservice->get($uuid); + + $curl = new \helper\Curl(); + + if($type == 'site') + { + $param = array( + //'uuid'=>$uuid, + 'uuid'=>'78e2423f-fe4a-4f9e-a368-c932afc5d257', ///TEST TEST TEST + 'uid'=>\view::User('id') + ); + $data = $curl->request($info['service_url']."site/",$param,"POST"); + $data = json_decode($data['response'],TRUE); + }//site + + if($type == 'var') + { + $param_temp = array( + //'uuid'=>$uuid, + 'uuid'=>'78e2423f-fe4a-4f9e-a368-c932afc5d257', ///TEST TEST TEST + 'uid'=>\view::User('id'), + ); + $param = array_merge($param,$param_temp); + $data = $curl->request($info['service_url']."var/",$param,"POST"); + $data = json_decode($data['response'],TRUE); + } + + if($data['status'] == 0) + { + return $data['error']; + } + + else if($data['status'] == 1) + { + return $data['data']; + } + + else + { + return NULL; + } + }//获取Wsn数据 +} \ No newline at end of file diff --git a/application/models/helper/Curl.php b/application/models/helper/Curl.php new file mode 100644 index 00000000..5bb00def --- /dev/null +++ b/application/models/helper/Curl.php @@ -0,0 +1,144 @@ +options = array_merge(array( + 'debug' => false, + 'http_port' => '80', + 'user_agent' => 'Westdc DataService', + 'timeout' => 20, + 'curlopts' => null, + 'verifyssl' => true, + ), $options); + } + + /** + * Send a request to the server, receive a response + * + * @param string $apiPath Request API path + * @param array $parameters Parameters + * @param string $httpMethod HTTP method to use + * + * @return string HTTP response + */ + public function request($url, array $parameters = array(), $httpMethod = 'GET', array $options = array()) + { + $options = array_merge($this->options, $options); + + $curlOptions = array(); + $headers = array(); + + if ('POST' === $httpMethod) { + $curlOptions += array( + CURLOPT_POST => true, + ); + } + elseif ('PUT' === $httpMethod) { + $curlOptions += array( + CURLOPT_POST => true, // This is so cURL doesn't strip CURLOPT_POSTFIELDS + CURLOPT_CUSTOMREQUEST => 'PUT', + ); + } + elseif ('DELETE' === $httpMethod) { + $curlOptions += array( + CURLOPT_CUSTOMREQUEST => 'DELETE', + ); + } + + if (!empty($parameters)) + { + if('GET' === $httpMethod) + { + $queryString = utf8_encode($this->buildQuery($parameters)); + $url .= '?' . $queryString; + } elseif ('POST' === $httpMethod) { + $curlOptions += array( + CURLOPT_POSTFIELDS => is_array($parameters) ? http_build_query($parameters) : $parameters, + ); + } else { + $curlOptions += array( + CURLOPT_POSTFIELDS => json_encode($parameters) + ); + $headers[] = 'Content-Type: application/json'; + } + } else { + $headers[] = 'Content-Length: 0'; + } + + $this->debug('send '.$httpMethod.' request: '.$url); + + $curlOptions += array( + CURLOPT_URL => $url, + CURLOPT_PORT => $options['http_port'], + CURLOPT_USERAGENT => $options['user_agent'], + CURLOPT_RETURNTRANSFER => true, + CURLOPT_TIMEOUT => $options['timeout'], + CURLOPT_HTTPHEADER => $headers, + CURLOPT_SSL_VERIFYPEER => $options['verifyssl'], + ); + + if (ini_get('open_basedir') == '' && ini_get('safe_mode') != 'On') { + $curlOptions[CURLOPT_FOLLOWLOCATION] = true; + } + + if (is_array($options['curlopts'])) { + $curlOptions += $options['curlopts']; + } + + if (isset($options['proxy'])) { + $curlOptions[CURLOPT_PROXY] = $options['proxy']; + } + + $response = $this->doCurlCall($curlOptions); + + return $response; + } + + /** + * Get a JSON response and transform it to a PHP array + * + * @return array the response + */ + protected function decodeResponse($response) + { + // "false" means a failed curl request + if (false === $response['response']) { + $this->debug(print_r($response, true)); + return false; + } + return parent::decodeResponse($response); + } + + protected function doCurlCall(array $curlOptions) + { + $curl = curl_init(); + + curl_setopt_array($curl, $curlOptions); + + $response = curl_exec($curl); + $headers = curl_getinfo($curl); + $errorNumber = curl_errno($curl); + $errorMessage = curl_error($curl); + + curl_close($curl); + + return compact('response', 'headers', 'errorNumber', 'errorMessage'); + } + + protected function buildQuery($parameters) + { + return http_build_query($parameters, '', '&'); + } + + protected function debug($message) + { + if($this->options['debug']) + { + print $message."\n"; + } + } +}