Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/275.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 了解如何通过网站(应用程序)以页面形式发布到facebook页面_Php_Facebook_Facebook Graph Api - Fatal编程技术网

Php 了解如何通过网站(应用程序)以页面形式发布到facebook页面

Php 了解如何通过网站(应用程序)以页面形式发布到facebook页面,php,facebook,facebook-graph-api,Php,Facebook,Facebook Graph Api,我花了相当长的时间试图确定如何将一些数据从我的web服务器推送到为此目的创建的facebook页面,然后是最佳实践 我已经阅读并理解了使用访问令牌的过程。我已经为自己生成了一个访问令牌,可以用它作为“我确定”发布到页面。我理解这应该用来为页面生成访问令牌,以作为页面发布,这是一个更棘手的问题。然而,这个过程涉及我登录并生成一个访问令牌,这对于自动化过程来说似乎本质上是不好的/不方便的 因此,我按照指南创建了一个应用程序。我(认为我已经)将应用程序链接到页面,并试图通过appid和secret将数

我花了相当长的时间试图确定如何将一些数据从我的web服务器推送到为此目的创建的facebook页面,然后是最佳实践

我已经阅读并理解了使用访问令牌的过程。我已经为自己生成了一个访问令牌,可以用它作为“我确定”发布到页面。我理解这应该用来为页面生成访问令牌,以作为页面发布,这是一个更棘手的问题。然而,这个过程涉及我登录并生成一个访问令牌,这对于自动化过程来说似乎本质上是不好的/不方便的

因此,我按照指南创建了一个应用程序。我(认为我已经)将应用程序链接到页面,并试图通过appid和secret将数据从php代码推送到页面。 当我这样做的时候,我会遇到这个错误

{"error":{"message":"(#210) Subject must be a page.","type":"OAuthException","code":210}}
我的测试代码如下:

$data['picture'] = "http://www.example.com/image.jpg";
$data['link'] = "http://www.example.com/";
$data['message'] = "Your message";
$data['caption'] = "Caption";
$data['description'] = "Description";
$data['access_token'] = $app_token2;
$post_url = 'https://graph.facebook.com/'.$app_id.'/feed';
$url1 = "https://graph.facebook.com/endpoint?key=value&access_token=".$app_id."|". $app_secret ;
echo "<br>$post_url";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $post_url);
//curl_setopt($ch, CURLOPT_URL, $url1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$return = curl_exec($ch);
curl_close($ch);
echo "$return";
$data['picture']=”http://www.example.com/image.jpg";
$data['link']=”http://www.example.com/";
$data['message']=“您的邮件”;
$data['caption']=“caption”;
$data['description']=“description”;
$data['access_token']=$app_token2;
$post\u url='1https://graph.facebook.com/“.$app_id./feed”;
$url1=”https://graph.facebook.com/endpoint?key=value&access_token=“$app_id。”|”$appu秘密;
回显“
$post\u url”; $ch=curl_init(); curl_setopt($ch,CURLOPT_URL,$post_URL); //curl_setopt($ch,CURLOPT_URL,$url1); 卷曲设置($ch,卷曲设置桩,1); curl_setopt($ch,CURLOPT_POSTFIELDS,$data); curl_setopt($ch,CURLOPT_RETURNTRANSFER,1); $return=curl\u exec($ch); 卷曲关闭($ch); 回显“$return”;

我很感激使用永久(
ish
)秘密将应用程序用于服务器启动的发布是正确的方法,但我发现很少有关于如何实现此过程的文档,因此出现了这个问题。

您的$post\u url指向您的$app\u id变量,消息说它应该指向一个页面,尝试从图的/me/accounts端点获取页面id,并将其放在其中。虽然我怀疑您将需要使用页面访问令牌(也来自/me/accounts端点)来发布到您的页面

对,但我已经做了相当长的时间,并在代码中发现了一些错误,但还没有完全回答这个问题。 首先,您没有像上面提到的那样发布到appid,这是错误的。当使用由appid+secret生成的访问令牌时,用于发布到userid/feed的代码将起作用

$url2=”https://graph.facebook.com/oauth/access_token?client_id=“$app_id.”&client_secret=“$app\u secret.“&grant\u type=客户端\u凭据”

只要您的应用程序密码有效,此应用程序访问令牌就有效。此外,如果我通过graph explorer为我生成临时访问代码,请手动解析我/帐户,并在中使用页面令牌

$post_url = 'https://graph.facebook.com/'.$page_id.'/feed';
它正确地发布为页面

第二,所有服务器端调用都需要包含从

$appsecret\u-proof=hash\u-hmac('sha256',$app\u-token2,$app\u-secret)

现在,根据facebook文档,对我的用户ID/帐户的http get调用应该会为用户管理的所有页面(可能还有应用程序)生成页面访问令牌。 这也可以通过使用直接调用

$url3 = "https://graph.facebook.com/".$page_id."?fields=access_token";
那么,当获取这个地址(包括appaccess令牌和appsecret\u欺骗)时,我得到的都是“True”?? 同样,当正确的调用

$rob1 = "https://graph.facebook.com/".$user_id."/accounts";
我收到一个错误

{"error":{"message":"(#10) Application does not have permission for this action","type":"OAuthException","code":10}}
好的,许可问题!文档中说,从页面id/帐户中检索页面令牌只需要管理页面,所以我搜索了很多页面,发现您可以通过调用此url来实现这一点

https://www.facebook.com/dialog/oauth?client_id=YOUR_APP_ID&redirect_uri=https://www.facebook.com/connect/login_success.html&response_type=token&scope=read_stream

这通过facebook gui为每个作用域创建了一个接受/拒绝页面(我最终在我的应用程序中添加了管理页面、发布流和阅读流),但这些似乎都不能解决问题

右排序!!FWIW上面的代码功能正确,但是它在facebook上的设置方式还有很多需要改进的地方!!! 我开始搞乱我的应用程序,更改其名称、类型(曾经是链接到页面的应用程序,现在不是了)删除了perms,还更改了域名(已删除)和所有网站url详细信息(已删除)。这会提示另一个错误消息,指出域不匹配。所以,我只读取了应用程序域和站点url,并保存了它,突然我失败的代码开始工作了

整理了一下代码后,我现在可以看到页面访问令牌,正如我所期望的那样。我只希望facebook指南能够交叉引用这个设置,因为它一点也不明显

我的工作代码就这样结束了($perm_url用作一个时间链接,允许通过gui进行perms)

$perm\u url=”https://www.facebook.com/dialog/oauth?client_id=“$appid.”重定向(&U)uri=https://www.facebook.com/connect/login_success.html&response_type=token&scope=publish_stream、管理页面、读取流、状态更新”
echo“
测试”

$facebook=newfacebook(数组('appId'=>$appId,'secret'=>$appsecret,)
$access\u token=$facebook->getAccessToken()

$pageinfo=$facebook->api(“/”$page\u id.?fields=access\u token”)

$page\u access\u token=$pageinfo['access\u token']


echo“
圣杯=$page\u access\u token”

OK,使用页面id我得到“{”错误“{”消息“:(#200)用户没有授权应用程序执行此操作”,“键入“:”OAutheException“,”代码“:200}”,这很有意义。但是,我如何授权页面使用我的应用程序并检查权限是否正确?您是否已授予“管理页面”权限?根据是,但对我(用户不是页面)。如果不确定如何查询或设置页面管理页面,则应为您授予用户权限,然后您可以获取页面的访问令牌。您确定已将资源管理器工具中的应用更改为您的应用吗