<?php
namespace App\Controller\AppBundle\Connector\Awacs;
use Httpful\Http;
use Httpful\Mime;
use Httpful\Request;
abstract class AwacsRequest
{
const ENDPOINT = 'https://172.30.190.81:9243/anva/awacs/absagent';
const KEY = 'REKlfoYNyACF';
/**
* Creates the XML for the function contents
* @param $request \SimpleXMLElement XML node of Request
*/
public abstract function createXML($request);
/**
* Creates XML for request.
* @return string XML request.
*/
public function buildXML($datasource = null)
{
$xml = new \SimpleXMLElement('<AWACS/>');
$awacs = $xml;
// Create header parameters
$header = $awacs->addChild('HEADER');
$header->addChild('SERVICE_ID', 'ABSANVA');
$header->addChild('DATASOURCE', $datasource ?? $_ENV['AWACS_DATASOURCE']);
$header->addChild('KEY', $_ENV['AWACS_KEY']);
// Add request to body
$request = $awacs->addChild('DATA')->addChild('REQUEST');
// Add function specific XML
$this->createXML($request);
// Build XML file
$dom = dom_import_simplexml($xml);
$requestXML = $dom->ownerDocument->saveXML($dom->ownerDocument->documentElement);
return $requestXML;
}
public static function getDataSource() {
return $_ENV['APP_DEBUG'] == 'true' ? 'Bedrijf8' : $_ENV['AWACS_DATASOURCE'];
}
/**
* Places request and returns response.
* @return AwacsResponse
*/
public function send($datasource = null, $slotvragen = null)
{
$request = ['request' => $this->buildXML($datasource ?? self::getDataSource())];
$response = Request::post($_ENV['AWACS_ENDPOINT'])
->method(Http::POST)
->body(http_build_query($request))
->timeoutIn(300)
->sendsXml()
->sendsType(Mime::FORM)
->expectsXml()
->send();
return new AwacsResponse($this, $response->body, $slotvragen);
}
/**
* Places request and returns response.
* @return AwacsResponse
*/
public function sendAndRequest($datasource = null, $slotvragen = null)
{
$request = ['request' => $this->buildXML($datasource ?? self::getDataSource())];
$response = Request::post($_ENV['AWACS_ENDPOINT'])
->method(Http::POST)
->body(http_build_query($request))
->timeoutIn(300)
->sendsXml()
->sendsType(Mime::FORM)
->expectsXml()
->send();
return [new AwacsResponse($this, $response->body, $slotvragen), $request];
}
/**
* Places request and returns response.
* @return AwacsResponse
*/
public static function sendXML($xml)
{
$request = ['request' => $xml];
$response = Request::post($_ENV['AWACS_ENDPOINT'])
->method(Http::POST)
->body(http_build_query($request))
->timeoutIn(300)
->sendsXml()
->sendsType(Mime::FORM)
->expectsXml()
->send();
return $response;
}
}