/** * @param HttpRequest $httpRequest * @param boolean $onlyAllowHttps * * @return HttpResponse */ public function execute($httpRequest, $onlyAllowHttps = true) { $url = $httpRequest->getUrl(); $post = $httpRequest->getMethod() == HttpRequest::METH_POST ? 1 : 0; $xml = $httpRequest->getBody(); $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_POST, $post); curl_setopt($ch, CURLOPT_USERAGENT, "realex sdk version 0.1"); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $xml); curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: text/plain')); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT_MS, $this->connectTimeout); curl_setopt($ch, CURLOPT_TIMEOUT_MS, $this->socketTimeout); if ($onlyAllowHttps === false) { curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); } $responseXml = curl_exec($ch); $statusCode = curl_getinfo($ch, CURLINFO_HTTP_CODE); $errorNumber = curl_errno($ch); if ($errorNumber) { $this->logger->error("Exception communicating with Realex. Error number: " . $errorNumber . ". Description: " . curl_error($ch)); curl_close($ch); throw new RealexException("Exception communicating with Realex"); } curl_close($ch); $response = new HttpResponse(); $response->setResponseCode($statusCode); $response->setBody($responseXml); return $response; }
/** * Test sending a message, expecting an exception due to failure response. * */ public function testSendMessageFailure404() { // Dummy and Mock required objects $statusCode = 404; $this->setExpectedException("com\\realexpayments\\remote\\sdk\\RealexException", "Exception communicating with Realex"); try { $endpoint = 'https://some-test-endpoint'; $onlyAllowHttps = true; $xml = "<element>test response xml</element>"; $httpResponse = new HttpResponse(); $httpResponse->setResponseCode($statusCode); $httpResponse->setBody($xml); /** @var HttpConfiguration $configurationMock */ $configurationMock = \Phockito::mock("com\\realexpayments\\remote\\sdk\\http\\HttpConfiguration"); \Phockito::when($configurationMock->getEndPoint())->return($endpoint); \Phockito::when($configurationMock->isOnlyAllowHttps())->return($onlyAllowHttps); /** @var HttpClient $httpClientMock */ $httpClientMock = \Phockito::mock("com\\realexpayments\\remote\\sdk\\http\\HttpClient"); /** @var HttpRequest $anything */ \Phockito::when($httpClientMock->execute(\Hamcrest_Core_IsAnything::anything(), \Hamcrest_Core_IsAnything::anything()))->return($httpResponse); // execute the method $response = HttpUtils::sendMessage($xml, $httpClientMock, $configurationMock); } catch (RealexException $e) { throw $e; } catch (Exception $e) { $this->fail("Unexpected exception:" . $e->getMessage()); } }