Exemple #1
0
 /**
  * @param $url
  * @param string $action 取值为update等,与请求URL中名称一致,用于选择错误结果数据模板
  * @param $dataXml string 请求体
  * @return array|mixed
  */
 private function doRequest($url, $action, $dataXml = null)
 {
     // APF_DebuggerInterceptor根据请求参数debug决定是否设置debugger
     // debug=0清除cookie,关闭调试模式;debug>0设置cookie,开启调试模式
     APF::get_instance()->debug(get_class($this) . '->Call: ' . $url);
     $curlClient = new APF_Http_Client_Curl();
     $curlClient->set_url($url);
     if ($dataXml != null) {
         $curlClient->set_attribute(CURLOPT_POSTFIELDS, $dataXml);
         $curlClient->set_attribute(CURLOPT_POST, true);
     }
     $userAgent = $this->getUserAgent();
     $curlClient->set_attribute(CURLOPT_USERAGENT, $userAgent);
     $curlClient->set_attribute(CURLOPT_NOSIGNAL, 1);
     $curlClient->set_attribute(CURLOPT_CONNECTTIMEOUT_MS, $this->connectTimeout);
     $curlClient->set_attribute(CURLOPT_TIMEOUT_MS, $this->readTimeout);
     if ($curlClient->execute()) {
         $responseText = json_decode($curlClient->get_response_text(), true);
         return $responseText;
     } else {
         $errno = $curlClient->get_curl_errno();
         if ($errno == 0) {
             // curl执行没有错误,但是响应不正常
             $curlInfo = $curlClient->get_curl_info();
             $responseDecoded = json_decode($curlClient->get_response_text(), true);
             if (is_null($responseDecoded)) {
                 switch ($action) {
                     case "select":
                         $result = $this->getSelectErrorRespTemplate();
                         break;
                     case "update":
                         $result = $this->getUpdateErrorRespTemplate();
                         break;
                 }
                 $result['responseHeader']['status'] = $curlInfo['http_code'];
                 $result['error']['code'] = $curlInfo['http_code'];
                 $result['error']['msg'] = $curlClient->get_response_text();
                 return $result;
             } else {
                 $responseDecoded['params'] = $this->systemParams;
                 return $responseDecoded;
             }
         } else {
             // curl执行出错
             switch ($action) {
                 case "select":
                     $result = $this->getSelectErrorRespTemplate();
                     break;
                 case "update":
                     $result = $this->getUpdateErrorRespTemplate();
                     break;
             }
             $result['error']['code'] = $errno;
             $result['error']['msg'] = $curlClient->get_curl_error();
             return $result;
         }
     }
 }