From a34825a6920fc7c917c555138c909ad0ac55a488 Mon Sep 17 00:00:00 2001
From: IceToast <>
Date: Sun, 15 Jan 2023 01:41:16 +0100
Subject: [PATCH] =?UTF-8?q?feat:=20=E2=9C=A8=20Moved=20Stripe=20functions?=
=?UTF-8?q?=20to=20extension?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../PaymentGateways/Stripe/index.php | 400 ++++++++++++++++
.../Controllers/Admin/PaymentController.php | 443 +-----------------
2 files changed, 416 insertions(+), 427 deletions(-)
create mode 100644 app/Extensions/PaymentGateways/Stripe/index.php
diff --git a/app/Extensions/PaymentGateways/Stripe/index.php b/app/Extensions/PaymentGateways/Stripe/index.php
new file mode 100644
index 00000000..134ca414
--- /dev/null
+++ b/app/Extensions/PaymentGateways/Stripe/index.php
@@ -0,0 +1,400 @@
+shopProduct);
+
+ // check if the price is valid for stripe
+ if (!checkPriceAmount($shopProduct->getTotalPrice(), strtoupper($shopProduct->currency_code), 'stripe')) {
+ Redirect::route('home')->with('error', __('The product you chose can\'t be purchased with this payment method. The total amount is too small. Please buy a bigger amount or try a different payment method.'))->send();
+ return;
+ }
+
+
+ // create payment
+ $payment = Payment::create([
+ 'user_id' => $user->id,
+ 'payment_id' => null,
+ 'payment_method' => 'stripe',
+ 'type' => $shopProduct->type,
+ 'status' => 'open',
+ 'amount' => $shopProduct->quantity,
+ 'price' => $shopProduct->price - ($shopProduct->price * PartnerDiscount::getDiscount() / 100),
+ 'tax_value' => $shopProduct->getTaxValue(),
+ 'total_price' => $shopProduct->getTotalPrice(),
+ 'tax_percent' => $shopProduct->getTaxPercent(),
+ 'currency_code' => $shopProduct->currency_code,
+ 'shop_item_product_id' => $shopProduct->id,
+ ]);
+
+ $stripeClient = getStripeClient();
+ $request = $stripeClient->checkout->sessions->create([
+ 'line_items' => [
+ [
+ 'price_data' => [
+ 'currency' => $shopProduct->currency_code,
+ 'product_data' => [
+ 'name' => $shopProduct->display . (PartnerDiscount::getDiscount() ? (' (' . __('Discount') . ' ' . PartnerDiscount::getDiscount() . '%)') : ''),
+ 'description' => $shopProduct->description,
+ ],
+ 'unit_amount_decimal' => round($shopProduct->getPriceAfterDiscount() * 100, 2),
+ ],
+ 'quantity' => 1,
+ ],
+ [
+ 'price_data' => [
+ 'currency' => $shopProduct->currency_code,
+ 'product_data' => [
+ 'name' => __('Tax'),
+ 'description' => $shopProduct->getTaxPercent() . '%',
+ ],
+ 'unit_amount_decimal' => round($shopProduct->getTaxValue(), 2) * 100,
+ ],
+ 'quantity' => 1,
+ ],
+ ],
+
+ 'mode' => 'payment',
+ 'payment_method_types' => str_getcsv(config('SETTINGS::PAYMENTS:STRIPE:METHODS')),
+ 'success_url' => route('payment.StripeSuccess', ['payment' => $payment->id]) . '&session_id={CHECKOUT_SESSION_ID}',
+ 'cancel_url' => route('payment.Cancel'),
+ ]);
+
+ Redirect::to($request->url)->send();
+}
+
+/**
+ * @param Request $request
+ */
+function StripeSuccess(Request $request)
+{
+ $user = Auth::user();
+ error_log('StripeSuccess');
+ $payment = Payment::findOrFail($request->input('payment'));
+ $shopProduct = ShopProduct::findOrFail($payment->shop_item_product_id);
+
+
+ $stripeClient = getStripeClient();
+ try {
+ //get stripe data
+ $paymentSession = $stripeClient->checkout->sessions->retrieve($request->input('session_id'));
+ $paymentIntent = $stripeClient->paymentIntents->retrieve($paymentSession->payment_intent);
+
+ //get DB entry of this payment ID if existing
+ $paymentDbEntry = Payment::where('payment_id', $paymentSession->payment_intent)->count();
+
+ // check if payment is 100% completed and payment does not exist in db already
+ if ($paymentSession->status == 'complete' && $paymentIntent->status == 'succeeded' && $paymentDbEntry == 0) {
+
+ //update payment
+ $payment->update([
+ 'payment_id' => $paymentSession->payment_intent,
+ 'status' => 'paid',
+ ]);
+
+ //payment notification
+ $user->notify(new ConfirmPaymentNotification($payment));
+
+ event(new UserUpdateCreditsEvent($user));
+ event(new PaymentEvent($user, $payment, $shopProduct));
+
+ //redirect back to home
+ Redirect::route('home')->with('success', 'Payment successful')->send();
+ } else {
+ if ($paymentIntent->status == 'processing') {
+
+ //update payment
+ $payment->update([
+ 'payment_id' => $paymentSession->payment_intent,
+ 'status' => 'processing',
+ ]);
+
+ // todo invoice
+ event(new PaymentEvent($user, $payment, $shopProduct));
+
+ Redirect::route('home')->with('success', 'Your payment is being processed')->send();
+ }
+
+ if ($paymentDbEntry == 0 && $paymentIntent->status != 'processing') {
+ $stripeClient->paymentIntents->cancel($paymentIntent->id);
+
+ //redirect back to home
+ Redirect::route('home')->with('info', __('Your payment has been canceled!'))->send();
+ } else {
+ abort(402);
+ }
+ }
+ } catch (Exception $e) {
+ if (env('APP_ENV') == 'local') {
+ dd($e->getMessage());
+ } else {
+ abort(422);
+ }
+ }
+}
+
+/**
+ * @param Request $request
+ */
+function handleStripePaymentSuccessHook($paymentIntent)
+{
+ try {
+ // Get payment db entry
+ $payment = Payment::where('payment_id', $paymentIntent->id)->first();
+ $user = User::where('id', $payment->user_id)->first();
+ $shopProduct = ShopProduct::findOrFail($payment->shop_item_product_id);
+
+ if ($paymentIntent->status == 'succeeded' && $payment->status == 'processing') {
+
+
+ //update payment db entry status
+ $payment->update(['status' => 'paid']);
+
+ //payment notification
+ $user->notify(new ConfirmPaymentNotification($payment));
+ event(new UserUpdateCreditsEvent($user));
+ event(new PaymentEvent($user, $payment, $shopProduct));
+ }
+ } catch (Exception $ex) {
+ abort(422);
+ }
+}
+
+/**
+ * @param Request $request
+ */
+function StripeWebhooks(Request $request)
+{
+ Stripe::setApiKey(getStripeSecret());
+
+ try {
+ $payload = @file_get_contents('php://input');
+ $sig_header = $request->header('Stripe-Signature');
+ $event = null;
+ $event = \Stripe\Webhook::constructEvent(
+ $payload,
+ $sig_header,
+ getStripeEndpointSecret()
+ );
+ } catch (\UnexpectedValueException $e) {
+ // Invalid payload
+
+ abort(400);
+ } catch (SignatureVerificationException $e) {
+ // Invalid signature
+
+ abort(400);
+ }
+
+ // Handle the event
+ switch ($event->type) {
+ case 'payment_intent.succeeded':
+ $paymentIntent = $event->data->object; // contains a \Stripe\PaymentIntent
+ handleStripePaymentSuccessHook($paymentIntent);
+ break;
+ default:
+ echo 'Received unknown event type ' . $event->type;
+ }
+}
+
+/**
+ * @return \Stripe\StripeClient
+ */
+function getStripeClient()
+{
+ return new StripeClient(getStripeSecret());
+}
+
+/**
+ * @return string
+ */
+function getStripeSecret()
+{
+ return env('APP_ENV') == 'local'
+ ? config('SETTINGS::PAYMENTS:STRIPE:TEST_SECRET')
+ : config('SETTINGS::PAYMENTS:STRIPE:SECRET');
+}
+
+/**
+ * @return string
+ */
+function getStripeEndpointSecret()
+{
+ return env('APP_ENV') == 'local'
+ ? config('SETTINGS::PAYMENTS:STRIPE:ENDPOINT_TEST_SECRET')
+ : config('SETTINGS::PAYMENTS:STRIPE:ENDPOINT_SECRET');
+}
+/**
+ * @param $amount
+ * @param $currencyCode
+ * @param $payment_method
+ * @return bool
+ * @description check if the amount is higher than the minimum amount for the stripe gateway
+ */
+function checkPriceAmount($amount, $currencyCode, $payment_method)
+{
+ $minimums = [
+ "USD" => [
+ "paypal" => 0,
+ "stripe" => 0.5
+ ],
+ "AED" => [
+ "paypal" => 0,
+ "stripe" => 2
+ ],
+ "AUD" => [
+ "paypal" => 0,
+ "stripe" => 0.5
+ ],
+ "BGN" => [
+ "paypal" => 0,
+ "stripe" => 1
+ ],
+ "BRL" => [
+ "paypal" => 0,
+ "stripe" => 0.5
+ ],
+ "CAD" => [
+ "paypal" => 0,
+ "stripe" => 0.5
+ ],
+ "CHF" => [
+ "paypal" => 0,
+ "stripe" => 0.5
+ ],
+ "CZK" => [
+ "paypal" => 0,
+ "stripe" => 15
+ ],
+ "DKK" => [
+ "paypal" => 0,
+ "stripe" => 2.5
+ ],
+ "EUR" => [
+ "paypal" => 0,
+ "stripe" => 0.5
+ ],
+ "GBP" => [
+ "paypal" => 0,
+ "stripe" => 0.3
+ ],
+ "HKD" => [
+ "paypal" => 0,
+ "stripe" => 4
+ ],
+ "HRK" => [
+ "paypal" => 0,
+ "stripe" => 0.5
+ ],
+ "HUF" => [
+ "paypal" => 0,
+ "stripe" => 175
+ ],
+ "INR" => [
+ "paypal" => 0,
+ "stripe" => 0.5
+ ],
+ "JPY" => [
+ "paypal" => 0,
+ "stripe" => 0.5
+ ],
+ "MXN" => [
+ "paypal" => 0,
+ "stripe" => 10
+ ],
+ "MYR" => [
+ "paypal" => 0,
+ "stripe" => 2
+ ],
+ "NOK" => [
+ "paypal" => 0,
+ "stripe" => 3
+ ],
+ "NZD" => [
+ "paypal" => 0,
+ "stripe" => 0.5
+ ],
+ "PLN" => [
+ "paypal" => 0,
+ "stripe" => 2
+ ],
+ "RON" => [
+ "paypal" => 0,
+ "stripe" => 2
+ ],
+ "SEK" => [
+ "paypal" => 0,
+ "stripe" => 3
+ ],
+ "SGD" => [
+ "paypal" => 0,
+ "stripe" => 0.5
+ ],
+ "THB" => [
+ "paypal" => 0,
+ "stripe" => 10
+ ]
+ ];
+ return $amount >= $minimums[$currencyCode][$payment_method];
+}
+
+function getStripeConfig()
+{
+ return [
+ "name" => "Stripe",
+ "description" => "Stripe payment gateway",
+ "mode" => [
+ "type" => "select",
+ "label" => "Mode",
+ "value" => config("APP_ENV") == 'local' ? "sandbox" : "live",
+ "options" => [
+ "sandbox" => "Sandbox",
+ "live" => "Live",
+ ],
+ ],
+ "TEST_SECRET" => [
+ "type" => "text",
+ "label" => "Test Secret Key",
+ "value" => config("SETTINGS::PAYMENTS:STRIPE:TEST_SECRET"),
+ ],
+ "SECRET" => [
+ "type" => "text",
+ "label" => "Live Secret Key",
+ "value" => config("SETTINGS::PAYMENTS:STRIPE:SECRET"),
+ ],
+ "ENDPOINT_TEST_SECRET" => [
+ "type" => "text",
+ "label" => "Test Endpoint Secret",
+ "value" => config("SETTINGS::PAYMENTS:STRIPE:ENDPOINT_TEST_SECRET"),
+ ],
+ "ENDPOINT_SECRET" => [
+ "type" => "text",
+ "label" => "Live Endpoint Secret",
+ "value" => config("SETTINGS::PAYMENTS:STRIPE:ENDPOINT_SECRET"),
+ ],
+ ];
+}
diff --git a/app/Http/Controllers/Admin/PaymentController.php b/app/Http/Controllers/Admin/PaymentController.php
index a543bc02..11cf78c3 100644
--- a/app/Http/Controllers/Admin/PaymentController.php
+++ b/app/Http/Controllers/Admin/PaymentController.php
@@ -60,8 +60,7 @@ class PaymentController extends Controller
$paymentGateways[] = $payment;
}
}
-
-
+
return view('store.checkout')->with([
'product' => $shopProduct,
'discountpercent' => PartnerDiscount::getDiscount(),
@@ -83,8 +82,8 @@ class PaymentController extends Controller
{
//dd($shopProduct);
//check if the product is really free or the discount is 100%
- if($shopProduct->getTotalPrice()>0) return redirect()->route('home')->with('error', __('An error ocured. Please try again.'));
-
+ if ($shopProduct->getTotalPrice() > 0) return redirect()->route('home')->with('error', __('An error ocured. Please try again.'));
+
//give product
/** @var User $user */
$user = Auth::user();
@@ -92,14 +91,14 @@ class PaymentController extends Controller
//not updating server limit
//update User with bought item
- if ($shopProduct->type=="Credits") {
+ if ($shopProduct->type == "Credits") {
$user->increment('credits', $shopProduct->quantity);
- }elseif ($shopProduct->type=="Server slots"){
+ } elseif ($shopProduct->type == "Server slots") {
$user->increment('server_limit', $shopProduct->quantity);
}
//skipped the referral commission, because the user did not pay anything.
-
+
//not giving client role
//store payment
@@ -110,7 +109,7 @@ class PaymentController extends Controller
'type' => $shopProduct->type,
'status' => 'paid',
'amount' => $shopProduct->quantity,
- 'price' => $shopProduct->price - ($shopProduct->price*PartnerDiscount::getDiscount()/100),
+ 'price' => $shopProduct->price - ($shopProduct->price * PartnerDiscount::getDiscount() / 100),
'tax_value' => $shopProduct->getTaxValue(),
'tax_percent' => $shopProduct->getTaxPercent(),
'total_price' => $shopProduct->getTotalPrice(),
@@ -126,8 +125,8 @@ class PaymentController extends Controller
return redirect()->route('home')->with('success', __('Your credit balance has been increased!'));
}
- public function pay(Request $request)
- {
+ public function pay(Request $request)
+ {
$product = ShopProduct::find($request->product_id);
$paymentGateway = $request->payment_method;
@@ -142,416 +141,6 @@ class PaymentController extends Controller
return redirect()->route('store.index')->with('info', 'Payment was Canceled');
}
- /**
- * @param Request $request
- * @param ShopProduct $shopProduct
- * @return RedirectResponse
- */
- public function StripePay(Request $request, ShopProduct $shopProduct)
- {
- if(!$this->checkAmount($shopProduct->getTotalPrice(), strtoupper($shopProduct->currency_code), "stripe")) return redirect()->route('home')->with('error', __('The product you chose canĀ“t be purchased with this payment method. The total amount is too small. Please buy a bigger amount or try a different payment method.'));
- $stripeClient = $this->getStripeClient();
-
- $request = $stripeClient->checkout->sessions->create([
- 'line_items' => [
- [
- 'price_data' => [
- 'currency' => $shopProduct->currency_code,
- 'product_data' => [
- 'name' => $shopProduct->display.(PartnerDiscount::getDiscount() ? (' ('.__('Discount').' '.PartnerDiscount::getDiscount().'%)') : ''),
- 'description' => $shopProduct->description,
- ],
- 'unit_amount_decimal' => round($shopProduct->getPriceAfterDiscount() * 100, 2),
- ],
- 'quantity' => 1,
- ],
- [
- 'price_data' => [
- 'currency' => $shopProduct->currency_code,
- 'product_data' => [
- 'name' => __('Tax'),
- 'description' => $shopProduct->getTaxPercent().'%',
- ],
- 'unit_amount_decimal' => round($shopProduct->getTaxValue(), 2) * 100,
- ],
- 'quantity' => 1,
- ],
- ],
-
- 'mode' => 'payment',
- 'payment_method_types' => str_getcsv(config('SETTINGS::PAYMENTS:STRIPE:METHODS')),
- 'success_url' => route('payment.StripeSuccess', ['product' => $shopProduct->id]).'&session_id={CHECKOUT_SESSION_ID}',
- 'cancel_url' => route('payment.Cancel'),
- ]);
-
- return redirect($request->url, 303);
- }
-
- /**
- * @param Request $request
- */
- public function StripeSuccess(Request $request)
- {
- /** @var ShopProduct $shopProduct */
- $shopProduct = ShopProduct::findOrFail($request->input('product'));
-
- /** @var User $user */
- $user = Auth::user();
-
- $stripeClient = $this->getStripeClient();
-
- try {
- //get stripe data
- $paymentSession = $stripeClient->checkout->sessions->retrieve($request->input('session_id'));
- $paymentIntent = $stripeClient->paymentIntents->retrieve($paymentSession->payment_intent);
-
- //get DB entry of this payment ID if existing
- $paymentDbEntry = Payment::where('payment_id', $paymentSession->payment_intent)->count();
-
- // check if payment is 100% completed and payment does not exist in db already
- if ($paymentSession->status == 'complete' && $paymentIntent->status == 'succeeded' && $paymentDbEntry == 0) {
-
- //update server limit
- if (config('SETTINGS::USER:SERVER_LIMIT_AFTER_IRL_PURCHASE') !== 0) {
- if ($user->server_limit < config('SETTINGS::USER:SERVER_LIMIT_AFTER_IRL_PURCHASE')) {
- $user->update(['server_limit' => config('SETTINGS::USER:SERVER_LIMIT_AFTER_IRL_PURCHASE')]);
- }
- }
-
- //update User with bought item
- if ($shopProduct->type == 'Credits') {
- $user->increment('credits', $shopProduct->quantity);
- } elseif ($shopProduct->type == 'Server slots') {
- $user->increment('server_limit', $shopProduct->quantity);
- }
-
- //update role give Referral-reward
- if ($user->role == 'member') {
- $user->update(['role' => 'client']);
-
- if ((config('SETTINGS::REFERRAL:MODE') == 'commission' || config('SETTINGS::REFERRAL:MODE') == 'both') && $shopProduct->type == 'Credits') {
- if ($ref_user = DB::table('user_referrals')->where('registered_user_id', '=', $user->id)->first()) {
- $ref_user = User::findOrFail($ref_user->referral_id);
- $increment = number_format($shopProduct->quantity / 100 * config('SETTINGS::REFERRAL:PERCENTAGE'), 0, '', '');
- $ref_user->increment('credits', $increment);
-
- //LOGS REFERRALS IN THE ACTIVITY LOG
- activity()
- ->performedOn($user)
- ->causedBy($ref_user)
- ->log('gained '.$increment.' '.config('SETTINGS::SYSTEM:CREDITS_DISPLAY_NAME').' for commission-referral of '.$user->name.' (ID:'.$user->id.')');
- }
- }
- }
-
- //store paid payment
- $payment = Payment::create([
- 'user_id' => $user->id,
- 'payment_id' => $paymentSession->payment_intent,
- 'payment_method' => 'stripe',
- 'type' => $shopProduct->type,
- 'status' => 'paid',
- 'amount' => $shopProduct->quantity,
- 'price' => $shopProduct->price - ($shopProduct->price * PartnerDiscount::getDiscount() / 100),
- 'tax_value' => $shopProduct->getTaxValue(),
- 'total_price' => $shopProduct->getTotalPrice(),
- 'tax_percent' => $shopProduct->getTaxPercent(),
- 'currency_code' => $shopProduct->currency_code,
- 'shop_item_product_id' => $shopProduct->id,
- ]);
-
- //payment notification
- $user->notify(new ConfirmPaymentNotification($payment));
-
- event(new UserUpdateCreditsEvent($user));
-
- //only create invoice if SETTINGS::INVOICE:ENABLED is true
- if (config('SETTINGS::INVOICE:ENABLED') == 'true') {
- $this->createInvoice($user, $payment, 'paid', $shopProduct->currency_code);
- }
-
- //redirect back to home
- return redirect()->route('home')->with('success', __('Your credit balance has been increased!'));
- } else {
- if ($paymentIntent->status == 'processing') {
-
- //store processing payment
- $payment = Payment::create([
- 'user_id' => $user->id,
- 'payment_id' => $paymentSession->payment_intent,
- 'payment_method' => 'stripe',
- 'type' => $shopProduct->type,
- 'status' => 'processing',
- 'amount' => $shopProduct->quantity,
- 'price' => $shopProduct->price,
- 'tax_value' => $shopProduct->getTaxValue(),
- 'total_price' => $shopProduct->getTotalPrice(),
- 'tax_percent' => $shopProduct->getTaxPercent(),
- 'currency_code' => $shopProduct->currency_code,
- 'shop_item_product_id' => $shopProduct->id,
- ]);
-
- //only create invoice if SETTINGS::INVOICE:ENABLED is true
- if (config('SETTINGS::INVOICE:ENABLED') == 'true') {
- $this->createInvoice($user, $payment, 'paid', $shopProduct->currency_code);
- }
-
- //redirect back to home
- return redirect()->route('home')->with('success', __('Your payment is being processed!'));
- }
- if ($paymentDbEntry == 0 && $paymentIntent->status != 'processing') {
- $stripeClient->paymentIntents->cancel($paymentIntent->id);
-
- //redirect back to home
- return redirect()->route('home')->with('success', __('Your payment has been canceled!'));
- } else {
- abort(402);
- }
- }
- } catch (HttpException $ex) {
- if (env('APP_ENV') == 'local') {
- echo $ex->statusCode;
- dd($ex->getMessage());
- } else {
- abort(422);
- }
- }
- }
-
- /**
- * @param Request $request
- */
- protected function handleStripePaymentSuccessHook($paymentIntent)
- {
- try {
- // Get payment db entry
- $payment = Payment::where('payment_id', $paymentIntent->id)->first();
- $user = User::where('id', $payment->user_id)->first();
-
- if ($paymentIntent->status == 'succeeded' && $payment->status == 'processing') {
-
- //update server limit
- if (config('SETTINGS::USER:SERVER_LIMIT_AFTER_IRL_PURCHASE') !== 0) {
- if ($user->server_limit < config('SETTINGS::USER:SERVER_LIMIT_AFTER_IRL_PURCHASE')) {
- $user->update(['server_limit' => config('SETTINGS::USER:SERVER_LIMIT_AFTER_IRL_PURCHASE')]);
- }
- }
- //update User with bought item
- if ($shopProduct->type == 'Credits') {
- $user->increment('credits', $shopProduct->quantity);
- } elseif ($shopProduct->type == 'Server slots') {
- $user->increment('server_limit', $shopProduct->quantity);
- }
-
- //update role give Referral-reward
- if ($user->role == 'member') {
- $user->update(['role' => 'client']);
-
- if ((config('SETTINGS::REFERRAL:MODE') == 'commission' || config('SETTINGS::REFERRAL:MODE') == 'both') && $shopProduct->type == 'Credits') {
- if ($ref_user = DB::table('user_referrals')->where('registered_user_id', '=', $user->id)->first()) {
- $ref_user = User::findOrFail($ref_user->referral_id);
- $increment = number_format($shopProduct->quantity / 100 * config('SETTINGS::REFERRAL:PERCENTAGE'), 0, '', '');
- $ref_user->increment('credits', $increment);
-
- //LOGS REFERRALS IN THE ACTIVITY LOG
- activity()
- ->performedOn($user)
- ->causedBy($ref_user)
- ->log('gained '.$increment.' '.config('SETTINGS::SYSTEM:CREDITS_DISPLAY_NAME').' for commission-referral of '.$user->name.' (ID:'.$user->id.')');
- }
- }
- }
-
- //update payment db entry status
- $payment->update(['status' => 'paid']);
-
- //payment notification
- $user->notify(new ConfirmPaymentNotification($payment));
- event(new UserUpdateCreditsEvent($user));
-
- //only create invoice if SETTINGS::INVOICE:ENABLED is true
- if (config('SETTINGS::INVOICE:ENABLED') == 'true') {
- $this->createInvoice($user, $payment, 'paid', strtoupper($paymentIntent->currency));
- }
- }
- } catch (HttpException $ex) {
- abort(422);
- }
- }
-
- /**
- * @param Request $request
- */
- public function StripeWebhooks(Request $request)
- {
- \Stripe\Stripe::setApiKey($this->getStripeSecret());
-
- try {
- $payload = @file_get_contents('php://input');
- $sig_header = $request->header('Stripe-Signature');
- $event = null;
- $event = \Stripe\Webhook::constructEvent(
- $payload,
- $sig_header,
- $this->getStripeEndpointSecret()
- );
- } catch (\UnexpectedValueException $e) {
- // Invalid payload
-
- abort(400);
- } catch (\Stripe\Exception\SignatureVerificationException $e) {
- // Invalid signature
-
- abort(400);
- }
-
- // Handle the event
- switch ($event->type) {
- case 'payment_intent.succeeded':
- $paymentIntent = $event->data->object; // contains a \Stripe\PaymentIntent
- $this->handleStripePaymentSuccessHook($paymentIntent);
- break;
- default:
- echo 'Received unknown event type '.$event->type;
- }
- }
-
- /**
- * @return \Stripe\StripeClient
- */
- protected function getStripeClient()
- {
- return new \Stripe\StripeClient($this->getStripeSecret());
- }
-
- /**
- * @return string
- */
- protected function getStripeSecret()
- {
- return env('APP_ENV') == 'local'
- ? config('SETTINGS::PAYMENTS:STRIPE:TEST_SECRET')
- : config('SETTINGS::PAYMENTS:STRIPE:SECRET');
- }
-
- /**
- * @return string
- */
- protected function getStripeEndpointSecret()
- {
- return env('APP_ENV') == 'local'
- ? config('SETTINGS::PAYMENTS:STRIPE:ENDPOINT_TEST_SECRET')
- : config('SETTINGS::PAYMENTS:STRIPE:ENDPOINT_SECRET');
- }
-
- public function checkAmount($amount, $currencyCode, $payment_method)
- {
- $minimums = [
- "USD" => [
- "paypal" => 0,
- "stripe" => 0.5
- ],
- "AED" => [
- "paypal" => 0,
- "stripe" => 2
- ],
- "AUD" => [
- "paypal" => 0,
- "stripe" => 0.5
- ],
- "BGN" => [
- "paypal" => 0,
- "stripe" => 1
- ],
- "BRL" => [
- "paypal" => 0,
- "stripe" => 0.5
- ],
- "CAD" => [
- "paypal" => 0,
- "stripe" => 0.5
- ],
- "CHF" => [
- "paypal" => 0,
- "stripe" => 0.5
- ],
- "CZK" => [
- "paypal" => 0,
- "stripe" => 15
- ],
- "DKK" => [
- "paypal" => 0,
- "stripe" => 2.5
- ],
- "EUR" => [
- "paypal" => 0,
- "stripe" => 0.5
- ],
- "GBP" => [
- "paypal" => 0,
- "stripe" => 0.3
- ],
- "HKD" => [
- "paypal" => 0,
- "stripe" => 4
- ],
- "HRK" => [
- "paypal" => 0,
- "stripe" => 0.5
- ],
- "HUF" => [
- "paypal" => 0,
- "stripe" => 175
- ],
- "INR" => [
- "paypal" => 0,
- "stripe" => 0.5
- ],
- "JPY" => [
- "paypal" => 0,
- "stripe" => 0.5
- ],
- "MXN" => [
- "paypal" => 0,
- "stripe" => 10
- ],
- "MYR" => [
- "paypal" => 0,
- "stripe" => 2
- ],
- "NOK" => [
- "paypal" => 0,
- "stripe" => 3
- ],
- "NZD" => [
- "paypal" => 0,
- "stripe" => 0.5
- ],
- "PLN" => [
- "paypal" => 0,
- "stripe" => 2
- ],
- "RON" => [
- "paypal" => 0,
- "stripe" => 2
- ],
- "SEK" => [
- "paypal" => 0,
- "stripe" => 3
- ],
- "SGD" => [
- "paypal" => 0,
- "stripe" => 0.5
- ],
- "THB" => [
- "paypal" => 0,
- "stripe" => 10
- ]
- ];
- return $amount >= $minimums[$currencyCode][$payment_method];
- }
-
-
/**
* @return JsonResponse|mixed
*
@@ -564,9 +153,7 @@ class PaymentController extends Controller
return datatables($query)
->addColumn('user', function (Payment $payment) {
- return
- ($payment->user)?''.$payment->user->name.'':__('Unknown user');
-
+ return ($payment->user) ? '' . $payment->user->name . '' : __('Unknown user');
})
->editColumn('price', function (Payment $payment) {
return $payment->formatToCurrency($payment->price);
@@ -575,18 +162,20 @@ class PaymentController extends Controller
return $payment->formatToCurrency($payment->tax_value);
})
->editColumn('tax_percent', function (Payment $payment) {
- return $payment->tax_percent.' %';
+ return $payment->tax_percent . ' %';
})
->editColumn('total_price', function (Payment $payment) {
return $payment->formatToCurrency($payment->total_price);
})
->editColumn('created_at', function (Payment $payment) {
- return ['display' => $payment->created_at ? $payment->created_at->diffForHumans() : '',
- 'raw' => $payment->created_at ? strtotime($payment->created_at) : ''];
+ return [
+ 'display' => $payment->created_at ? $payment->created_at->diffForHumans() : '',
+ 'raw' => $payment->created_at ? strtotime($payment->created_at) : ''
+ ];
})
->addColumn('actions', function (Payment $payment) {
- return '';
+ return '';
})
->rawColumns(['actions', 'user'])
->make(true);