<?php
namespace App\Adapter\Qbwc\Controller;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Response;
use FOS\RestBundle\Routing\ClassResourceInterface;
use App\Adapter\Qbwc\Service\QbRequest;
use App\Adapter\Qbwc\Service\QbResponse;
use App\Hub\Sdk;
use FOS\RestBundle\Controller\Annotations\RouteResource;
use Symfony\Component\Serializer\SerializerInterface;
use App\Adapter\Api\Annotations\ApiAuthorization;
use Symfony\Component\Validator\Validator\ValidatorInterface;
use Swagger\Annotations as SWG;
use Nelmio\ApiDocBundle\Annotation\Security;
use Symfony\Component\Routing\Annotation\Route;
use Nelmio\ApiDocBundle\Annotation\Model;
use Psr\Log\LoggerInterface;
require_once __DIR__ . '/../../../../lib/soap_server_functions.php';
class QbSoapController extends Controller implements ClassResourceInterface
{
/**
* @var QbRequest
*/
private $qbRequest;
/**
* @var QbResponse
*/
private $qbResponse;
/**
* @var Sdk
*/
private $sdk;
/**
* @var LoggerInterface
*/
private $logger;
public function __construct(
\Symfony\Component\HttpFoundation\Session\SessionInterface $session,
QbRequest $qbRequest,
QbResponse $qbResponse,
Sdk $sdk,
LoggerInterface $logger
) {
$this->session = $session;
$this->qbRequest = $qbRequest;
$this->qbResponse = $qbResponse;
$this->sdk = $sdk;
$this->logger = $logger;
}
/**
* @Route("/qbsoap", name="qbsoap_route")
*/
public function runWebConnectorMethods(Request $request)
{
$server = new \soap_server();
$this->logger->error('Request' . $request->getContent());
$server->register(
"serverVersion",
[],
[
"return" => "xsd:string"
]
);
$server->register(
"authenticate",
[
"strUserName" => "xsd:string",
"strPassword" => "xsd:string"
],
[
"return" => "tns:ArrayOfString"
]
);
$server->register(
"clientVersion",
[
"strVersion" => "xsd:string"
],
[
"return" => "xsd:string"
]
);
$server->register(
"sendRequestXML",
[
"ticket" => "xsd:string",
"strHCPResponse" => "xsd:string",
"strCompanyFileName" => "xsd:string",
"qbXMLCountry" => "xsd:string",
"qbXMLMajorVers" => "xsd:int",
"qbXMLMinorVers" => "xsd:int"
],
[
"return" => "xsd:string"
]
);
$server->register(
"receiveResponseXML",
[
"ticket" => "xsd:string",
"response" => "xsd:string",
"hresult" => "xsd:string",
"message" => "xsd:string"
],
[
"return" => "s:int"
]
);
$server->register(
"connectionError",
[
"ticket" => "xsd:string",
"hresult" => "xsd:string",
"message" => "xsd:string"
],
[
"return" => "xsd:string"
]
);
$server->register(
"getLastError",
[
"ticket" => "xsd:string"
],
[
"return" => "xsd:string"
]
);
$server->register(
"closeConnection",
[
"ticket" => "xsd:string"
],
[
"return" => "xsd:string"
]
);
// $_SERVER['content-type'] = 'text/xml; charset=utf-8'; // (was necessary when running with PHPUnit)
ob_start();
$server->service($request->getContent());
$soapResponse = ob_get_clean();
return new Response(
$soapResponse,
200,
['content-type' => 'text/xml', 'Content-Encoding' => 'gzip']
);
}
}