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/API/StripeController.php
<?php

namespace App\Http\Controllers\API;

use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Stripe\Stripe;
use Stripe\Account;
use Stripe\AccountLink;
use Stripe\Exception\ApiErrorException;
use App\Models\Cafe;

class StripeController extends Controller
{
    public function __construct()
    {
        Stripe::setApiKey('sk_test_51MprpUH68ivyxSXqFagCBFnQrOnnfeY1SASJ4UK5PGSqvcm0miA5EdGCO3ICtZb2HtIRW2eRdSizlet9DH3HkVRa00WT5e9EtX');
    }

    /**
     * Create a connected account (Express)
     */
    // public function createConnectedAccount(Request $request)
    // {
    //     try {
    //         // Get authenticated Cafe user
    //         $cafe = Cafe::find($request->user->id);

    //         if (!$cafe) {
    //             return response()->json([
    //                 'success' => false,
    //                 'message' => 'Cafe not found',
    //             ], 404);
    //         }
    //         Stripe::setApiKey('sk_test_51MprpUH68ivyxSXqFagCBFnQrOnnfeY1SASJ4UK5PGSqvcm0miA5EdGCO3ICtZb2HtIRW2eRdSizlet9DH3HkVRa00WT5e9EtX');


    //         // Check if account already exists
    //         if ($cafe->stripe_account_id) {
    //             $account = Account::retrieve($cafe->stripe_account_id);
    //         } else {
    //             // Create new Stripe Express account
    //             $account = Account::create([
    //                 'type' => 'express',
    //                 'country' => 'US',
    //                 'email' => $cafe->email,
    //                 'capabilities' => [
    //                     'card_payments' => ['requested' => true],
    //                     'transfers' => ['requested' => true],
    //                 ],
    //                 'business_type' => 'individual', // or 'company'
    //                 'business_profile' => [
    //                     'product_description' => 'Cafe services',
    //                     'mcc' => '5812', // MCC for Eating Places and Restaurants
    //                 ],
    //                 // Optional: pre-fill individual fields
    //                 // 'individual' => [
    //                 //     'first_name' => $cafe->owner_first_name,
    //                 //     'last_name' => $cafe->owner_last_name,
    //                 // ],
    //             ]);

    //             // Save account ID
    //             $cafe->stripe_account_id = $account->id;
    //             //$cafe->stripe_onboarding_completed = 1;
    //             $cafe->save();
    //         }

    //         // Create onboarding link
    //         $accountLink = AccountLink::create([
    //             'account' => $account->id,
    //             'refresh_url' => config('app.url') . '/login?redirect=stripe-onboarding',
    //             'return_url' => config('app.url') . '/stripe/onboarding/completed',
    //             'type' => 'account_onboarding',
    //         ]);

    //         return response()->json([
    //             'success' => true,
    //             'account_id' => $account->id,
    //             'charges_enabled' => $account->charges_enabled,
    //             'payouts_enabled' => $account->payouts_enabled,
    //             'onboarding_url' => $accountLink->url,
    //             'cafe' => $cafe,
    //             'message' => 'Stripe Connected account created successfully.',
    //         ]);
    //     } catch (ApiErrorException $e) {
    //         return response()->json([
    //             'success' => false,
    //             'error' => $e->getMessage(),
    //         ], 500);
    //     }
    // }


    public function createConnectedAccount(Request $request)
    {

        $cafe = Cafe::find($request->user->id);

        try {
            $account = Account::create([
                'type' => 'express',
                'country' => 'GB',
                'email' => $cafe->email,
                'capabilities' => [
                    'card_payments' => ['requested' => true],
                    'transfers' => ['requested' => true],
                ],
            ]);

            // You should store $account->id in DB (e.g., linked to the authenticated user)
            return response()->json([
                'success' => true,
                'account_id' => $account->id,
            ]);
        } catch (ApiErrorException $e) {
            return response()->json([
                'success' => false,
                'error' => $e->getMessage(),
            ], 500);
        }
    }

    /**
     * Generate onboarding link
     */
    public function generateOnboardingLink(Request $request)
    {
        $request->validate([
            'account_id' => 'required|string',
        ]);

        try {
            $link = AccountLink::create([
                'account' => $request->account_id,
                'refresh_url' => config('app.url') . '/api/stripe/onboarding/refresh',
                'return_url' => config('app.url') . '/api/stripe/onboarding/return',
                'type' => 'account_onboarding',
            ]);

            return response()->json([
                'success' => true,
                'url' => $link->url,
            ]);
        } catch (ApiErrorException $e) {
            return response()->json([
                'success' => false,
                'error' => $e->getMessage(),
            ], 500);
        }
    }

    /**
     * Check account status
     */
    public function getAccountStatus(Request $request)
    {
        $request->validate([
            'account_id' => 'required|string',
        ]);

        try {
            $account = Account::retrieve($request->account_id);
            $cafe = Cafe::find($request->user->id);
            $cafe->stripe_account_id = $account->id;
            $cafe->stripe_onboarding_completed = 1;
            $cafe->save();
            return response()->json([
                'success' => true,
                'charges_enabled' => $account->charges_enabled,
                'payouts_enabled' => $account->payouts_enabled,
                'details_submitted' => $account->details_submitted,
            ]);

        } catch (ApiErrorException $e) {
            return response()->json([
                'success' => false,
                'error' => $e->getMessage(),
            ], 500);
        }
    }
}