示例#1
0
 /**
  * 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);
 }