我正在使用Facebook API,并通过终端成功使用以下命令将消息发布到另一个用户墙。
curl -F 'access_token=XXXXXXXXXX' \
-F 'message=Hello World' \
-F 'to={["id":XXXXXXX]}' \
https://graph.facebook.com/me/feed
这很有效。我试图用这段代码通过php做同样的事情;
$fields = array(
'access_token' => $t,
'message' => $message,
'to' => '{["id":'.$id.']}'
);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $fields);
curl_exec($ch);
curl_close($ch);
这段代码成功地发布了一条消息,但它是在我的OWN墙上发出的(即它忽略了'to'参数)。我是cURL的新手,我确定我编码错了,或者可能错过了一个cURL标志,但我已经通过cURL进行了几个关于POST的教程,包括一些SO答案,我看不到我错过了什么。
非常感谢任何帮助!
答案 0 :(得分:1)
打印出来的是什么?
if ( 'POST' == $_SERVER[ 'REQUEST_METHOD' ]) {
echo 'Posted: ';
print_r( $_POST );
exit;
}
$t = '121';
$message = 'helo Worlds';
$id = 1234;
$fields = array(
'access_token' => $t,
'message' => $message,
'to' => '{["id":'.$id.']}'
);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://localhost:8888/testbed/' ); // THIS script
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $fields);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE );
$out = curl_exec($ch);
curl_close($ch);
echo 'Received[ ' . $out . ' ]';
在我的本地包装盒上打印:
Received[ Posted: Array ( [access_token] => 121 [message] => helo Worlds [to] => {[\"id\":1234]} ) ]
答案 1 :(得分:0)
更新:
$ fields应为GET like string
para1=val1¶2=val2&...
或数组:
要在HTTP“POST”中发布的完整数据 操作。要发布文件,请预先添加 带@的文件名并使用完整路径。 文件类型可以是显式的 通过以下文件名指定 格式中的类型 ';类型= mime类型'。这个参数可以 要么作为urlencoded传递 字符串 'para1 = val1& para2 = val2& ...'或 as 数组,字段名称为键, 字段数据值。如果价值是 数组,Content-Type标题将是 设置为multipart / form-data。截至PHP 5.2.0,使用@前缀传递给此选项的文件必须在 数组形式工作。