feat: added StripeSuccess Route with session handling

This commit is contained in:
IceToast 2021-12-14 02:17:19 +01:00
parent 27794078cc
commit 921135c5dd
2 changed files with 80 additions and 10 deletions

View file

@ -62,7 +62,6 @@ class PaymentController extends Controller
*/
public function PaypalPay(Request $request, CreditProduct $creditProduct)
{
echo $creditProduct->currency_code;
$request = new OrdersCreateRequest();
$request->prefer('return=representation');
$request->body = [
@ -90,7 +89,7 @@ class PaymentController extends Controller
]
],
"application_context" => [
"cancel_url" => route('payment.PaypalCancel'),
"cancel_url" => route('payment.Cancel'),
"return_url" => route('payment.PaypalSuccess', ['product' => $creditProduct->id]),
'brand_name' => config('app.name', 'Laravel'),
'shipping_preference' => 'NO_SHIPPING'
@ -148,6 +147,7 @@ class PaymentController extends Controller
{
/** @var CreditProduct $creditProduct */
$creditProduct = CreditProduct::findOrFail($laravelRequest->input('product'));
/** @var User $user */
$user = Auth::user();
@ -221,7 +221,7 @@ class PaymentController extends Controller
/**
* @param Request $request
*/
public function PaypalCancel(Request $request)
public function Cancel(Request $request)
{
return redirect()->route('store.index')->with('success', 'Payment was Canceled');
}
@ -235,8 +235,6 @@ class PaymentController extends Controller
{
\Stripe\Stripe::setApiKey('sk_test_51Js6U8J2KSABgZztx8QWiohacnzGyIlpOk48DfSoUWPW8mhqLzxcQ5B9a1Wiz8jCC4Xfp3QeBDTsuSU7hkXEUksW00JyN08hoU');
$request = \Stripe\Checkout\Session::create([
'line_items' => [
[
@ -264,8 +262,8 @@ class PaymentController extends Controller
],
'mode' => 'payment',
'success_url' => route('payment.PaypalCancel'),
'cancel_url' => route('payment.PaypalCancel'),
'success_url' => route('payment.StripeSuccess').'?session_id={CHECKOUT_SESSION_ID}',
'cancel_url' => route('payment.Cancel'),
]);
@ -273,7 +271,76 @@ class PaymentController extends Controller
return redirect($request->url, 303);
}
/**
/**
* @param Request $request
*/
public function StripeSuccess(Request $request)
{
echo $request->input('product');
\Stripe\Stripe::setApiKey('sk_test_51Js6U8J2KSABgZztx8QWiohacnzGyIlpOk48DfSoUWPW8mhqLzxcQ5B9a1Wiz8jCC4Xfp3QeBDTsuSU7hkXEUksW00JyN08hoU');
/** @var CreditProduct $creditProduct */
$creditProduct = CreditProduct::findOrFail($request->input('product'));
/** @var User $user */
$user = Auth::user();
try{
$response = \Stripe\Checkout\Session::retrieve($request->input('session_id'));
if ($response->payment_status == "paid") {
//update credits
$user->increment('credits', $creditProduct->quantity);
//update server limit
if (Configuration::getValueByKey('SERVER_LIMIT_AFTER_IRL_PURCHASE') !== 0) {
if ($user->server_limit < Configuration::getValueByKey('SERVER_LIMIT_AFTER_IRL_PURCHASE')) {
$user->update(['server_limit' => Configuration::getValueByKey('SERVER_LIMIT_AFTER_IRL_PURCHASE')]);
}
}
//update role
if ($user->role == 'member') {
$user->update(['role' => 'client']);
}
//store payment
$payment = Payment::create([
'user_id' => $user->id,
'payment_id' => $response->result->id,
'payer_id' => $request->input('PayerID'),
'type' => 'Credits',
'status' => $response->payment_status,
'amount' => $creditProduct->quantity,
'price' => $creditProduct->price,
'tax_value' => $creditProduct->getTaxValue(),
'tax_percent' => $creditProduct->getTaxPercent(),
'total_price' => $creditProduct->getTotalPrice(),
'currency_code' => $creditProduct->currency_code,
'payer' => json_encode($response->result->payer),
]);
//payment notification
$user->notify(new ConfirmPaymentNotification($payment));
event(new UserUpdateCreditsEvent($user));
//redirect back to home
return redirect()->route('home')->with('success', 'Your credit balance has been increased!');
}
}catch (HttpException $ex) {
if (env('APP_ENV') == 'local') {
echo $ex->statusCode;
dd($ex->getMessage());
} else {
abort(422);
}
}
}
/**
* @return string
*/
protected function getStripeClientId()

View file

@ -62,10 +62,13 @@ Route::middleware(['auth', 'checkSuspended'])->group(function () {
#payments
Route::get('checkout/{creditProduct}', [PaymentController::class, 'checkOut'])->name('checkout');
Route::get('payment/PaypalSuccess', [PaymentController::class, 'PaypalSuccess'])->name('payment.PaypalSuccess');
Route::get('payment/PaypalCancel', [PaymentController::class, 'PaypalCancel'])->name('payment.PaypalCancel');
Route::get('payment/PaypalPay/{creditProduct}', [PaymentController::class, 'PaypalPay'])->name('payment.PaypalPay');
Route::get('payment/PaypalSuccess', [PaymentController::class, 'PaypalSuccess'])->name('payment.PaypalSuccess');
Route::get('payment/StripePay/{creditProduct}', [PaymentController::class, 'StripePay'])->name('payment.StripePay');
Route::get('payment/StripeSuccess', [PaymentController::class, 'StripeSuccess'])->name('payment.StripeSuccess');
Route::get('payment/Cancel', [PaymentController::class, 'Cancel'])->name('payment.Cancel');
Route::get('users/logbackin', [UserController::class, 'logBackIn'])->name('users.logbackin');