簡體   English   中英

我無法在try catch塊中捕獲Facebookexceptions

[英]I can't catch Facebookexceptions in try catch block

我有一個問題是捕捉到正確的異常,無論我做什么,我得到相同的響應。 這是我在視圖中得到的響應錯誤驗證訪問令牌:用戶未在FacebookResponseException.php第89行中授權應用程序FacebookResponseException:

在用戶在創建了access_token之后從Facebook取消授權我的應用程序之后,問題就出現了,我要做的就是捕獲異常並自動將它們注銷並刷新會話:但我似乎無法找到正確的例外catch我已經測試了所有這些:我將問題縮小到這個catch塊內:我包含了catch塊,然后是我在路由函數中使用的完整代碼。

try {
    // Returns a `Facebook\FacebookResponse` object
    $response = $fb->get('/me?fields=permissions');
    } catch(Facebook\Exceptions\FacebookResponseException $e) {
    echo 'Graph returned an error: ' . $e->getMessage();
    exit;
    } catch(Facebook\Exceptions\FacebookSDKException $e) {
    echo 'Facebook SDK returned an error: ' . $e->getMessage();
    exit;
    } catch(Facebook\Exceptions\FacebookAuthenticationException $e) {
    echo 'Facebook Dan1 returned an error: ' . $e->getMessage();
    exit;
    } catch(Facebook\Exceptions\FacebookAuthorizationException $e) {
    echo 'Facebook Dan2 returned an error: ' . $e->getMessage();
    exit;
    } catch(Facebook\Exceptions\FacebookClientException $e) {
    echo 'Facebook Dan3 returned an error: ' . $e->getMessage();
    exit;
    } catch(Exception $e) {
    echo 'Facebook Dan4 returned an error: ' . $e->getMessage();
    exit;
     }

現在我這個頁面的完整代碼:

public function getHomeProfile(Request $request, LaravelFacebookSdk $fb) 
{
$user = Auth::user();

$token = Session::get('fb_user_access_token');
$twitterToken = Session::get('access_token');

 // $fb->setDefaultAccessToken($token);
 // $resp = $fb->get('/debug_token?=input_token=$token');
// dd($resp);

$permissionsToRequest = ([
    'public_profile',
    'publish_actions'
]);

$login_link_for_public_actions = $fb->getLoginUrl($permissionsToRequest, 'http://pms.dev:8000/facebook/publicactions/callback');

if (isset($token)) {

    $fb->setDefaultAccessToken($token);



    // $debugToken = $fb->get('/debug_token?input_token=' . $token);
    // $debugTokenResponse = $debugToken->getGraphNode()->asArray();

    // echo "<pre>";
    // print_r($debugTokenResponse);
    // echo "<pre>";

    // die();
    try {
    // Returns a `Facebook\FacebookResponse` object
    $response = $fb->get('/me?fields=permissions');
    } catch(Facebook\Exceptions\FacebookResponseException $e) {
    echo 'Graph returned an error: ' . $e->getMessage();
    exit;
    } catch(Facebook\Exceptions\FacebookSDKException $e) {
    echo 'Facebook SDK returned an error: ' . $e->getMessage();
    exit;
    } catch(Facebook\Exceptions\FacebookAuthenticationException $e) {
    echo 'Facebook Dan1 returned an error: ' . $e->getMessage();
    exit;
    } catch(Facebook\Exceptions\FacebookAuthorizationException $e) {
    echo 'Facebook Dan2 returned an error: ' . $e->getMessage();
    exit;
    } catch(Facebook\Exceptions\FacebookClientException $e) {
    echo 'Facebook Dan3 returned an error: ' . $e->getMessage();
    exit;
    } catch(Exception $e) {
    echo 'Facebook Dan4 returned an error: ' . $e->getMessage();
    exit;
     }

    // Returns a `Facebook\GraphNodes\GraphUser` collection
    $facebookuser = $response->getGraphUser();
    //$ty= json_decode($facebookuser);

    $permissions = $facebookuser['permissions'];

    $checked = '';
    foreach ($permissions as $p) {
        if ($p['permission'] == 'publish_actions' && $p['status'] == 'granted' ) {
        $checked = 'checked';
        }
    }
} else {
    $checked = null;
}

if (isset($twitterToken)) {
    $twitterChecked = 'checked';
} else {
    $twitterChecked = null;
}


$userPlugsCountry = $user->plugsCountry()->setPath($request->url());

$user_plugs_list = Auth::user()->plugs()->lists('id');

if (Auth::check()) {
    $statuses = Status::where(function($query) {

            return $query->where('user_id', Auth::user()->id)->where('parent_id', NULL)
            ->orWhereIn('user_id', Auth::user()->plugs()->lists('id'));
        })->orderBy('created_at', 'desc')->paginate(7);
}


if (array_key_exists('REQUEST_SCHEME', $_SERVER)) {   
  $cors_location = $_SERVER["REQUEST_SCHEME"] . "://" . $_SERVER["SERVER_NAME"] .
    dirname($_SERVER["SCRIPT_NAME"]) . "/cloudinary_cors.html";
} else {
  $cors_location = "http://" . $_SERVER["HTTP_HOST"] . "/cloudinary_cors.html";
}

if ($request->ajax()) {
    return [
    'statuses' => view('ajax.status')->with('user', $user)->with(compact('statuses'))->render(),
    'next_page' => $statuses->nextPageUrl(),
    'countries' => view('ajax.next_countries')->with('user', $user)->with(compact('userPlugsCountry'))->render(),
    'next_countries_page' => $userPlugsCountry->nextPageUrl(),
    'prev_countries_page' => $userPlugsCountry->previousPageUrl(),
    ];
}

return view('profile.home')->with('user', $user)->with('cors_location', $cors_location)->with('statuses',$statuses)->with('userPlugsCountry',$userPlugsCountry)->with('checked', $checked)->with('login_link_for_public_actions',$login_link_for_public_actions)->with('twitterChecked', $twitterChecked);
 }

好吧我發現我做錯了。 我正在使用sammyk laravelfacebooksdk https://github.com/SammyK/LaravelFacebookSdk並且僅包括:

use SammyK\LaravelFacebookSdk\LaravelFacebookSdk;

我沒有意識到我還需要添加

use Facebook;

到命名空間。

容易修復,這給了我很多麻煩。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM