使用 Facebook API PHP 在某人的墙上发帖

2023-12-01

是否可以编写一个在某人的墙上发布消息的应用程序,并且如果该用户尚未接受此时提示的许可?

这是我的代码:

$attachment =  array(
        'access_token' => $access_token,
        'message' => "$message",
        'name' => "testName",
        'description' => "Check Out new message",
        'link' => '',
        'picture' => "test message"
    );

    try {
        $response = $facebook->api("/userId/feed/", 'POST', $attachment);
    } catch (FacebookApiException $e) {

    }

这是我不久前就该主题写的一些内容,用于文档目的。希望对您有所帮助:

使用 Facebook Graph API 创建应用程序 2012 年 1 月 27 日

开始使用 Facebook 要开始使用 Graph API 构建 Facebook 应用程序,您首先需要在 Facebook 注册,然后才能开始编码https://developers.facebook.com。创建帐户或使用现有帐户登录后,您将需要创建新应用程序(如果您使用现有应用程序,则需要正确配置应用程序)。 要创建您的 Facebook 应用程序,请访问https://developers.facebook.com/apps并单击“创建新应用程序”(如果您已经创建了应用程序并想要对其进行配置,则单击“编辑应用程序”)。在“设置”->“基本”选项卡下,您至少需要填写应用程序显示名称、联系电子邮件和站点 URL。其中,站点 URL 是最重要的,并且必须指向您的应用程序将驻留的位置(如果您还不知道,可以随时更新)。接下来,转到“设置”->“身份验证对话框”选项卡。您不需要填写任何内容,但这是一个好主意,因为这是用户在允许您的应用程序访问其帐户时将看到的内容。保存一切并返回https://developers.facebook.com/apps。您应该在此页面上看到您刚刚配置的应用程序。从此时开始,您需要复制以下两件事才能继续操作:应用程序 ID/API 密钥和应用程序密钥。您现在已准备好开始创建应用程序。

了解流程 在开始编写应用程序之前,最好了解对用户进行身份验证并将应用程序安装到他们的 Facebook 帐户上的流程。在您的应用程序安装在用户帐户上并且用户明确授予应用程序将内容发布到其帐户之前,您将无法执行任何操作。好消息是,用户只需对应用程序进行一次身份验证(除非他们卸载它)。查看下图以了解流程的工作原理:

验证用户身份 要启动身份验证过程,您必须构建一个链接来引导用户访问您的应用程序。这是建立链接的方式: https://www.facebook.com/dialog/oauth?client_id=[您的 API 密钥]&redirect_url=[将处理身份验证的服务]&scope=[您需要的权限]&display=touch - client_id:这是您在创建应用程序时从 Facebook 获得的 API 密钥。 -redirect_url:这是将处理您的所有身份验证的服务。它应位于您在使用 Facebook 设置应用程序时配置的站点 URL。该 URL 在整个身份验证过程中必须保持不变。 - 范围:这是用户帐户所需的任何权限。你应该只要求你真正需要的东西。我们通常只需要publish_stream。有关权限的完整列表,请参阅:https://developers.facebook.com/docs/reference/api/permissions/- 显示:这告诉 Facebook 使用什么皮肤。由于我们将其用于移动应用程序,因此您应该将其设置为“触摸”。如果您不是为移动设备开发,则可以忽略这一切。

当用户点击您建立的链接时,如果他们已登录,他们将被带到下面的页面。如果他们没有登录,他们将被提示先登录。如果用户接受您的申请、拒绝您的申请请求或登录失败,他们将被定向到您在上面指定的redirect_url。根据用户在此页面上的操作,Facebook 在将用户发送到该页面时会将不同的查询字符串附加到您的redirect_url。

如果用户单击“允许”,他们将被发送到您的redirect_url,并且查询字符串将包含一个名为 code 的变量。您将使用它来获取用户的身份验证令牌,这将允许您从应用程序访问他们的帐户。如果用户点击“不允许”、登录失败或出现其他问题,则以下查询字符串将附加到您的redirect_url 中:error_reason、error 和 error_description。 成功请求重定向 URL 的示例: =">http://niobiumstudio.com/appia/fbconnect/auth.php?code=AQDi7fT3whSPJr0O2ECwv494QSSNyrTFK_SGIexEFUGmw5XS8SvzfYiAsxpn0FspQYHkMgaUYH--PS1AnJnCtE-iUdRl6V3Moxfk4Cqz0igZbnkHxWi 4Yl_KphXiRkbnCCW_zDqb4W2lfew9sla4FPDUKhXscRuQeI--61uQ0uStb9GwrOH4V94DjGWk1yS-Ffs#=

