HEX
Server: Microsoft-IIS/8.5
System: Windows NT YDAWBH120 6.3 build 9600 (Windows Server 2012 R2 Standard Edition) AMD64
User: tentjecom_web (0)
PHP: 7.4.14
Disabled: NONE
Upload Files
File: D:/HostingSpaces/blijegasten/blijegasten.be/app/Komma/Shop/Payment/PSPResponseController.php
<?php


namespace App\Komma\Shop\Payment;


use App\Komma\Base\Controller;
use App\Komma\Globalization\RegionInfo;
use App\Komma\Globalization\RegionInfoInterface;
use App\Komma\Shop\Orders\Kms\OrderMailServiceInterface;
use App\Komma\Shop\Orders\Mail\OrderPayLaterCustomer;
use App\Komma\Shop\Orders\Models\Order;
use App\Komma\Shop\Orders\OrderService;
use App\Komma\Shop\Orders\OrderStatus;
use FontLib\Table\Type\loca;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Log;
use Illuminate\Support\Facades\Mail;

/**
 * Class PSPResponseController
 *
 * Responds to requests from a payment service provider.
 * Wheter they are api calls or redirect calls that should display views.
 *
 * @package App\Komma\Shop\Payment
 */
class PSPResponseController extends Controller
{
    /** @var PaymentServiceInterface $paymentService */
    private $paymentService;

//    /** @var OrderMailServiceInterface */
//    private $orderMailService;

    /**
     * PSPResponseController constructor.
     */
    public function __construct()
    {
        $this->paymentService = app(PaymentServiceInterface::class);
//        $this->orderMailService = app(OrderMailServiceInterface::class);

        parent::__construct();
    }

    public function redirectHook(Order $order)
    {
//        $orderStatusMessage = self::class. ': Status: ' . $order->status . ' | ' . __('shop/orders.status.' . $order->status );
//        dd($orderStatusMessage);
        Log::info(self::class. ': Order "' . $order->id . '" reach the redirectHook from Mollie');
//        $order->load('transactions');
//        dd($order);

        switch ($order->status){
            case OrderStatus::AWAITING_FULFILLMENT:
                return redirect(localized_route('checkout.success'))->with(['order' => $order->id]);

            default:
                return redirect(localized_route('checkout.error'))->with(['order' => $order->id]);
        }
    }

    public function redirectIntakeHook(Order $order)
    {

        if($order->status == OrderStatus::COMPLETED) {
            return redirect(localized_route('checkout.deposit.success'));
        }

        return redirect(localized_route('checkout.deposit.error'));
    }

    public function payLater(Order $order)
    {
        if($order->status !== OrderStatus::AWAITING_PAYMENT) {
            throw new \UnexpectedValueException(self::class. ': Order has not been marked as awaiting payment.');
        }

        /** @var OrderService $orderService */
        $orderService = app()->make(OrderService::class);
        return $orderService->startPaymentForOrder($order);
    }

    public function depositPayment(Order $order)
    {
        if($order->status !== OrderStatus::DEPOSIT_PAYMENT_SEND) {
            throw new \UnexpectedValueException(self::class. ': Order has not been marked as awaiting payment.');
        }

        /** @var OrderService $orderService */
        $orderService = app()->make(OrderService::class);
        return $orderService->startIntakePaymentForOrder($order);
    }

    /**
     * Called by the Payment service provider to tell us that something happened with a transaction.
     * Used for updating a transaction
     */
    public function processPaymentProviderResponse(Order $order)
    {
//        $order = request()->route()->parameter('order'); //May or may not be present
//        if($order && !is_a($order, Order::class)) throw new \RuntimeException('The order from the route was not an order but a '.gettype($order).'.');
        $adapter = $this->paymentService->getAdapter();

        if($order->status == OrderStatus::COMPLETED) {
            \Log::debug(self::class . ': Webhook called but order has already been marked as completed. Mollie triggers it after refunding.');
        }

        return $adapter->processPSPResponse($order);
    }

    /**
     * Called by the Payment service provider to tell us that something happened with a transaction.
     * Used for updating a transaction
     */
    public function processIntakePaymentProviderResponse(Order $order)
    {
//        $order = request()->route()->parameter('order'); //May or may not be present
//        if($order && !is_a($order, Order::class)) throw new \RuntimeException('The order from the route was not an order but a '.gettype($order).'.');
        $adapter = $this->paymentService->getAdapter();
        return $adapter->processIntakePSPResponse($order);
    }

    /**
     * Shows the user a fake psp page that can redirect the user back to this controller
     *
     * @param Request $request
     * @param Order $order
     * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
     */
    public function showFakePSPPage(Request $request, Order $order)
    {
        /** @var RegionInfo $regionInfo */
        $regionInfo = app(RegionInfoInterface::class);
        $orderTotalFormatted = $regionInfo->getNumberFormat()->centsToCurrency($order->total);
        $currencySymbol = $regionInfo->getCurrencySymbol();
        return view('shop.pages.checkout.fakepsp', ['order' => $order, 'orderTotalFormatted' => $orderTotalFormatted, 'currencySymbol' => $currencySymbol, 'links' => $this->links,]);
    }
}