HEX
Server: Apache/2.4.52 (Ubuntu)
System: Linux ip-10-0-8-47 6.8.0-1021-aws #23~22.04.1-Ubuntu SMP Tue Dec 10 16:31:58 UTC 2024 aarch64
User: ubuntu (1000)
PHP: 8.1.2-1ubuntu2.22
Disabled: NONE
Upload Files
File: /var/www/javago-portal-updates/app/Http/Controllers/Cafe/StripeController.php
<?php

namespace App\Http\Controllers\Cafe;

use Illuminate\Http\Request;
use Stripe\Stripe;
use Stripe\Account;
use Stripe\AccountLink;
use Illuminate\Support\Facades\Auth;
use App\Models\Cafe;
use App\Http\Controllers\Controller;

class StripeController extends Controller
{
    public function index()
    {
        return view('cafe.stripe.connect');
    }

    public function createConnectAccount(Request $request)
    {
        try {
            Stripe::setApiKey('sk_test_51MprpUH68ivyxSXqFagCBFnQrOnnfeY1SASJ4UK5PGSqvcm0miA5EdGCO3ICtZb2HtIRW2eRdSizlet9DH3HkVRa00WT5e9EtX');

            //Stripe::setApiKey('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');
            // Create Express account
            $account = Account::create([
                'type' => 'express',
                'country' => 'GB',
                'email' => Auth::user()->email,
                'capabilities' => [
                    'card_payments' => ['requested' => true],
                    'transfers' => ['requested' => true],
                ],
                'business_profile' => [
                    'url' => config('app.url')
                ]
            ]);


            // Save Stripe account ID to user
            $user = Auth::user();
            $user->stripe_account_id = $account->id;
            $user->stripe_onboarding_completed = 1;
            $user->save();

            // Create account link for onboarding
            $accountLink = AccountLink::create([
                'account' => $account->id,
                'refresh_url' => route('cafe.stripe.refresh'),
                'return_url' => route('cafe.stripe.return'),
                'type' => 'account_onboarding',
            ]);

            return response()->json([
                'status' => 'success',
                'url' => $accountLink->url
            ]);

        } catch (\Exception $e) {
            return response()->json([
                'status' => 'error',
                'message' => $e->getMessage()
            ], 500);
        }
    }

    public function handleReturn()
    {
        $user = Auth::user();

        try {
            Stripe::setApiKey('sk_test_51MprpUH68ivyxSXqFagCBFnQrOnnfeY1SASJ4UK5PGSqvcm0miA5EdGCO3ICtZb2HtIRW2eRdSizlet9DH3HkVRa00WT5e9EtX');

            //Stripe::setApiKey('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');
            $account = Account::retrieve($user->stripe_account_id);

            if ($account->details_submitted && $account->payouts_enabled) {
                $user->stripe_onboarding_completed = 1;
                $user->save();

                return redirect()->route('cafe.dashboard')
                    ->with('success', 'Your Stripe account has been connected successfully!');
            }

            return redirect()->route('cafe.dashboard')
                ->with('warning', 'Please complete your Stripe onboarding to enable payouts.');

        } catch (\Exception $e) {
            return redirect()->route('cafe.dashboard')
                ->with('error', 'There was an error connecting your Stripe account.');
        }
    }

    public function handleRefresh()
    {
        try {
            Stripe::setApiKey('sk_test_51MprpUH68ivyxSXqFagCBFnQrOnnfeY1SASJ4UK5PGSqvcm0miA5EdGCO3ICtZb2HtIRW2eRdSizlet9DH3HkVRa00WT5e9EtX');

            //Stripe::setApiKey('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');


            $accountLink = AccountLink::create([
                'account' => Auth::user()->stripe_account_id,
                'refresh_url' => route('cafe.stripe.refresh'),
                'return_url' => route('cafe.stripe.return'),
                'type' => 'account_onboarding',
            ]);

            return redirect($accountLink->url);

        } catch (\Exception $e) {
            return redirect()->route('cafe.dashboard')
                ->with('error', 'Failed to refresh Stripe onboarding link.');
        }
    }

    public function checkStripeAccount()
    {
        $user = Auth::user();
        Stripe::setApiKey('sk_test_51MprpUH68ivyxSXqFagCBFnQrOnnfeY1SASJ4UK5PGSqvcm0miA5EdGCO3ICtZb2HtIRW2eRdSizlet9DH3HkVRa00WT5e9EtX');

        //Stripe::setApiKey('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');
        // Check if the user has a Stripe account and whether onboarding is complete
        if ($user->stripe_account_id) {
            $account = Account::retrieve($user->stripe_account_id);
            $onboardingCompleted = $account->details_submitted && $account->payouts_enabled;

            return response()->json([
                'status' => 'success',
                'stripe_account_id' => $user->stripe_account_id,
                'stripe_onboarding_completed' => $onboardingCompleted
            ]);
        }

        return response()->json(['status' => 'success', 'stripe_account_id' => null, 'stripe_onboarding_completed' => false]);
    }

    public function completeOnboarding(Request $request)
    {
        $user = Auth::user();
        Stripe::setApiKey('sk_test_51MprpUH68ivyxSXqFagCBFnQrOnnfeY1SASJ4UK5PGSqvcm0miA5EdGCO3ICtZb2HtIRW2eRdSizlet9DH3HkVRa00WT5e9EtX');

        //Stripe::setApiKey('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');

        // Ensure the user has a Stripe account
        if (!$user->stripe_account_id) {
            return response()->json(['status' => 'error', 'message' => 'No Stripe account found.'], 400);
        }

        try {
            // Retrieve the Stripe account
            $account = Account::retrieve($user->stripe_account_id);

            // Check if onboarding is completed (details are submitted and payouts are enabled)
            if ($account->details_submitted && $account->payouts_enabled) {
                // Mark onboarding as complete in the database
                $user->stripe_onboarding_completed = 1;
                $user->save();

                return response()->json([
                    'status' => 'success',
                    'message' => 'Onboarding completed successfully.',
                    'redirect' => route('cafe.dashboard') // Optionally redirect to the dashboard after completing onboarding
                ]);
            } else {
                // Generate the account link for completing onboarding if it's not yet finished
                $accountLink = AccountLink::create([
                    'account' => $account->id,
                    'refresh_url' => route('cafe.stripe.refresh'),
                    'return_url' => route('cafe.stripe.return'),
                    'type' => 'account_onboarding',
                ]);

                return response()->json([
                    'status' => 'success',
                    'url' => $accountLink->url // Return the onboarding URL to continue
                ]);
            }

        } catch (\Exception $e) {
            return response()->json([
                'status' => 'error',
                'message' => $e->getMessage()
            ], 500);
        }
    }
}