一旦您将代码 GET 变量传回您的redirect_url,您就可以与 Facebook 交换它以获取您的 OAuth 访问令牌。为此,您需要使用刚刚返回的代码向 Facebook 构建请求。获取访问令牌的请求如下所示: https://graph.facebook.com/oauth/access_token?client_id=[您的 API 密钥]&redirect_url=[处理身份验证的服务]&client_secret=[您的应用程序密钥]&code=[用户接受代码] client_id:这是您在创建应用程序时从 Facebook 获得的 API 密钥。 redirect_url:这是将处理您的所有身份验证的服务。它应位于您在使用 Facebook 设置应用程序时配置的站点 URL。该 URL 在整个身份验证过程中必须保持不变。这必须与您在上面获取代码时使用的 URL 相同client_secret:这是您在创建应用程序时从 Facebook 获得的应用程序密码。 code:这是您从上一个请求的查询字符串中返回的代码。

当您成功发出此请求后,您将收到 OAuth 访问令牌,该令牌允许您访问用户的 Facebook 帐户。这是身份验证的最后一步。与“代码”不同,访问令牌将位于响应正文中,而不是作为 GET 变量。成功的响应如下所示: access_token=AAAB9BKw79ywBAPjNYxRwLhUE1mOgd3Ei1Nq2gPXxyWhiCISZAZA6ihZAor1NEPHRjuQ5x7NrkA7ITuV2IHVZBs6ZAaigbNdsMnX3l58RrQAZDZD&过期=5862 您必须解析出访问令牌,这就是您将用来访问用户帐户的内容。另请注意,有一个过期值与访问令牌一起发送。您将无法存储此访问令牌并在以后您选择的任何时间使用它。您必须立即使用它来做您需要做的事情,然后丢弃它。 如果获取访问令牌的请求失败,您将在正文中收到错误,而不是访问令牌和过期时间。与访问令牌不同,它将采用 JSON 格式,因此请注意这一点。 *有关身份验证过程的更多信息,请参阅:https://developers.facebook.com/docs/authentication/

发布到用户帐户 现在您已拥有访问令牌,您将能够访问用户的帐户,直到令牌过期。有许多事情可以使用不同的权限来完成,但由于我们只要求publish_stream,因此本文档将仅涵盖更新用户的状态消息。 要更新用户的状态,我们必须向以下 URL 发出 POST 请求: https://graph.facebook.com/me/feed?access_token=[访问令牌] access_token:这是您从身份验证过程中获得的访问令牌。 POST 应包含一个名为 message 的变量。消息变量是一个字符串,无论它设置为什么,用户的状态消息都会设置为什么。 如果您使用 cURL 和 PHP 发出 POST 请求,“Hello World”请求将如下所示 $fb_post_url = "https://graph.facebook.com/me/feed?access_token=“.$access_token; $message_text = "你好世界!";

$ch=curl_init(); curl_setopt( $ch, CURLOPT_URL, $fb_post_url ); curl_setopt( $ch, CURLOPT_POST, true ); curl_setopt( $ch, CURLOPT_POSTFIELDS, "message=".$message_text ); curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true ); curl_setopt( $ch, CURLOPT_TIMEOUT, 30 ); $fb_post_response = curl_exec( $ch ); 卷曲关闭( $ch ) POST 请求将在响应正文中返回“成功”或“失败”JSON 消息。

有关发布到用户帐户的更多信息,请参阅:http://developers.facebook.com/docs/reference/api/status/

