getCompany(); $params = [ 'client_id' => config('services.gocardless.client_id'), 'redirect_uri' => config('services.gocardless.redirect_uri'), 'scope' => 'read_write', 'response_type' => 'code', 'state' => $company->company_key, 'prefill[email]' => $company->settings->email, 'prefill[organisation_name]' => $company->settings->name, 'prefill[country_code]' => $company->country()->iso_3166_2, ]; $url = config('services.gocardless.environment') === 'production' ? 'https://connect.gocardless.com/oauth/authorize?%s' : 'https://connect-sandbox.gocardless.com/oauth/authorize?%s'; return redirect()->to( sprintf($url, http_build_query($params)) ); } public function confirm(OAuthConnectConfirmRequest $request): \Illuminate\Http\RedirectResponse|\Illuminate\View\View { /** @var \App\Models\Company $company */ $company = $request->getCompany(); // LBo0v_561xgFGnFUae6uEQEfrWoSEMnZ&state=5O2O85C8dPv1Gp1UPVq0xs4FVTZdq5dO // https://invoicing.co/gocardless/oauth/connect/confirm?code=sH55_xb-2s1JtuEw-j7W0hT0Z1sFkM7l $url = config('services.gocardless.environment') === 'production' ? 'https://connect.gocardless.com/oauth/access_token' : 'https://connect-sandbox.gocardless.com/oauth/access_token'; $response = Http::post($url, [ 'client_id' => config('services.gocardless.client_id'), 'client_secret' => config('services.gocardless.client_secret'), 'grant_type' => 'authorization_code', 'code' => $request->query('code'), 'redirect_uri' => config('services.gocardless.redirect_uri'), ]); if ($response->failed()) { return view('auth.gocardless_connect.access_denied'); } $company_gateway = CompanyGateway::query() ->where('gateway_key', 'b9886f9257f0c6ee7c302f1c74475f6c') ->where('company_id', $company->id) ->first(); if ($company_gateway === null) { $company_gateway = CompanyGatewayFactory::create($company->id, $company->owner()->id); $fees_and_limits = new \stdClass(); $fees_and_limits->{GatewayType::INSTANT_BANK_PAY} = new FeesAndLimits(); $company_gateway->gateway_key = 'b9886f9257f0c6ee7c302f1c74475f6c'; $company_gateway->fees_and_limits = $fees_and_limits; $company_gateway->setConfig([]); } $response = $response->json(); $payload = [ '__current' => $company_gateway->getConfig(), 'account_id' => $response['organisation_id'], 'token_type' => $response['token_type'], 'scope' => $response['scope'], 'livemode' => $response['active'], 'access_token' => $response['access_token'], ]; $company_gateway->setConfig($payload); $company_gateway->save(); return view('auth.gocardless_connect.completed'); } }