Как получить подписанный запрос от авторизации приложения на холсте в Facebook?

После того как пользователь авторизовал мое приложение, мне нужно проанализировать подписанный запрос, чтобы я мог получить доступ к его идентификатору пользователя и т. Д. Где в моем коде я размещаю URL-адрес страницы, которая его обрабатывает? Мне нужен пример кода. Я просмотрел документацию, и она не объясняет, как это сделать для приложения Canvas. Переменная redirectUrl имеет URL-адрес самого приложения canvas. Это должно содержать URL кода, который вместо этого анализирует подписанный запрос? Я не уверен.

<body>
 <div id="fb-root"></div>
  <script type="text/javascript">

   $(document).ready(function(){


    var appId = 278*****2040;

    // If logging in as a Facebook canvas application use this URL.
    var redirectUrl = "http://apps.facebook.com/MYAPP";

    // If the user did not grant the app authorization go ahead and
    // tell them that. Stop code execution.
    if (0 <= window.location.href.indexOf ("error_reason"))
    {
    $('#authCancel').empty();    
     $(document.body).append ("<p>Authorization denied!</p>");
     return;
    }


    // When the Facebook SDK script has finished loading init the
    // SDK and then get the login status of the user. The status is
    // reported in the handler.
    window.fbAsyncInit = function(){

     //debugger;

     FB.init({
      appId : 278****40,
      status : true,
      cookie : true,
      oauth : true
      });

     // Sandbox Mode must be disabled in the application's settings
     // otherwise the callback will never be invoked. Monitoring network
     // traffic will show an error message in the response. Change the
     // Sandbox Mode setting in: App Settings - Advanced - Authentication.
     FB.getLoginStatus (onCheckLoginStatus);
    };


    // Loads the Facebook SDK script.
    (function(d)
    {
     var js, id = 'facebook-jssdk'; if (d.getElementById(id)) {return;}
     js = d.createElement('script'); js.id = id; js.async = true;
     js.src = "//connect.facebook.net/en_US/all.js";
     d.getElementsByTagName('head')[0].appendChild(js);
    }(document));


    // Handles the response from getting the user's login status.
    // If the user is logged in and the app is authorized go ahead
    // and start running the application. If they are not logged in
    // then redirect to the auth dialog.

    function onCheckLoginStatus (response)
    {
     if (response.status != "connected")
     {
      top.location.href = "https://www.facebook.com/dialog/oauth?client_id=" + appId + "&redirect_uri=" + encodeURIComponent (redirectUrl) + "&scope=user_photos,friends_photos";
     }
     else
     {
      // Start the application (this is just demo code)!
      $(document.body).append ("<p>Authorized!</p>");
      FB.api('/me', function (response) {

      $(document.body).append ("<pre>" + JSON.stringify (response, null, "\t") + "</pre>");
      });
     }
    }
   });

  </script>

1 ответ

Решение

Вы можете определенно использовать URL страницы холста. На этой же странице вы можете поместить следующий код. Я сделал это и работает отлично.

if(isset($_REQUEST["code"]))
{

$code = $_REQUEST["code"];

    $my_url = "https://apps.facebook.com/CANVAS_APP_URL/";
    $token_url = "https://graph.facebook.com/oauth/access_token?". "client_id=" . $app_id . "&redirect_uri=" . urlencode($my_url)
    . "&client_secret=" . $app_secret . "&code=" . $code;

        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $token_url );
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        $output1 = curl_exec($ch);
        curl_close($ch);

    $tokenarray = explode("&", $output1);
    $tokenarray1 = explode("=", $tokenarray[0]); 

    $access_token = $tokenarray1[1];

    $urltoopen = 'https://graph.facebook.com/me?access_token=' . $access_token;

    $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $urltoopen);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        $output = curl_exec($ch);
        curl_close($ch);

    echo $output;

 }

Надеюсь это поможет!!

~ ABW

Другие вопросы по тегам