验证已接受您的应用程序的用户 用户接受您的应用程序后,当他们单击您的链接时,将不再提示“接受”您的应用程序,因为该应用程序已安装。身份验证过程保持完全相同,除了当他们单击将其带到身份验证页面的链接时,Facebook 将确定应用程序已被接受,并简单地将用户转发到您的redirect_url,并将代码附加到查询字符串。如果用户尚未登录,则将被要求登录其 Facebook 帐户,但他们将永远不必再次“接受”您的申请。如果您将来更改您的应用程序并添加其他权限,则下次他们尝试使用您的应用程序时,系统将提示他们仅接受新权限。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Facebook API PHP 在某人的墙上发帖 的相关文章

  • 如何使用用户代理标头以不同方式检测 Android 手机和 Android 平板电脑?

    对于我的网站 我需要能够区分 Android 平板电脑访问和 Android 手机访问的区别 在将页面发送给用户之前需要对其进行检测 因此不能使用 JavaScript 检查屏幕分辨率 目前我用它来检测 Android 设备 stripos
  • 如何在使用 Piwik 进行分析的页面上显示点击/访问计数器

    我想在主页上显示当天的访问量 该页面由 Piwik 跟踪 如何将 API 与 PHP 结合使用来获取今天的 唯一 访问量和点击量 以便我可以将它们显示在页面上的某个位置 result file get contents http mysit
  • symfony 2.0足够稳定可以使用吗? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我怀疑是否交响乐2 0够稳定可以使用吗 因为我从来没有用过Symfony before 看起来交响乐2比以前的版本好得多 我不想在几个月后重新学
  • 如何用java制作字典? [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我正在尝试用java制作一个离线词典
  • As3 Graph API 注销

    我正在开发一个由不同用户玩的应用程序 但我使用 as3 graph api 来验证用户身份并在他们的墙上发布 并且我需要在下一个用户在 as3 graph 上开始会话之前注销每个用户应用程序编程接口 http code google com
  • 如何按年和月对 WordPress 帖子进行分组?

    我正在尝试创建一个带有后查询并在输出中具有以下结构的函数 2021 January 1 Post Title 2 Post Title March 3 Post Title 2020 May 4 Post Title 这是我到目前为止所做的
  • 如何获取wordpress中文件的本地路径

    由于在wordpress中 上传的文件 图像以3种不同的大小存储 从而占用内存 我有一个代码可以根据给定图像的 URL 来调整图像的大小 调整大小的代码是 img wp get image editor image url if is wp
  • 在 Woocommerce 的单个产品页面中添加产品注释字段

    我要创建定制订单备注 in 单品用户的详细信息页面 这个可以使用 php 来完成 无需插件 我已附上屏幕截图和网站 URL 以供参考 已尝试使用此代码function php它在结账页面上工作 而不是在产品信息页 任何人都可以帮助我实现这一
  • 如何用PHP读取图像?

    我知道 localfile FILES media tmp name 如果使用 POST 方法 将获取图像 我正在尝试读取与我的代码位于同一目录中的图像 我如何读取它并将其分配给像上面这样的变量 您发布的代码不会读取图像数据 而是读取其文件
  • 有什么办法可以打破 PHP 中的 if 语句吗?

    PHP中是否有任何命令可以停止执行当前或父进程if声明 与break or break 1 for switch loop 例如 arr array a b foreach arr as val break echo test echo f
  • 如何在 phpstorm 中自动生成类的属性?

    如果我实现一个类 它注入一些服务 我必须编写大量代码
  • PHP 中的 JS charCodeAt 等效项(具有完整的 unicode 和 emoji 兼容性)

    我在 JS 中有一个简单的代码 如果涉及特殊字符 我无法在 PHP 中复制它 这是 JS 代码 参见JSFiddle https jsfiddle net h8oca3qg 5 用于输出 var str t char t and speci
  • PHP 中的基本 URL

    我有一个两难的困境 它已经困扰我很长一段时间了 我有一个本地测试服务器 其设置如下 127 0 0 1 我的网站在离线模式下如下所示 127 0 0 1 websitename index php 我的网站实时版本如下所示 websiten
  • 为什么 array_merge_recursive 不是递归的?

    我最近在我的应用程序中发现了一个由意外行为引起的错误array merge recursive 让我们看一下这个简单的例子 array1 1 gt 1 gt 100 2 gt 200 2 gt 3 gt 1000 3 gt 1 gt 500
  • rewrite_mod 已启用,但 .htaccess 不起作用

    我在 Amazon EC2 的 ubuntu 12 04 中使用 apache 2 2 我使用启用了 mod rewrite sudo a2enmod rewrite 并能够看到 apache2ctl M 现在我编写了以下 htaccess
  • Doctrine QueryBuilder 重用部件

    我想计算所有符合我的条件的字段 并使用学说查询生成器逐页获取它们 我生成的查询取决于我的过滤器字段 第一部分是计算记录 以便我可以计算页数 qb em gt createQueryBuilder qb gt select COUNT m i
  • 如何编辑 Woocommerce 单一产品元模板中显示的内容?

    我正在为客户做一些工作并使用 wordpress woocommerce 他们要求我将类别移动到我已经完成的单个产品页面上的产品名称下 但他们不希望它打印 类别 类别 1 类别 2 等 他们希望删除 类别 并且它实际上只列出类别的名称 而不
  • 使用 htaccess 文件重定向[关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 Edit 我想重定向一个网址 to www example com location sydney from www example com rss
  • 用于高级搜索/过滤的.Net Web API URL 约定

    我对 Microsoft 的 REST 和 WebAPI 比较陌生 我们正在实现一个中心 REST 服务 它将容纳多种类型的对象获取和设置 作为该项目的领导者 我的任务是提出我们正在使用的正确的 Uri 设计 我想知道关于战争什么想法更好
  • File_get_contents($url): 无法打开流

    我有一个脚本 我使用以下方法读取文件 file get contents urlencode url 我收到此错误 failed to open stream HTTP request failed HTTP 1 0 400 Bad req

随机推荐