Exemplo n.º 1
0
 protected function request($insMethod, $insUrl, $inaHeaders, $inaData = array(), $insCredentials = '')
 {
     $oCurl = curl_init();
     switch ($insMethod) {
         case self::METHOD_GET:
             if (count($inaData) > 0) {
                 $aUrlData = array();
                 foreach ($inaData as $sKey => $sValue) {
                     $aUrlData[] = $sKey . '=' . $sValue;
                 }
                 $insUrl .= '?' . implode('&', $aUrlData);
             }
             break;
         case self::METHOD_POST:
             curl_setopt($oCurl, CURLOPT_POST, 1);
             curl_setopt($oCurl, CURLOPT_POSTFIELDS, $inaData);
             break;
         case self::METHOD_PUT:
             curl_setopt($oCurl, CURLOPT_CUSTOMREQUEST, 'PUT');
             curl_setopt($oCurl, CURLOPT_POSTFIELDS, $inaData);
             break;
         case self::METHOD_DELETE:
             curl_setopt($oCurl, CURLOPT_CUSTOMREQUEST, 'DELETE');
             break;
         default:
             throw new Exception('Invalid REST request method.');
     }
     curl_setopt($oCurl, CURLOPT_URL, $insUrl);
     curl_setopt($oCurl, CURLOPT_RETURNTRANSFER, 1);
     curl_setopt($oCurl, CURLOPT_TIMEOUT, 60);
     curl_setopt($oCurl, CURLOPT_HTTPHEADER, $inaHeaders);
     curl_setopt($oCurl, CURLOPT_FOLLOWLOCATION, false);
     curl_setopt($oCurl, CURLOPT_FRESH_CONNECT, true);
     curl_setopt($oCurl, CURLOPT_USERAGENT, 'PHP FreeAgentCentral API');
     curl_setopt($oCurl, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
     curl_setopt($oCurl, CURLOPT_USERPWD, $insCredentials);
     curl_setopt($oCurl, CURLOPT_HEADER, TRUE);
     // A little hack to get by the "SSL certificate problem, verify that the CA cert is OK" error.
     curl_setopt($oCurl, CURLOPT_SSL_VERIFYHOST, 0);
     curl_setopt($oCurl, CURLOPT_SSL_VERIFYPEER, 0);
     $sContent = curl_exec($oCurl);
     $nErrorCode = curl_errno($oCurl);
     $sError = curl_error($oCurl);
     $aInfo = curl_getinfo($oCurl);
     curl_close($oCurl);
     if ($nErrorCode) {
         $sHeaders = '';
         $sBody = '';
     } else {
         list($sHeaders, $sBody) = explode("\r\n\r\n", $sContent, 2);
         $sBody = trim($sBody);
     }
     $oXml = @simplexml_load_string(trim($sBody));
     $aXmlAsArray = array();
     if ($oXml !== false) {
         $aXmlAsArray = ApiHelper::objectToArray($oXml);
         foreach ($aXmlAsArray as $sKey => $mValue) {
             if (isset($mValue['id'])) {
                 $aXmlAsArray[$sKey] = array($mValue);
             }
         }
     }
     $aReturn = array('headers' => ApiHelper::formatHeaders($sHeaders), 'body' => $sBody, 'array' => $aXmlAsArray, 'error' => $sError, 'errno' => $nErrorCode, 'info' => $aInfo, 'status_code' => $aInfo['http_code'], 'success' => $aInfo['http_code'] === 200 || $aInfo['http_code'] === 201 && in_array($insMethod, array(self::METHOD_POST, self::METHOD_PUT)));
     $oResponse = new BasicResponseObject($aReturn);
     return $oResponse;
 }