# Facebook\Helpers\FacebookCanvasHelper The `FacebookCanvasHelper` is used to obtain an access token or signed request when working within the context of an [app canvas](https://developers.facebook.com/docs/games/canvas). ~~~ Facebook\Helpers\FacebookCanvasHelper( Facebook\FacebookApp $facebookApp ) ~~~ ## Usage {#usage} If your app is loaded through Canvas, Facebook sends a POST request to your app with a signed request. This helper will handle validating and decrypting the signed request. ~~~ $fb = new Facebook\Facebook([/* */]); $canvasHelper = $fb->getCanvasHelper(); $signedRequest = $canvasHelper->getSignedRequest(); if ($signedRequest) { $payload = $signedRequest->getPayload(); var_dump($payload); } ~~~ If a user has already authenticated your app, you can also obtain an access token. ~~~ $fb = new Facebook\Facebook([/* */]); $canvasHelper = $fb->getCanvasHelper(); try { $accessToken = $canvasHelper->getAccessToken(); } catch(Facebook\Exceptions\FacebookResponseException $e) { // When Graph returns an error echo 'Graph returned an error: ' . $e->getMessage(); } catch(Facebook\Exceptions\FacebookSDKException $e) { // When validation fails or other local issues echo 'Facebook SDK returned an error: ' . $e->getMessage(); } if (isset($accessToken)) { // Logged in. } ~~~ The `$accessToken` will be `null` if the signed request did not contain any OAuth 2.0 data to obtain the access token. ## Instance Methods {#instance-methods} ### __construct() {#construct} ~~~~ public FacebookCanvasHelper __construct(FacebookApp $app, FacebookClient $client, $graphVersion = null) ~~~~ Upon instantiation, `FacebookCanvasHelper` validates and decrypts the signed request that was sent via POST if present. ### getAccessToken() {#get-access-token} ~~~ public Facebook\AccessToken|null getAccessToken() ~~~ Checks the signed request for authentication data and tries to obtain an access token access token. ### getUserId() {#get-user-id} ~~~ public string|null getUserId() ~~~ A convenience method for obtaining a user's ID from the signed request if present. This will only return the user's ID if a valid signed request can be obtained and decrypted and the user has already authorized the app. ~~~ $userId = $canvasHelper->getUserId(); if ($userId) { // User is logged in } ~~~ This is equivalent to accessing the user ID from the signed request entity. ~~~ $signedRequest = $canvasHelper->getSignedRequest(); if ($signedRequest) { $userId = $signedRequest->getUserId(); // OR $userId = $signedRequest->get('user_id'); } ~~~ ### getAppData() {#get-app-data} ~~~ public string|null getAppData() ~~~ Gets the value that is set in the `app_data` property if present. ### getSignedRequest() {#get-signed-request} ~~~ public Facebook\SignedRequest|null getSignedRequest() ~~~ Returns the signed request as an instance of [`Facebook\SignedRequest`](/docs/php/SignedRequest) if present. ### getRawSignedRequest() {#get-raw-signed-request} ~~~ public string|null getRawSignedRequest() ~~~ Returns the raw encoded signed request as a `string` if present in the POST variables or `null`.