updated checkout flow

This commit is contained in:
franknstayn
2021-10-09 20:25:36 +08:00
parent eea777b544
commit f8b87ea787
9 changed files with 135 additions and 85 deletions

View File

@@ -8,6 +8,7 @@ use Illuminate\Support\Facades\Auth;
use App\Traits\CaptchaTrait; use App\Traits\CaptchaTrait;
use App\User; use App\User;
use Illuminate\Support\Facades\Validator; use Illuminate\Support\Facades\Validator;
use App\Models\user\UserModel;
use Illuminate\Http\Request; use Illuminate\Http\Request;
@@ -72,6 +73,7 @@ class CustomAuthController extends Controller
public function postRegister(Request $request) public function postRegister(Request $request)
{ {
$post = $request->all(); $post = $request->all();
$userModel = new UserModel;
$post['captcha'] = $this->captchaCheck(); $post['captcha'] = $this->captchaCheck();
@@ -87,6 +89,12 @@ class CustomAuthController extends Controller
'g-recaptcha-response.required' => 'Captcha is required', 'g-recaptcha-response.required' => 'Captcha is required',
'captcha.min' => 'Wrong captcha, please try again.' 'captcha.min' => 'Wrong captcha, please try again.'
] ]
// $post,
// [
// 'username' => 'unique:user_logins',
// 'email' => 'unique:user_logins',
// ]
); );
@@ -105,9 +113,9 @@ class CustomAuthController extends Controller
$message = ' $message = '
<div class="alert alert-danger alert-dismissible fade show" role="alert"> <div class="alert alert-danger alert-dismissible fade show" role="alert">
<strong>Error!</strong>' . $errors . <strong>Error!</strong>' . $errors .
'<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button> '<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>
</div>'; </div>';
return response()->json(array( return response()->json(array(
'success' => false, 'success' => false,
@@ -115,7 +123,7 @@ class CustomAuthController extends Controller
)); ));
} }
User::create([ $user = User::create([
'name' => $post['name'], 'name' => $post['name'],
'username' => $post['username'], 'username' => $post['username'],
'email' => $post['email'], 'email' => $post['email'],
@@ -123,10 +131,19 @@ class CustomAuthController extends Controller
'role' => 'user' 'role' => 'user'
]); ]);
$country = explode("_", $post['country']);
$data = array(
'UserId' => $user->id,
'CountryCode' => $country[0],
'Country' => $country[1]
);
$userModel->insertAddressBook($data);
Auth::attempt(['email' => $post['email'], 'password' => $post['password']]); Auth::attempt(['email' => $post['email'], 'password' => $post['password']]);
return response()->json(array( return response()->json(array(
'success' => true 'success' => true,
'redirect' => $post['redirect']
)); ));
} }
} }

View File

