با عرض سلام
در BasketController متد زیر مشکل دارد ، متغیر order مقدار null رو برمیگردونه
BasketController.php codes :
private $basket;
private $transaction;
public function __construct(Basket $basket , Transaction $transaction)
{
$this->middleware('auth')->only(['checkoutForm','checkout']);
$this->basket = $basket;
$this->transaction = $transaction;
}
public function checkout(Request $request)
{
$this->validateForm($request);
$order = $this->transaction->checkout();
if(!is_null($order)){
return redirect()->route('home')->with('success', __('payment.your order has been registered', ['orderNum' => $order->id]));
}
return 'Order is Empty';
}
-----------------------------------------------------
Transaction.php codes :
public function checkout()
{
DB::beginTransaction();
try{
$order = $this->makeOrder();
$payment = $this->makePayment($order);
DB::commit();
}catch(\Exception $e){
DB::rollBack();
return null;
}
if ($payment->isOnline()) {
$this->gatewayFactory()->pay($order);
}
$this->completeOrder($order);
return $order;
}
private function makeOrder()
{
$order = Order::create([
'user_id' => auth()->user()->id,
'code' => bin2hex(str_random(16)),
'amount' => $this->basket->subTotal()
]);
$order->products()->attach($this->products());
return $order;
}
private function makePayment($order)
{
return Payment::create([
'order_id' => $order->id,
'pay_method' => $this->request->pay_method,
'amount' => $order->amount,
]);
}
private function gatewayFactory()
{
$gateway = [
'saman' => Saman::class,
'pasargad' => Pasargad::class
][$this->request->gateway];
return resolve($gateway);
}
private function completeOrder($order)
{
$this->normalizeQuantity($order);
event(new OrderRegistered($order));
$this->basket->clear();
}