Php 使用facebook API上传图像
问题:如何通过FBAPI将图像从我的Web服务器上传到facebook 我正在编写一个应用程序,从用户的相册中检索图像,进行一些修改(例如添加水印),然后将其发送回相册 我用来上传照片的代码如下Php 使用facebook API上传图像,php,api,facebook,upload,photo,Php,Api,Facebook,Upload,Photo,问题:如何通过FBAPI将图像从我的Web服务器上传到facebook 我正在编写一个应用程序,从用户的相册中检索图像,进行一些修改(例如添加水印),然后将其发送回相册 我用来上传照片的代码如下 <?php include_once("api/facebook.php"); include_once("config.php"); include_once("utils.php"); include_once("bemyfans.php"); $facebook=new Facebook($
<?php
include_once("api/facebook.php");
include_once("config.php");
include_once("utils.php");
include_once("bemyfans.php");
$facebook=new Facebook($api_key,$app_secret);
$facebook->require_frame();
$user=$facebook->require_login();
echo "<p>Hello <fb:name useyou='false' uid=\"$user\"/></p>";
$args = array(
'api_key' => $api_key,
'call_id'=>microtime(true),
'v'=>'1.0',
'format' => 'JSON'
);
$args['Lenna.png']="@/home/thoai/htdocs/apps/bemyfans/Lenna.png";
signRequest($args,$secret);
$ch = curl_init();
$url = 'http://api.facebook.com/restserver.php?method=photos.upload';
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $args);
if ($data = curl_exec($ch)) echo "done";
echo $data;
function signRequest(&$args, $secret){
ksort($args);
$sig = '';
foreach($args as $k => $v){
$sig .= $k . '=' . $v;
}
$sig .= $secret;
$args['sig'] = md5($sig);
}
?>
从错误判断,您的请求没有正确签名
我快速查看了facebook API文档,您的signRequest()函数对我来说非常合适
所以我建议你检查一下显而易见的事实:你的$secret是正确的
编辑:你对评论中问题的回答让我现在看到了。我不知道facebook服务器是如何处理二进制数据和签名的,但你的签名是基于带@前缀的路径名。Facebook从未看到该路径名,因为cURL发送文件内容。所以facebook无法重建签名并验证它
仔细查看facebook文档,查看您正在拨打的电话。您可能需要在生成签名时忽略该文件,或者对其进行base64编码,或者谁知道是什么
但很明显,您的代码发送的签名facebook无法验证,因为它从未在您的请求中看到任何类似“@/home/thoai/htdocs/apps/bemyfans/Lenna.png”的内容。从错误判断,您的请求没有正确签名
我快速查看了facebook API文档,您的signRequest()函数对我来说非常合适
所以我建议你检查一下显而易见的事实:你的$secret是正确的
编辑:你对评论中问题的回答让我现在看到了。我不知道facebook服务器是如何处理二进制数据和签名的,但你的签名是基于带@前缀的路径名。Facebook从未看到该路径名,因为cURL发送文件内容。所以facebook无法重建签名并验证它
仔细查看facebook文档,查看您正在拨打的电话。您可能需要在生成签名时忽略该文件,或者对其进行base64编码,或者谁知道是什么
但很明显,您的代码发送的签名是facebook无法验证的,因为它在您的请求中从未看到任何类似“@/home/thoai/htdocs/apps/bemyfans/Lenna.png”的内容。您正在使用包括file参数在内的所有参数对请求进行签名。要获得正确的签名,您需要在args中不带file参数的情况下对请求进行签名。您正在使用包括file参数在内的所有参数对请求进行签名。要获得正确的签名,您需要在args中不使用file参数的情况下对请求进行签名。我认为您做得完全错误
看看我的代码
$appapikey = 'keykeykey';
$appsecret = 'secretcesret';
$facebook = new Facebook($appapikey, $appsecret);
$user=$facebook->require_login()
$facebook->api_client->photos_upload($file, null, "A test Photo", $user);
这对我来说很管用我认为你完全做错了
看看我的代码
$appapikey = 'keykeykey';
$appsecret = 'secretcesret';
$facebook = new Facebook($appapikey, $appsecret);
$user=$facebook->require_login()
$facebook->api_client->photos_upload($file, null, "A test Photo", $user);
这对我很有用这个问题中的代码使用了过时的REST API,很快就会停止使用
现在正确的方法是:
$fbk = new Facebook(/* conf */);
$fbk->setFileUploadSupport(true);
//If you are executing this in a script, and not in a web page with the user logged in:
$fbk->setAccessToken(/* access token from other sources */);
//To add to an album:
$fbk->api("/$albumId/photos", "POST",
array('source' => '@'. realpath($myPhoto), 'message' => "Nice photo"));
//To upload a photo directly (the album will be created automatically):
$fbk->api("/me/photos", "POST",
array('source' => '@'. realpath($myPhoto), 'message' => "Nice photo"));
记住$fbk->setFileUploadSupport(true)代码>此问题中的代码使用了过时的REST API,该API将很快停止使用
现在正确的方法是:
$fbk = new Facebook(/* conf */);
$fbk->setFileUploadSupport(true);
//If you are executing this in a script, and not in a web page with the user logged in:
$fbk->setAccessToken(/* access token from other sources */);
//To add to an album:
$fbk->api("/$albumId/photos", "POST",
array('source' => '@'. realpath($myPhoto), 'message' => "Nice photo"));
//To upload a photo directly (the album will be created automatically):
$fbk->api("/me/photos", "POST",
array('source' => '@'. realpath($myPhoto), 'message' => "Nice photo"));
记住$fbk->setFileUploadSupport(true)
在$args['Lenna.png']=“@/home/thoai/htdocs/apps/bemyfans/Lenna.png”中的@
是什么代码>?cURL将发送文件的内容,而不是文件名。啊,这就是为什么。查看我的更新答案。$args['Lenna.png']=“@/home/thoai/htdocs/apps/bemyfans/Lenna.png”中的@
是什么意思代码>?cURL将发送文件的内容,而不是文件名。啊,这就是为什么。查看我的更新答案。请展开你的答案。请展开你的答案。