/** * Send a POST request to SagePay and return the response as an array. * * @param string $url The url to POST to. * @param array $data The data to post. * @param int $ttl cURL time of execution * @param string $caCertPath path to SSL certificate * * @return array The response from Sage Pay. */ public static function requestPost($url, $data, $ttl = 30, $caCertPath = '') { set_time_limit(60); $output = array(); $curlSession = curl_init(); curl_setopt($curlSession, CURLOPT_URL, $url); curl_setopt($curlSession, CURLOPT_HEADER, 0); curl_setopt($curlSession, CURLOPT_POST, 1); curl_setopt($curlSession, CURLOPT_POSTFIELDS, SagepayUtil::arrayToQueryString($data)); curl_setopt($curlSession, CURLOPT_RETURNTRANSFER, 1); curl_setopt($curlSession, CURLOPT_TIMEOUT, $ttl); curl_setopt($curlSession, CURLOPT_SSL_VERIFYHOST, 2); if (!empty($caCertPath)) { curl_setopt($curlSession, CURLOPT_SSL_VERIFYPEER, 1); curl_setopt($curlSession, CURLOPT_CAINFO, $caCertPath); } else { curl_setopt($curlSession, CURLOPT_SSL_VERIFYPEER, 0); } $rawresponse = curl_exec($curlSession); if (curl_getinfo($curlSession, CURLINFO_HTTP_CODE) !== 200) { $output['Status'] = "FAIL"; $output['StatusDetails'] = "Server Response: " . curl_getinfo($curlSession, CURLINFO_HTTP_CODE); $output['Response'] = $rawresponse; return $output; } if (curl_error($curlSession)) { $output['Status'] = "FAIL"; $output['StatusDetail'] = curl_error($curlSession); $output['Response'] = $rawresponse; return $output; } curl_close($curlSession); $requestForLog = SagepayUtil::arrayToQueryStringRemovingSensitiveData($data, self::$nonSensitiveRequestDataArray); $response = SagepayUtil::queryStringToArray($rawresponse, "\r\n"); $responseForLog = SagepayUtil::queryStringToArrayRemovingSensitiveData($rawresponse, "\r\n", self::$nonSensitiveResponseDataArray); SagepayUtil::log("Request:" . PHP_EOL . $requestForLog); SagepayUtil::log("Response:" . PHP_EOL . json_encode($responseForLog)); return array_merge($output, $response); }