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);
}
}
}