host = $host; $this->port = $port; $this->version = $version; $this->debug = $debug; } /** * 请求核心方法 * @param $method 回调方法名 * @param $params 参数数组 * @return array 返回结果数组 */ public function request($method, $params=array()) { // 检验request信息 if (!is_scalar($method)) { throw new \think\Exception('Method name has no scalar value'); } if (is_array($params)) { $params = array_values($params); } else { throw new \think\Exception('Params must be given as array'); } // 封装请求数据 $request = json_encode(array( 'jsonrpc' => $this->version, 'method' => $method, 'params' => $params, 'id' => $this->id++ )); // 是否是debug模式 $this->debug && $this->debug.='***** Request *****'."\n".$request."\n".'***** End Of request *****'."\n\n"; // curl请求 $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $this->host); curl_setopt($ch, CURLOPT_PORT, $this->port); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json')); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, $request); $ret = curl_exec($ch); // 输出调试信息 if ($this->debug) { echo nl2br(($this->debug)); } if ($ret !== false) { $response = json_decode($ret); if (isset($response->error)) { //throw new RPCException($formatted->error->message, $formatted->error->code); throw new \think\Exception('Request error: '.$response->error); } else { return $response; } } else { throw new \think\Exception("Server did not respond: ".$this->host.':'.$this->port); } } }