diff --git a/app/Http/Controllers/StripeConnectController.php b/app/Http/Controllers/StripeConnectController.php index 406dccca1415..45451cebecbf 100644 --- a/app/Http/Controllers/StripeConnectController.php +++ b/app/Http/Controllers/StripeConnectController.php @@ -12,6 +12,7 @@ namespace App\Http\Controllers; +use App\Factory\CompanyGatewayFactory; use App\Http\Requests\StripeConnect\InitializeStripeConnectRequest; use App\Models\CompanyGateway; use App\PaymentDrivers\Stripe\Connect\Account; @@ -27,25 +28,42 @@ class StripeConnectController extends BaseController */ public function initialize(InitializeStripeConnectRequest $request, string $token) { -// $request->getTokenContent(); + // Should we check if company has set country in the ap? Otherwise this will fail. $data = [ 'type' => 'standard', - 'email' => 'user@example.com', - 'country' => 'US', + 'email' => $request->getContact()->email, + 'country' => $request->getCompany()->country()->iso_3166_2, ]; + $exists = CompanyGateway::query() + ->where('gateway_key', 'd14dd26a47cecc30fdd65700bfb67b34') + ->where('company_id', $request->getCompany()->id) + ->first(); + + if ($exists) { + return redirect()->route('stripe_connect.return'); + } + $account = Account::create($data); - $link = Account::link($account->id); + $link = Account::link($account->id, $token); - // Store account->id into company_gateways. + $company_gateway = CompanyGatewayFactory::create($request->getCompany()->id, $request->getContact()->client->user->id); + + $company_gateway->fill([ + 'gateway_key' => 'd14dd26a47cecc30fdd65700bfb67b34', + 'fees_and_limits' => [], + 'config' => encrypt(json_encode(['account_id' => $account->id])) + ]); + + $company_gateway->save(); return redirect($link['url']); } public function completed() { - dd(request()->all()); + return render('gateways.stripe.connect.completed'); } } diff --git a/app/Http/Requests/StripeConnect/InitializeStripeConnectRequest.php b/app/Http/Requests/StripeConnect/InitializeStripeConnectRequest.php index 0d3a333c80e9..f0a26718bb0b 100644 --- a/app/Http/Requests/StripeConnect/InitializeStripeConnectRequest.php +++ b/app/Http/Requests/StripeConnect/InitializeStripeConnectRequest.php @@ -12,6 +12,8 @@ namespace App\Http\Requests\StripeConnect; +use App\Models\ClientContact; +use App\Models\Company; use Illuminate\Foundation\Http\FormRequest; use Illuminate\Support\Facades\Cache; @@ -46,10 +48,24 @@ class InitializeStripeConnectRequest extends FormRequest */ public function getTokenContent() { - $data = Cache::get($this->input('token')); + $data = Cache::get($this->token); abort_if(!$data, 404); + abort_if(!array_key_exists('user_id', $data), 404); + + abort_if(!array_key_exists('company_key', $data), 404); + return $data; } + + public function getContact() + { + return ClientContact::findOrFail($this->getTokenContent()['user_id']); + } + + public function getCompany() + { + return Company::where('company_key', $this->getTokenContent()['company_key'])->firstOrFail(); + } } diff --git a/app/PaymentDrivers/Stripe/Connect/Account.php b/app/PaymentDrivers/Stripe/Connect/Account.php index 675f2dafe473..69c85d771e7c 100644 --- a/app/PaymentDrivers/Stripe/Connect/Account.php +++ b/app/PaymentDrivers/Stripe/Connect/Account.php @@ -33,7 +33,7 @@ class Account /** * @throws \Stripe\Exception\ApiErrorException */ - public static function link(string $account_id): \Stripe\AccountLink + public static function link(string $account_id, string $token): \Stripe\AccountLink { $stripe = new \Stripe\StripeClient( config('ninja.ninja_stripe_key') @@ -41,8 +41,8 @@ class Account return $stripe->accountLinks->create([ 'account' => $account_id, - 'refresh_url' => 'http://ninja.test:8000/stripe_connect/reauth', - 'return_url' => 'http://ninja.test:8000/stripe_connect/return', + 'refresh_url' => route('stripe_connect.initialization', $token), + 'return_url' => route('stripe_connect.return'), 'type' => 'account_onboarding', ]); } diff --git a/resources/views/portal/ninja2020/gateways/stripe/connect/completed.blade.php b/resources/views/portal/ninja2020/gateways/stripe/connect/completed.blade.php new file mode 100644 index 000000000000..1d1740ae8136 --- /dev/null +++ b/resources/views/portal/ninja2020/gateways/stripe/connect/completed.blade.php @@ -0,0 +1,13 @@ +@extends('portal.ninja2020.layout.clean') +@section('meta_title', ctrans('texts.success')) + +@section('body') +
+
+ +
+ +

Connecting your account using Stripe has been successfully completed.

+ Click here to continue. +
+@endsection diff --git a/routes/api.php b/routes/api.php index 9b64207059e4..560e45aaf71d 100644 --- a/routes/api.php +++ b/routes/api.php @@ -192,7 +192,9 @@ Route::get('token_hash_router', 'OneTimeTokenController@router'); Route::get('webcron', 'WebCronController@index'); -Route::get('stripe_connect/{token}', 'StripeConnectController@initialize')->name('stripe_connect.initialization'); -Route::get('stripe_connect/completed', 'StripeConnectController@completed')->name('stripe_connect.return'); +Route::group(['middleware' => ['api_db', 'locale']], function () { + Route::get('stripe_connect/completed', 'StripeConnectController@completed')->name('stripe_connect.return'); + Route::get('stripe_connect/{token}', 'StripeConnectController@initialize')->name('stripe_connect.initialization'); +}); Route::fallback('BaseController@notFound');