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,]);
}
}