facebook,如何在登录时传递vars?

时间:2011-08-11 01:47:05

标签: php facebook

我使用this小部件让我的用户创建帐户:

<iframe src="http://www.facebook.com/plugins/registration.php?
         client_id=113869198637480&
         redirect_uri=http%3A%2F%2Fdevelopers.facebook.com%2Ftools%2Fecho%2F&
         fields=name,birthday,gender,location,email"
    scrolling="auto"
    frameborder="no"
    style="border:none"
    allowTransparency="true"
    width="100%"
    height="310px">
</iframe>

但是,如果我点击submit按钮,我想将信息发送到以下链接:

http://www.xxx.com/Index.php?url=/leads/form&client_code=" Facebook"&name="XXX"&phone="XXXX"&email="test@XXX.com"

如何将这些变量传递给redirect_uri?我看到响应来自json,所以我应该设置一些vars从json响应中获取信息然后将它们传递给url?

任何想法都有帮助, 感谢

修改。 由于某种原因,我得到的回复并不完整: 我看不到电子邮件,性别等

 Array
(
[algorithm] => HMAC-SHA256
[expires] => 1313038800
[issued_at] => 1313033344
[oauth_token] => 103750869718158|2.AQAx-VOlqYgoM6yr.3600......
[user] => Array
    (
        [country] => us
        [locale] => en_US
        [age] => Array
            (
                [min] => 21
            )

    )

[user_id] => 100002389272431
)

编辑: 获取sign_request我使用此脚本并将redirect_uri设置为我的Canvas Page。 我已将注册表和php放在同一个文件中。

问题是我没有得到我在表格中放置的所有数据

define('FACEBOOK_APP_ID', '113869....637480');
define('FACEBOOK_SECRET', '0f60d2c.........4f6f921c899');
function parse_signed_request($signed_request, $secret) {
list($encoded_sig, $payload) = explode('.', $signed_request, 2); 

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


if (strtoupper($data['algorithm']) !== 'HMAC-SHA256') {
  error_log('Unknown algorithm. Expected HMAC-SHA256');
  return null;
}

// check sig
$expected_sig = hash_hmac('sha256', $payload, $secret, $raw = true);
if ($sig !== $expected_sig) {
  error_log('Bad Signed JSON signature!');
  return null;
}

return $data;
}

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



if ($_REQUEST) {
 echo '<p>signed_request contents:</p>';
 $response = parse_signed_request($_REQUEST['signed_request'], 
                                 FACEBOOK_SECRET);
 echo '<pre>';
  print_r($response);
 echo '</pre>';
} else {
echo '$_REQUEST is empty';
}

1 个答案:

答案 0 :(得分:0)

首先,您需要在获取JSON之前验证并解码已签名的请求 - example PHP for this here。您应该执行此操作的位置在redirect_uri中引用的脚本中 - 更改:

redirect_uri=http%3A%2F%2Fdevelopers.facebook.com%2Ftools%2Fecho%2F&

到执行验证的脚本的相应网址,该网址应与您的Facebook应用在同一个域中。

在redirect_uri脚本中验证并解码后,您将拥有一个包含相关属性的关联数组(并且您将知道它是经过验证的注册数据)。从那里,您可以再次对此数据进行json_encode并将其发布到相应的表单(希望您的隐私政策非常明确地向用户表明您的应用将与之共享数据)。