0

最近、単純なアプリを作成して何か新しいことを学びたいと思ったので、PHP の学習を始めました。しかし今、私は Facebook の統合に苦労しています。

いくつか問題があります。

  1. パーマを取得するために href をクリックすると、何も起こりません。表示ポップアップ パラメータが設定されている場合でも、新しいタブで開く必要があります。(アクセス トークンで iframe を使用する必要がありますか?)

  2. 電子メールの許可を求めていますが、signed_request にはそのような情報が含まれていません。

私はPHPの完全な初心者であることを覚えておいてください。ありがとうデビッド

これが私のコードです:

//call facebook extended perms.
$loginUrl = $facebook->getLoginUrl($params);
$params = array(
'client_id' => 'AppID',
'scope' => 'email, publish_stream',
);

$loginUrl = $facebook->getLoginUrl($params);

echo ('a href="'.$loginUrl.'" perms a');

ここに signed_request があります

//Get the signed request
$srq = $_REQUEST['signed_request'];

function parse_signed_request($srq) {
  list($encoded_sig, $payload) = explode('.', $srq, 2); 

  // decode the data
  $sig = base64_url_decode($encoded_sig);
  $data = json_decode(base64_url_decode($payload), true);

  print_r ($data);
}

function base64_url_decode($input) {
  return (base64_decode(strtr($input, '-_', '+/')));
}

//print the signed request for "debug?"
parse_signed_request($srq);`

パーマをかけたときの出力は次のとおりです。

Array
(
    [algorithm] => HMAC-SHA256
    [expires] => 1361822400
    [issued_at] => 1361817488
    [oauth_token] => loooooong token
    [page] => Array
        (
            [id] => 146945218690274
            [liked] => 1
            [admin] => 1
        )

    [user] => Array
        (
            [country] => cz
            [locale] => cs_CZ
            [age] => Array
                (
                    [min] => 18
                    [max] => 20
                )

        )

    [user_id] => deleted
)
4

1 に答える 1

1

はい!最後にそれを機能させました!! 今のところメール部分のみ。コードは少し乱雑で、クリーンアップが必要ですが、動作します :) 答えはここで見つかりました。

//include facebook.php
require_once("./src/facebook.php");

$config = array();
$config[‘appId’] = '123222421192165';
$config[‘secret’] = '346406ef4af8382c71764c4fd270b595';
$config[‘fileUpload’] = false; // optional
$app_FacebookURL = 'https://still-mesa-9778.herokuapp.com';
$facebook = new Facebook($config);
$params = array(
'client_id' => '123222421192165',
'scope' => 'email, publish_stream',
);

$loginUrl = $facebook->getLoginUrl($params);

//test signed postu
$srq = $_REQUEST['signed_request'];

function parse_signed_request($srq) {
list($encoded_sig, $payload) = explode('.', $srq, 2); 

// decode the data
$sig = base64_url_decode($encoded_sig);
$data = json_decode(base64_url_decode($payload), true);
$GLOBALS['sdata'] = $data; //create a superglobal variable to hold the decoded data for later use
print_r ($data);
}

function base64_url_decode($input) {
return (base64_decode(strtr($input, '-_', '+/')));
}

//print the signed post
parse_signed_request($srq);


//Check for oauth_token in signed request.
if (!array_key_exists('oauth_token', $sdata))
{
    //There is no oauth_token in the signed request so forward to authorizing page.
    echo "<script>top.location.href='https://graph.facebook.com/oauth/authorize?client_id=".$params['client_id']."&redirect_uri=". urlencode($app_FacebookURL)."&scope=".$params['scope']."'</script>";
}
else //if (array_key_exists('oauth_token', $signedRequest))
{
    //There is an oauth_token in the signed request.  For now just print it...
    echo("oauth_token is: ");
    echo($sdata['oauth_token']);

    //... and also use it to fetch the user's email then print the user's email so I know it's working.
    $graph_url = "https://graph.facebook.com/me?access_token=" . $sdata['oauth_token'];
    $user = json_decode(file_get_contents($graph_url));
    echo("\nHello " . $user->email . "!");
}
于 2013-02-26T13:26:02.657 に答える