【问题标题】:Post Facebook status with PHP - Need Help in $_POST使用 PHP 发布 Facebook 状态 - 在 $_POST 中需要帮助
【发布时间】:2012-09-18 07:58:55
【问题描述】:

在我的网站上,我有一些带有下方按钮的文本,以便用户可以直接将该文本作为他们的 facebook 状态发布我使用 Form POST 请求将该状态发布到我的 fbapp。

问题是当用户第一次使用此功能时,应用程序请求权限窗口出现在用户 ALLOW 之后,然后我的 fbapp 页面出现在 FORM 操作中设置,我通过 POST 发送的文本作为 NULL 值发布到该页面

但当用户再次使用此功能时(即出现权限窗口dnt),它会直接转到我的 fbapp 页面文本已成功发布为状态。

使用的代码是:

<?php if(isset($_POST['mystatus']))
  {
  $status = $_POST['mystatus'];
  }

require_once 'facebook.php';
$facebook = new Facebook(array(
        'appId' => xxxxxx,
        'secret' => xxxxxxxxxx,
));

$user = $facebook->getUser();

if($user) {
 } else {
  $params = array(
  'scope' => 'publish_stream'
  );
    $loginUrl = $facebook->getLoginUrl($params);
    header('location:' .$loginUrl);
} ?>
<html>
<body>
if ($user) {
    ...................................
    rest of the usual php sdk code here
    ....................................
    }
else {
    echo("<script> top.location.href='" . $loginUrl . "'</script>");
}
</body>
</html>

如果用户已经第二次授予应用程序和使用此功能的权限,则应用程序请求权限窗口不会出现文本状态发布为$_POST['mystatus'] 并在用户 ID 上成功更新。

问题仅在用户允许应用程序后出现应用程序请求权限窗口然后$_POST['mystatus'] dnt 获取值并且状态更新为用户 ID 上的NULL

请帮助解决这个问题。

如果用户禁止或删除应用程序。 我也想知道如果用户 dnt 允许应用程序请求,我如何在页面上显示错误消息。 & 如果以后使用过,请删除应用程序,然后页面会显示此错误:

Fatal error: Uncaught OAuthException: Error validating access token: User xxxxxxxxxxx has not authorized application xxxxxxxxxxxxxxxxxxx. thrown in base_facebook.php on line 1106

有没有办法向用户显示自定义消息而不是这个错误?

【问题讨论】:

  • 您是否尝试过使用 PHP try/catch 解决潜在问题?
  • @donutdan4114 谢谢我以前从未使用过该功能,请您展示一些如何使用此功能的示例。我的问题是应用程序批准的 facebook 页面&当用户允许我的应用程序然后 facebook 重定向回我的脚本页面&我的所有表单发布变量在这个重定向中丢失。如果用户已经批准了我的应用程序。 & 第二次执行此脚本,然后可以成功发布到墙上。

标签: php facebook status


【解决方案1】:

问题仅在用户允许应用程序后出现应用程序请求权限窗口时,然后 $_POST['mystatus'] dnt 获取值并且状态在用户 ID 上更新为 NULL。

当然$_POST['mystatus'] 中没有任何价值——因为发送此参数的请求已经成为过去。

发生了什么:

  • 用户将表​​单内容发布到您的服务器。在处理该请求并且仅处理该请求时,您可以通过 $_POST 访问这些数据。

  • 但是用户没有登录,所以你重定向他们到验证对话框。这意味着,您的脚本执行结束,客户​​端(浏览器)发出另一个请求。该请求发送到 Facebook,成功登录后,客户端再次重定向,返回到您应用的服务器。

  • 最后一次重定向会导致客户端向您的服务器发出另一个请求(准确地说是 GET 请求)。它与您的应用收到的第一个 POST 请求没有任何关系——它们之间绝对没有任何联系。当然,您无法访问很久以前以完全不同的请求发布到您的应用的数据。


这些是使用 HTTP 的基础,如果您想开发 Web 应用程序,您应该熟悉这些内容。 HTTP 是一种“无状态”协议 - 请查看它的实际含义!


现在我们已经介绍了这些基础知识,对于解决方案:

在无状态协议 HTTP 中引入一种“识别”由同一客户端“识别”彼此之间具有某种逻辑连接的请求的方法是使用一种称为“会话”的机制。 (我不想在这里讨论理论上的细节——但是 PHP 有一个易于使用的会话机制;如果你不熟悉它,也请阅读它。)

因此,您可以做的是将您通过 POST 在第一个请求中收到的数据放入会话中,并将其存储在那里以供以后检索。

然后,如果用户尚未登录,则将他们重定向到身份验证对话框。一旦用户从那里“回来”,您检查您的会话并看到,“啊,还有一些数据是我之前收到的另一个请求,尚未处理” em> – 然后你就这样做了,处理它:从会话中检索状态消息,将其发布到 Facebook,然后从会话中删除它(这样你就不会在下一页加载时再次处理它)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-24
    • 1970-01-01
    • 2011-10-31
    • 2016-08-28
    • 2021-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多