@@ -79,16 +79,25 @@ class PaypalController extends Controller
{ {
$UserModel = new UserModel; $UserModel = new UserModel;
if (Auth::guest()) { // if (Auth::guest()) {
$message = 'Please <a href="' . url('auth/login') . '">Sign in</a> to your account to proceed.'; // $message = 'Please <a href="' . url('auth/login') . '">Sign in</a> to your account to proceed.';
Session::flash('msg', $message); // Session::flash('msg', $message);
return Redirect::back(); // return Redirect::back();
} // }
$userId = Auth::user()->id; $userId = Auth::user()->id;
$array_address_book = $UserModel->selectAddresBook('UserId', $userId); $array_address_book = $UserModel->selectAddresBook('UserId', $userId);
if (count($array_address_book) <= 0) { if (
$message = 'Please add Shipping address.'; count($array_address_book) <= 0 ||
$array_address_book[0]->Fullname == null ||
$array_address_book[0]->ContactNumber == null ||
$array_address_book[0]->Address == null ||
$array_address_book[0]->State == null ||
$array_address_book[0]->City == null ||
$array_address_book[0]->ZipCode == null
) {
$message = 'Please complete your <a href="'.url('user/address-book').'"><u>shipping address</u></a>.';
Session::flash('cartkeyError', $message); Session::flash('cartkeyError', $message);
return Redirect::back(); return Redirect::back();
} }
@@ -115,14 +124,14 @@ class PaypalController extends Controller
$payer = PayPal::Payer(); $payer = PayPal::Payer();
$payer->setPaymentMethod('paypal'); $payer->setPaymentMethod('paypal');
$inputFields = Paypal::InputFields(); // $inputFields = Paypal::InputFields();
$inputFields->setAllowNote(true) // $inputFields->setAllowNote(true)
->setNoShipping(1) // ->setNoShipping(1)
->setAddressOverride(0); // ->setAddressOverride(0);
$webProfile = Paypal::WebProfile(); // $webProfile = Paypal::WebProfile();
$webProfile->setName("YeowZa! T-Shirt Shop" . uniqid()) // $webProfile->setName("YeowZa! T-Shirt Shop" . uniqid())
// ->setPresentation($presentation) // // ->setPresentation($presentation)
->setInputFields($inputFields); // ->setInputFields($inputFields);
// $shipping = PayPal::ShippingAddress(); // $shipping = PayPal::ShippingAddress();
// $shipping->setRecipientName($array_address_book[0]->Fullname); // $shipping->setRecipientName($array_address_book[0]->Fullname);
@@ -185,8 +194,8 @@ class PaypalController extends Controller
$payment = PayPal::Payment(); $payment = PayPal::Payment();
// var_dump(array($transaction)); // var_dump(array($transaction));
if($array_address_book[0]->CountryCode == "CA"){ if ($array_address_book[0]->CountryCode == "CA") {
$shipping = PayPal::ShippingAddress(); $shipping = PayPal::ShippingAddress();
$shipping->setRecipientName($array_address_book[0]->Fullname); $shipping->setRecipientName($array_address_book[0]->Fullname);
$shipping->setLine1($array_address_book[0]->Address); $shipping->setLine1($array_address_book[0]->Address);
@@ -200,7 +209,7 @@ class PaypalController extends Controller
$payment->setExperienceProfileId($this->createWebProfile()); $payment->setExperienceProfileId($this->createWebProfile());
} }
// var_dump($item_list); // var_dump($item_list);
$amount_details = PayPal::Details(); $amount_details = PayPal::Details();
@@ -226,7 +235,7 @@ class PaypalController extends Controller
// var_dump($shippingAddress) // var_dump($shippingAddress)
$payment->setIntent('sale'); $payment->setIntent('sale');
$payment->setPayer($payer); $payment->setPayer($payer);
$payment->setRedirectUrls($redirectUrls); $payment->setRedirectUrls($redirectUrls);
@@ -422,7 +431,7 @@ class PaypalController extends Controller
$currency = $obj->transactions[0]->amount->currency; $currency = $obj->transactions[0]->amount->currency;
$invoice_number = $obj->transactions[0]->invoice_number; $invoice_number = $obj->transactions[0]->invoice_number;
// var_dump( $obj->transactions[0]->item_list->phone);
//shipping address details //shipping address details
$recipient_name = $obj->transactions[0]->item_list->shipping_address->recipient_name; $recipient_name = $obj->transactions[0]->item_list->shipping_address->recipient_name;
$line1 = $obj->transactions[0]->item_list->shipping_address->line1; $line1 = $obj->transactions[0]->item_list->shipping_address->line1;

View File

@@ -1,9 +1,13 @@
<?php namespace App\Http\Middleware; <?php
namespace App\Http\Middleware;
use Closure; use Closure;
use Illuminate\Contracts\Auth\Guard; use Illuminate\Contracts\Auth\Guard;
use Illuminate\Support\Facades\URL;
class Authenticate { class Authenticate
{
/** /**
* The Guard implementation. * The Guard implementation.
@@ -32,19 +36,19 @@ class Authenticate {
*/ */
public function handle($request, Closure $next) public function handle($request, Closure $next)
{ {
if ($this->auth->guest()) if ($this->auth->guest()) {
{ if ($request->ajax()) {
if ($request->ajax())
{
return response('Unauthorized.', 401); return response('Unauthorized.', 401);
} } else {
else $prev = URL::previous();
{ if (str_contains($prev, ['cart'])) {
return redirect()->guest('auth/register?redirectUrl='. $prev);
}
return redirect()->guest('auth/login'); return redirect()->guest('auth/login');
} }
} }
return $next($request); return $next($request);
} }
} }

View File

@@ -1,5 +1,6 @@
<?php <?php
use App\Http\Requests\Request;
use Illuminate\Support\Facades\Route; use Illuminate\Support\Facades\Route;
// use Spatie\LaravelAnalytics\LaravelAnalytics; // use Spatie\LaravelAnalytics\LaravelAnalytics;
/* /*
@@ -150,6 +151,7 @@ Route::group(['middleware' => 'normaluser'], function () {
Route::group(['middleware' => 'auth'], function () { Route::group(['middleware' => 'auth'], function () {
// PAYPAL ROUTES // PAYPAL ROUTES
Route::get('payPremium', ['as' => 'payPremium', 'uses' => 'paypal\PaypalController@payPremium']); Route::get('payPremium', ['as' => 'payPremium', 'uses' => 'paypal\PaypalController@payPremium']);
Route::get('getCheckout', ['as' => 'getCheckout', 'uses' => 'paypal\PaypalController@getCheckout']); Route::get('getCheckout', ['as' => 'getCheckout', 'uses' => 'paypal\PaypalController@getCheckout']);
Route::get('getDone', ['as' => 'getDone', 'uses' => 'paypal\PaypalController@getDone']); Route::get('getDone', ['as' => 'getDone', 'uses' => 'paypal\PaypalController@getDone']);

View File

@@ -22,6 +22,7 @@
<div class="col col-lg-5"> <div class="col col-lg-5">
<div id="register-response-msg"></div> <div id="register-response-msg"></div>
<form role="form" id="frm-register"> <form role="form" id="frm-register">
<input type="hidden" name="redirect" value="{{ Request::get('redirectUrl') }}">
<input type="hidden" name="_token" value="{{ csrf_token() }}"> <input type="hidden" name="_token" value="{{ csrf_token() }}">
<div class="mb-3"> <div class="mb-3">
<label class="control-label">Fullname</label> <label class="control-label">Fullname</label>
@@ -48,6 +49,14 @@
<input type="password" class="form-control" name="password_confirmation" placeholder="Confirm Password" data-rule-equalTo="#password" required> <input type="password" class="form-control" name="password_confirmation" placeholder="Confirm Password" data-rule-equalTo="#password" required>
</div> </div>
<div class="mb-3">
<label class="control-label">Select Country</label>
<select name="country" id="country" class="form-control">
<option value="US_United States">United States</option>
<option value="CA_Canada">Canada</option>
</select>
</div>
<div class="mb-3"> <div class="mb-3">
<div class="g-recaptcha text-center" data-sitekey="{{ env('CAPTCHA_SITE_KEY') }}"></div> <div class="g-recaptcha text-center" data-sitekey="{{ env('CAPTCHA_SITE_KEY') }}"></div>
</div> </div>

View File

@@ -322,30 +322,42 @@
@endif @endif
<h3>Order Summary</h3> <h3>Order Summary</h3>
</div> </div>
@if (!Auth::guest())
<div style="border: 1px solid #e2e2e2; padding: 10px; border-bottom: none;"> <div style="border: 1px solid #e2e2e2; padding: 10px; border-bottom: none;">
<p><strong>Ship to:</strong></p> <p><strong>Ship to:</strong></p>
@if ($address_book === null)
<a href="{{ url('user/address-book') }}">[ Add ]</a> @if ($address_book === null)
@else <a href="{{ url('user/address-book') }}">[ Add ]</a>
<div>{{ $address_book[0]->Fullname }}</div> @else
<div>{{ $address_book[0]->ContactNumber }}</div> <div>{{ $address_book[0]->Fullname }}</div>
<div> <div>{{ $address_book[0]->ContactNumber }}</div>
{{ $address_book[0]->Address . ', ' . $address_book[0]->State . ', ' . $address_book[0]->City . ', ' . $address_book[0]->Country . ', ' . $address_book[0]->CountryCode . ' ' . $address_book[0]->ZipCode }} <div>
<a href="{{ url('user/address-book') }}">[ Edit ]</a> </div> {{ $address_book[0]->Address . ', ' . $address_book[0]->State . ', ' . $address_book[0]->City . ', ' . $address_book[0]->Country . ', ' . $address_book[0]->CountryCode . ' ' . $address_book[0]->ZipCode }}
@endif <a href="{{ url('user/address-book') }}">[ Edit ]</a>
</div>
@endif
</div> </div>
@endif
<div style="border: 1px solid #e2e2e2; padding: 10px; border-bottom: none;"> <div style="border: 1px solid #e2e2e2; padding: 10px; border-bottom: none;">
<h5>Subtotal: <small>{{ number_format($tax['order_grandtotal'] , 2) . ' ' . $store_array[0]->StoreCurrency }}</small> </h5> <h5>Subtotal:
<h5>Shipping Fee: <small>{{ number_format($shipping_fee , 2) . ' ' . $store_array[0]->StoreCurrency }}</small> </h5> <small>{{ number_format($tax['order_grandtotal'], 2) . ' ' . $store_array[0]->StoreCurrency }}</small>
<h5>Tax: <small>{{ number_format($tax['tax'] , 2) . ' ' . $store_array[0]->StoreCurrency }}</small> </h5> </h5>
<hr> <h5>Shipping Fee:
<h3>Total: <span id="my_subtotal">{{ number_format($tax['order_grandtotal'] + $shipping_fee + $tax['tax'], 2) }}</span> <small>{{ number_format($shipping_fee, 2) . ' ' . $store_array[0]->StoreCurrency }}</small>
<small>{{ $store_array[0]->StoreCurrency }}</small></h3> </h5>
<h5>Tax:
<small>{{ number_format($tax['tax'], 2) . ' ' . $store_array[0]->StoreCurrency }}</small>
</h5>
<hr>
<h3>Total: <span
id="my_subtotal">{{ number_format($tax['order_grandtotal'] + $shipping_fee + $tax['tax'], 2) }}</span>
<small>{{ $store_array[0]->StoreCurrency }}</small>
</h3>
{{-- {{ var_dump($tax) }} {{-- {{ var_dump($tax) }}
{{ var_dump($shipping_fee) }} --}} {{ var_dump($shipping_fee) }} --}}
<hr> <hr>
<div class="form-group" id="voucher_list"> <div class="form-group" id="voucher_list">
@@ -386,13 +398,11 @@
</div> </div>
<div style="border: 1px solid #e2e2e2; padding: 10px;"> <div style="border: 1px solid #e2e2e2; padding: 10px;">
<a @if ($getSubtotal <= 0) disabled @endif href="{{ url('getCheckout') }}" class="btn btn-primary w-100" <a @if ($getSubtotal <= 0) disabled @endif href="{{ url('getCheckout') }}" class="btn w-100"
style="background-color: #ffc300; border-color: #e2ad00; text-align: -webkit-center;"><img style="background-color: #ffc300; border-color: #e2ad00; text-align: -webkit-center;">Checkout</a><br>
src="{{ asset('/public/images/paypal1.png') }}" class="img img-responsive"
style="height:30px;"></a><br>
<!-- <div class="my-2"> <!-- <div class="my-2">
<button class="btn btn-lg btn-info w-100">Checkout with Voucher</button> <button class="btn btn-lg btn-info w-100">Checkout with Voucher</button>
</div> --> </div> -->
<div class="bg-info p-2 mt-2"> <div class="bg-info p-2 mt-2">
Be advised payments made on merchbay will show up as crewsportswear on your receipt Be advised payments made on merchbay will show up as crewsportswear on your receipt
</div> </div>

View File

@@ -7,14 +7,12 @@
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<meta name="csrf_token" content="{{ csrf_token() }}" /> <meta name="csrf_token" content="{{ csrf_token() }}" />
<!-- Bootstrap CSS --> <!-- Bootstrap CSS -->
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/css/bootstrap.min.css" rel="stylesheet" <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-EVSTQN3/azprG1Anm3QDgpJLIm9Nao0Yz1ztcQTwFspd3yD65VohhpuuCOmLASjC" crossorigin="anonymous">
integrity="sha384-EVSTQN3/azprG1Anm3QDgpJLIm9Nao0Yz1ztcQTwFspd3yD65VohhpuuCOmLASjC" crossorigin="anonymous">
<title>Merchbay</title> <title>Merchbay</title>
<link rel="icon" href="{{ asset('public/favicon.ico') }}"> <link rel="icon" href="{{ asset('public/favicon.ico') }}">
<link href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet"> <link href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet">
<link href="https://fonts.googleapis.com/css2?family=Montserrat:wght@100;200;400;500;600;700;800;900&display=swap" <link href="https://fonts.googleapis.com/css2?family=Montserrat:wght@100;200;400;500;600;700;800;900&display=swap" rel="stylesheet">
rel="stylesheet">
<link href="{{ asset('public/assets/css/merchbay/styles.css') }}" rel="stylesheet"> <link href="{{ asset('public/assets/css/merchbay/styles.css') }}" rel="stylesheet">
<!-- <link href="{{ asset('public/assets/login/css/style.css') }}" rel="stylesheet"> <!-- <link href="{{ asset('public/assets/login/css/style.css') }}" rel="stylesheet">
@@ -39,18 +37,19 @@
<div id="fb-root"></div> <div id="fb-root"></div>
<script> <script>
window.fbAsyncInit = function() { window.fbAsyncInit = function() {
FB.init({ FB.init({
xfbml : true, xfbml: true,
version : 'v12.0' version: 'v12.0'
}); });
}; };
(function(d, s, id) { (function(d, s, id) {
var js, fjs = d.getElementsByTagName(s)[0]; var js, fjs = d.getElementsByTagName(s)[0];
if (d.getElementById(id)) return; if (d.getElementById(id)) return;
js = d.createElement(s); js.id = id; js = d.createElement(s);
js.src = 'https://connect.facebook.net/en_US/sdk/xfbml.customerchat.js'; js.id = id;
fjs.parentNode.insertBefore(js, fjs); js.src = 'https://connect.facebook.net/en_US/sdk/xfbml.customerchat.js';
fjs.parentNode.insertBefore(js, fjs);
}(document, 'script', 'facebook-jssdk')); }(document, 'script', 'facebook-jssdk'));
</script> </script>
@include('merchbay.navbar') @include('merchbay.navbar')
@@ -59,10 +58,7 @@
@yield('main-content') @yield('main-content')
<!-- Your Chat Plugin code --> <!-- Your Chat Plugin code -->
<div class="fb-customerchat" <div class="fb-customerchat" attribution="install_email" attribution_version="biz_inbox" page_id="107414144973415">
attribution="install_email"
attribution_version="biz_inbox"
page_id="107414144973415">
</div> </div>
</div> </div>
@include('merchbay.footer') @include('merchbay.footer')
@@ -73,8 +69,7 @@
<!-- Option 1: jQuery and Bootstrap Bundle (includes Popper) --> <!-- Option 1: jQuery and Bootstrap Bundle (includes Popper) -->
<script src="//cdnjs.cloudflare.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script> <script src="//cdnjs.cloudflare.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/js/bootstrap.bundle.min.js" <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/js/bootstrap.bundle.min.js" integrity="sha384-MrcW6ZMFYlzcLA8Nl+NtUVF0sA7MsXsP1UyJoMp4YLEuNSfAP+JcXn/tWtIaxVXM" crossorigin="anonymous">
integrity="sha384-MrcW6ZMFYlzcLA8Nl+NtUVF0sA7MsXsP1UyJoMp4YLEuNSfAP+JcXn/tWtIaxVXM" crossorigin="anonymous">
</script> </script>
<script src="https://ajax.aspnetcdn.com/ajax/jquery.validate/1.11.1/jquery.validate.min.js"></script> <script src="https://ajax.aspnetcdn.com/ajax/jquery.validate/1.11.1/jquery.validate.min.js"></script>
<script> <script>
@@ -239,7 +234,11 @@
$("#register-response-msg").fadeIn(1000, function() { $("#register-response-msg").fadeIn(1000, function() {
if (response.success) { if (response.success) {
location.reload(); if (response.redirect != "") {
window.location = response.redirect;
} else {
location.reload();
}
} else { } else {
$("#register-response-msg").html(response.message); $("#register-response-msg").html(response.message);
} }
@@ -560,10 +559,10 @@
$('#addnew-btn-tbl-row').html('') $('#addnew-btn-tbl-row').html('')
$('#addnew-btn-tbl-row').append( $('#addnew-btn-tbl-row').append(
'<button type="button" id="addNewRow" class="btn btn-success btn-sm pull-left" data-toggle="tooltip" title="Add Another"><i class="fa fa-plus" aria-hidden="true"></i> Add Row</button>' '<button type="button" id="addNewRow" class="btn btn-success btn-sm pull-left" data-toggle="tooltip" title="Add Another"><i class="fa fa-plus" aria-hidden="true"></i> Add Row</button>'
); );
$('.tr-remove-btn').html( $('.tr-remove-btn').html(
'<button type="button" class="btn btn-danger btn-sm removeRow btn-roster-action" data-toggle="tooltip" title="Remove"><i class="fa fa-remove" aria-hidden="true"></i></button>' '<button type="button" class="btn btn-danger btn-sm removeRow btn-roster-action" data-toggle="tooltip" title="Remove"><i class="fa fa-remove" aria-hidden="true"></i></button>'
); );
$('#orderListPanel').scrollTop($('#orderListPanel')[0].scrollHeight); $('#orderListPanel').scrollTop($('#orderListPanel')[0].scrollHeight);
$('.inputName').keyup(function() { $('.inputName').keyup(function() {
this.value = this.value.toLocaleUpperCase(); this.value = this.value.toLocaleUpperCase();
@@ -582,7 +581,7 @@
$('#addnew-btn-tbl-row').html(''); $('#addnew-btn-tbl-row').html('');
$('.tr-remove-btn').html( $('.tr-remove-btn').html(
'<button type="button" id="addNewRow" class="btn btn-success btn-sm btn-roster-action" data-toggle="tooltip" title="Add Another"><i class="fa fa-plus" aria-hidden="true"></i></button>' '<button type="button" id="addNewRow" class="btn btn-success btn-sm btn-roster-action" data-toggle="tooltip" title="Add Another"><i class="fa fa-plus" aria-hidden="true"></i></button>'
); );
} }
$('.' + str).remove(); $('.' + str).remove();
}); });
@@ -591,4 +590,4 @@
</script> </script>
</body> </body>
</html> </html>

View File

@@ -49,7 +49,7 @@
<label>Country</label> <label>Country</label>
<select class="form-control" name="countryCode" id="select_country" onchange="selectCountry(this)"> <select class="form-control" name="countryCode" id="select_country" onchange="selectCountry(this)">
<option value="">Select Country</option> <option value="">Select Country</option>
<option value="US">United State</option> <option value="US">United States</option>
<option value="CA">Canada</option> <option value="CA">Canada</option>
</select> </select>
</div> </div>

View File

@@ -49,7 +49,7 @@
<label>Country</label> <label>Country</label>
<select class="form-control" name="countryCode" id="select_country" onchange="selectCountry(this)" data-selected="{{ $array_address_book[0]->CountryCode }}"> <select class="form-control" name="countryCode" id="select_country" onchange="selectCountry(this)" data-selected="{{ $array_address_book[0]->CountryCode }}">
<option value="">Select Country</option> <option value="">Select Country</option>
<option value="US">United State</option> <option value="US">United States</option>
<option value="CA">Canada</option> <option value="CA">Canada</option>
</select> </select>
</div> </div>