我正在制作一个脚本,用于在访客墙上发布消息。访问者可以在表单中输入自己的消息,然后将其发送到Facebook。
的index.php:
<form name="form" method="post" action="wall.php">
<textarea name="t_update" cols="50" rows="5" id="t_update" >message</textarea><br>
<input type="submit" name="Submit" value="Post To Your facebook Account!">
</form>
这会将“t_update”发送到“wall.php”。 wall.php脚本工作正常我用静态文本测试它。但是当我尝试将“t_update”文本插入var $ APP_MSG时,它在发送到Facebook时是空的。这是完整的wall.php脚本。
wall.php:
<?php
/** FB APP DATA **/
$FB_APPID = "Facebook app id";
$FB_SECRET = "Facebook secret code";
/** MSG DATA **/
$APP_MSG = ($_POST['t_update']); // post message
$APP_MSG_LINK_TITLE = "Title";
$APP_MSG_LINK = "www.domain.com";
global $ch;
$code = $_REQUEST["code"];
$error = $_REQUEST["error"];
$returnurl = "http://".$_SERVER["HTTP_HOST"].$_SERVER["SCRIPT_NAME"];
function facebook_curl_request($url,$params=array(),$post = false){
global $ch;
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt ($ch, CURLOPT_URL, $url);
curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt ($ch, CURLOPT_SSL_VERIFYHOST, 2);
curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, 20);
curl_setopt ($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.11) Gecko/20071127 Firefox/2.0.0.11');
curl_setopt ($ch, CURLOPT_HEADER, false);
if($post == true){
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $params);
}
$response = curl_exec ($ch);
$temp = json_decode($response,1);
if(isset($temp["error"]) && is_array($temp["error"])){
echo $temp["error"]["type"]."<br>";
echo $temp["error"]["message"]."<br>";
echo "--------------------------------------------";
curl_close ($ch);
exit;
}
return $response;
}
if(empty($code)) {
$dialog_url = "http://www.facebook.com/dialog/oauth?client_id="
. $FB_APPID . "&redirect_uri=" . urlencode($returnurl) . "&scope=publish_stream,email";
header("Location: $dialog_url");
}
if(!empty($error)){
echo $_REQUEST["error"]."<br>".$_REQUEST["error_reason"]."<br>".$_REQUEST["error_description"];
}else{
if(!empty($code)){
/** CREATE TOKEN **/
$ch = curl_init();
$token_url = "https://graph.facebook.com/oauth/access_token?"
. "client_id=" . $FB_APPID . "&redirect_uri=" . $returnurl
. "&client_secret=" . $FB_SECRET . "&code=" . $code;
$token = facebook_curl_request($token_url);
$tarr = explode("&",$token);
list($token_name,$token) = explode("=",$tarr[0]);
/**GET USER INFO**/
$graph_url = "https://graph.facebook.com/me?".$token_name."=".$token;
$user = json_decode(facebook_curl_request($graph_url),1);
$userid = $user["id"];
/* POST TO WALL **/
$graph_url = "https://graph.facebook.com/".$userid."/feed";
$params = array(
$token_name => $token,
"message" => $APP_MSG,
'name' => $APP_MSG_LINK_TITLE,
'link' => $APP_MSG_LINK
);
$response = facebook_curl_request( $graph_url, $params, true);
list($userid,$postid) = explode("_",$response);
echo "<html><head></head><body>Bedankt voor het posten op facebook!</body></html>";
curl_close ($ch);
}
}
?>
我已经尝试过,任何人都能指出我正确的方向吗?
答案 0 :(得分:2)
我测试了代码并确认它无效。之所以不是因为当你第一次点击wall.php时,你会被重定向到Facebook进行身份验证,然后用gET重定向回你的应用程序脚本“wall.php” - 所以你在重定向上丢失了你的POST变量。这就是它最终空洞的原因。您的其他变量仍然存在,因为它是硬编码的,无论您何时运行脚本,都会被调用。希望这是有道理的。
我刚刚开始研究应用程序,并发现使用Facebook PHP SDK更容易使用。代码也更清晰。 Dev区域有一个示例PHP文件,您可以使用该文件向您展示如何进行身份验证。
以下示例:
<?php
require_once 'facebook-php-sdk/src/facebook.php';
$APP_MSG = ($_POST['t_update']);
$facebook = new Facebook(array(
'appId' => 'APPID',
'secret' => 'SECRET'
));
$wallArgs = array('message' => $APP_MSG);
try {
$facebook->api('me/feed', 'post', $wallArgs);
}
catch(Exception $e) {
print "<pre>";
print_r($e);
print "</pre>";
}
?>
答案 1 :(得分:0)
您也可以在HTML和JavaScript中执行此操作,而无需请求用户权限。首先,在HTML页面中初始化Facebook API。把它放在页面的底部,在结束体标记之前。
<div id="fb-root"></div>
<script src="https://connect.facebook.net/en_US/all.js"></script>
<script>
FB.init({
appId : '[your_app_id_goes_here];',
status : true, // check login status
cookie : true, // enable cookies to allow the server to access the session
xfbml : true // parse XFBML
});
</script>
不要忘记将[your_app_id_goes_here]替换为您的Facebook App ID。接下来,创建一个将在用户墙上发布的JS函数。把它放在页面的头部。
<script>
// A function to post on the users wall
function wallPost() {
FB.ui(
{
method: 'feed',
name: 'Go find something!',
link: 'http://www.google.com',
picture: 'http://www.google.com/images/logos/ps_logo2.png',
caption: 'Google',
description: 'This was posted from a test app I created.',
message: ''
},
function(response) {
if (response && response.post_id) {
document.getElementById('message').innerHTML = 'Thanks for sharing!';
} else {
document.getElementById('message').innerHTML = 'Hey, you didn\'t share!';
}
}
);
}
</script>
最后,使用您刚刚在某种链接中创建的功能。
<p id="message">
<a href="#" onclick="wallPost();">Share Me!</a>
</p>
这个例子来自Joel Dare的书 Social App Development 。在social.joeldare.com获取。