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; }