/** * Process data returned as callback from the client * * @param string $user_id * @param string $profile_id * @param array $data = [] * @return \App\Models\Provider * @throws \Exception */ public function handleCallback($user_id, $profile_id, $data = []) { if (empty($data['oauth_token']) || empty($data['oauth_verifier'])) { throw new \Exception('Token validation failed'); } $request_token = $data['oauth_token']; $request_token_verifier = $data['oauth_verifier']; $access_token = $this->getAccessToken($request_token, $request_token_verifier); $provider = $this->providerRepository->create($user_id, $profile_id, ServiceTwitter::SERVICE_CODE, ['request_token' => $request_token, 'request_token_verifier' => $request_token_verifier, 'oauth_token' => $access_token['oauth_token'], 'oauth_token_secret' => $access_token['oauth_token_secret'], 'expires_at' => ServiceTwitter::TOKEN_TTL + time()]); $userInfo = $this->getUserInfo($provider['_id']); return $this->providerRepository->create($user_id, $profile_id, ServiceTwitter::SERVICE_CODE, ['vendor_id' => (string) $userInfo->id, 'name' => $userInfo->name, 'profile_image_url' => $userInfo->profile_image_url]); }