From bdc564092e228a79e766f99b07508acc25afc613 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Benjamin=20Beganovi=C4=87?= Date: Wed, 21 Apr 2021 16:36:08 +0200 Subject: [PATCH] wip --- .../Controllers/StripeConnectController.php | 21 +++++++++++++------ .../InitializeStripeConnectRequest.php | 18 +++++++++++++++- app/PaymentDrivers/Stripe/Connect/Account.php | 6 +++--- .../stripe/connect/completed.blade.php | 13 ++++++++++++ routes/api.php | 6 ++++-- 5 files changed, 52 insertions(+), 12 deletions(-) create mode 100644 resources/views/portal/ninja2020/gateways/stripe/connect/completed.blade.php diff --git a/app/Http/Controllers/StripeConnectController.php b/app/Http/Controllers/StripeConnectController.php index 406dccca1415..db3fe9822ee7 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,33 @@ 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, ]; $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' => 'provide-valid-stripe-key-here', +// '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..2b62485878db --- /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') +
+
+ +
+ +

Connection with 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');