src/InsuranceCompany/DZI/SOAP/Subscriber/ErrorHandlingSubscriber.php line 29

Open in your IDE?
  1. <?php
  2. namespace App\InsuranceCompany\DZI\SOAP\Subscriber;
  3. use App\InsuranceCompany\Common\Type\ResultProviderInterface;
  4. use App\InsuranceCompany\DZI\Exception\Exception;
  5. use App\InsuranceCompany\DZI\SOAP\Interfaces\ChangePassRespInterface;
  6. use App\InsuranceCompany\DZI\SOAP\Interfaces\ErrorMessageInterface;
  7. use App\InsuranceCompany\DZI\SOAP\Interfaces\NoStatusResponseInterface;
  8. use App\InsuranceCompany\DZI\SOAP\Interfaces\StatusCodeResultInterface;
  9. use App\InsuranceCompany\DZI\SOAP\Interfaces\StatusMessageResultInterface;
  10. use App\InsuranceCompany\DZI\SOAP\Interfaces\StatusMsgResultInterface;
  11. use App\InsuranceCompany\DZI\SOAP\Interfaces\StatusNoResultInterface;
  12. use App\InsuranceCompany\DZI\SOAP\Interfaces\StatusResultInterface;
  13. use Phpro\SoapClient\Event\ResponseEvent;
  14. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  15. use UnexpectedValueException;
  16. /**
  17.  * Class ErrorHandlingSubscriber
  18.  */
  19. class ErrorHandlingSubscriber implements EventSubscriberInterface
  20. {
  21.     /**
  22.      * @param ResponseEvent $event
  23.      * @throws Exception
  24.      */
  25.     public function onClientResponse(ResponseEvent $event)
  26.     {
  27.         $result $event->getResponse();
  28.         while ($result instanceof ResultProviderInterface) {
  29.             $result $result->getResult();
  30.         }
  31.         if ($result instanceof StatusNoResultInterface) {
  32.             $statusCode $result->getStatusNo();
  33.         }
  34.         elseif ($result instanceof StatusCodeResultInterface) {
  35.             $statusCode $result->getStatusCode();
  36.         }
  37.         elseif ($result instanceof StatusResultInterface) {
  38.             $statusCode = (int)$result->getStatus();
  39.         }
  40.         elseif ($result instanceof NoStatusResponseInterface) {
  41.             return;
  42.         }
  43.         else {
  44.             throw new UnexpectedValueException('Result type is not a result');
  45.         }
  46.         if ($statusCode === 0) {
  47.             return;
  48.         }
  49.         if ($result instanceof StatusMessageResultInterface) {
  50.             $message $result->getStatusMessage();
  51.         }
  52.         elseif ($result instanceof StatusMsgResultInterface) {
  53.             $message $result->getStatusMsg();
  54.         }
  55.         elseif ($result instanceof ChangePassRespInterface) {
  56.             $message $result->getChangePassResp();
  57.         }
  58.         elseif ($result instanceof ErrorMessageInterface) {
  59.             $message $result->getErrorMessage();
  60.         }
  61.         else {
  62.             $message 'Unknown error';
  63.         }
  64.         throw new Exception($message$statusCode);
  65.     }
  66.     /**
  67.      * {@inheritdoc}
  68.      * @noinspection PhpArrayShapeAttributeCanBeAddedInspection
  69.      */
  70.     public static function getSubscribedEvents(): array
  71.     {
  72.         return [
  73.             ResponseEvent::class => 'onClientResponse',
  74.         ];
  75.     }
  76. }