vendor/abap/payment-bundle/src/Handler/NotifyRequest/PayByNetNotifyRequestHandler.php line 25

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace Abap\PaymentBundle\Handler\NotifyRequest;
  4. use Abap\PaymentBundle\Model\PaymentInterface;
  5. use Aspello\Payum\PayByNet\Handler\NotifyRequestHandler;
  6. use Aspello\Payum\PayByNet\Request\AssertNotifyRequestData;
  7. use Doctrine\Persistence\ManagerRegistry;
  8. use Payum\Core\Payum;
  9. use Payum\Core\Request\GetHttpRequest;
  10. use Payum\Core\Request\Notify;
  11. final class PayByNetNotifyRequestHandler implements NotifyRequestHandlerInterface
  12. {
  13.     private Payum $payum;
  14.     public function __construct(
  15.         Payum $payum
  16.     ) {
  17.         $this->payum $payum;
  18.     }
  19.     public function handle(string $gatewayNamestring $paymentClass null): void
  20.     {
  21.         if (null === $paymentClass) {
  22.             throw new \InvalidArgumentException('Payment class must be provided.');
  23.         }
  24.         $reflectionClass = new \ReflectionClass($paymentClass);
  25.         if (!$reflectionClass->implementsInterface(PaymentInterface::class)) {
  26.             throw new \InvalidArgumentException("Payment class {$paymentClass} is not supported");
  27.         }
  28.         $storage $this->payum->getStorage($paymentClass);
  29.         $gateway $this->payum->getGateway($gatewayName);
  30.         $gateway->execute($httpRequest = new GetHttpRequest());
  31.         $gateway->execute(new AssertNotifyRequestData($httpRequest));
  32.         $result $storage->findBy(['transactionId' => $httpRequest->request['paymentId']]);
  33.         if (empty($result) || !is_array($result)) {
  34.             throw new \InvalidArgumentException('Payment not found');
  35.         }
  36.         /** @var PaymentInterface $payment */
  37.         $payment reset($result);
  38.         $previousStatus $payment->getStatus();
  39.         try {
  40.             $gateway->execute(new Notify($payment));
  41.         } finally {
  42.             $newStatus $payment->getStatus();
  43.             if ($previousStatus !== $newStatus) {
  44.                 $storage->update($payment);
  45.             }
  46.         }
  47.     }
  48. }