first upload all files
This commit is contained in:
@@ -0,0 +1,61 @@
|
||||
<?php
|
||||
|
||||
namespace Modules\Checkout\Http\Controllers;
|
||||
|
||||
use Exception;
|
||||
use Modules\Order\Entities\Order;
|
||||
use Modules\Payment\Facades\Gateway;
|
||||
use Modules\Checkout\Events\OrderPlaced;
|
||||
use Modules\Checkout\Services\OrderService;
|
||||
|
||||
class CheckoutCompleteController
|
||||
{
|
||||
/**
|
||||
* Store a newly created resource in storage.
|
||||
*
|
||||
* @param int $orderId
|
||||
* @param \Modules\Checkout\Services\OrderService $orderService
|
||||
* @return \Illuminate\Http\Response
|
||||
*/
|
||||
public function store($orderId, OrderService $orderService)
|
||||
{
|
||||
$order = Order::findOrFail($orderId);
|
||||
|
||||
$gateway = Gateway::get(request('paymentMethod'));
|
||||
|
||||
try {
|
||||
$response = $gateway->complete($order);
|
||||
} catch (Exception $e) {
|
||||
$orderService->delete($order);
|
||||
|
||||
return response()->json([
|
||||
'message' => $e->getMessage(),
|
||||
], 403);
|
||||
}
|
||||
|
||||
$order->storeTransaction($response);
|
||||
|
||||
event(new OrderPlaced($order));
|
||||
|
||||
if (! request()->ajax()) {
|
||||
return redirect()->route('checkout.complete.show');
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Display the specified resource.
|
||||
*
|
||||
* @param int $id
|
||||
* @return \Illuminate\Http\Response
|
||||
*/
|
||||
public function show()
|
||||
{
|
||||
$order = session('placed_order');
|
||||
|
||||
if (is_null($order)) {
|
||||
return redirect()->route('home');
|
||||
}
|
||||
|
||||
return view('public.checkout.complete.show', compact('order'));
|
||||
}
|
||||
}
|
||||
97
Modules/Checkout/Http/Controllers/CheckoutController.php
Normal file
97
Modules/Checkout/Http/Controllers/CheckoutController.php
Normal file
@@ -0,0 +1,97 @@
|
||||
<?php
|
||||
|
||||
namespace Modules\Checkout\Http\Controllers;
|
||||
|
||||
use Exception;
|
||||
use Modules\Support\Country;
|
||||
use Modules\Cart\Facades\Cart;
|
||||
use Modules\Page\Entities\Page;
|
||||
use Illuminate\Routing\Controller;
|
||||
use Modules\Payment\Facades\Gateway;
|
||||
use Modules\User\Services\CustomerService;
|
||||
use Modules\Checkout\Services\OrderService;
|
||||
use Modules\Address\Entities\DefaultAddress;
|
||||
use Modules\Cart\Http\Middleware\CheckCartStock;
|
||||
use Modules\Order\Http\Requests\StoreOrderRequest;
|
||||
use Modules\Cart\Http\Middleware\CheckCouponUsageLimit;
|
||||
use Modules\Cart\Http\Middleware\RedirectIfCartIsEmpty;
|
||||
|
||||
class CheckoutController extends Controller
|
||||
{
|
||||
/**
|
||||
* Create a new controller instance.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
$this->middleware([
|
||||
RedirectIfCartIsEmpty::class,
|
||||
CheckCartStock::class,
|
||||
CheckCouponUsageLimit::class,
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Show the form for creating a new resource.
|
||||
*
|
||||
* @return \Illuminate\Http\Response
|
||||
*/
|
||||
public function create()
|
||||
{
|
||||
Gateway::all();
|
||||
return view('public.checkout.create', [
|
||||
'cart' => Cart::instance(),
|
||||
'countries' => Country::supported(),
|
||||
'gateways' => Gateway::all(),
|
||||
'defaultAddress' => auth()->user()->defaultAddress ?? new DefaultAddress,
|
||||
'addresses' => $this->getAddresses(),
|
||||
'termsPageURL' => Page::urlForPage(setting('storefront_terms_page')),
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get addresses for the logged in user.
|
||||
*
|
||||
* @return \Illuminate\Support\Collection
|
||||
*/
|
||||
private function getAddresses()
|
||||
{
|
||||
if (auth()->guest()) {
|
||||
return collect();
|
||||
}
|
||||
|
||||
return auth()->user()->addresses->keyBy('id');
|
||||
}
|
||||
|
||||
/**
|
||||
* Store a newly created resource in storage.
|
||||
*
|
||||
* @param \Modules\Order\Http\Requests\StoreOrderRequest $request
|
||||
* @param \Modules\User\Services\CustomerService $customerService
|
||||
* @param \Modules\Checkout\Services\OrderService $orderService
|
||||
* @return \Illuminate\Http\Response
|
||||
*/
|
||||
public function store(StoreOrderRequest $request, CustomerService $customerService, OrderService $orderService)
|
||||
{
|
||||
if (auth()->guest() && $request->create_an_account) {
|
||||
$customerService->register($request)->login();
|
||||
}
|
||||
|
||||
$order = $orderService->create($request);
|
||||
|
||||
$gateway = Gateway::get($request->payment_method);
|
||||
|
||||
try {
|
||||
$response = $gateway->purchase($order, $request);
|
||||
} catch (Exception $e) {
|
||||
$orderService->delete($order);
|
||||
|
||||
return response()->json([
|
||||
'message' => $e->getMessage(),
|
||||
], 403);
|
||||
}
|
||||
|
||||
return response()->json($response);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,39 @@
|
||||
<?php
|
||||
|
||||
namespace Modules\Checkout\Http\Controllers;
|
||||
|
||||
use Illuminate\Http\Request;
|
||||
use Modules\Cart\Facades\Cart;
|
||||
use Modules\Order\Entities\Order;
|
||||
|
||||
class PaymentCanceledController
|
||||
{
|
||||
/**
|
||||
* Store a newly created resource in storage.
|
||||
*
|
||||
* @param int $orderId
|
||||
* @param string $paymentMethod
|
||||
* @param \Modules\Checkout\Services\OrderService $orderService
|
||||
* @return \Illuminate\Http\Response
|
||||
*/
|
||||
public function store(Request $request, $orderId)
|
||||
{
|
||||
Order::where('id', $orderId)->forceDelete();
|
||||
|
||||
Cart::restoreStock();
|
||||
|
||||
if ($request->ajax()) {
|
||||
return response()->json(
|
||||
[
|
||||
'success' => true,
|
||||
'message' => trans('payment::messages.payment_cancelled'),
|
||||
],
|
||||
200,
|
||||
);
|
||||
}
|
||||
|
||||
return redirect()
|
||||
->route('checkout.create')
|
||||
->with('error', trans('payment::messages.payment_cancelled'));
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user