Facebook API ile resmi yükleyin

4 Cevap php

Soru: Nasıl FB API aracılığıyla Facebook'a benim webserver bir görüntü yüklemek için?

Ben, kullanıcının fotoğraf albümü görüntüleri alır bir uygulama yazıyorum (bir filigran ekleme gibi) bazı modifikasyonlar ardından fotoğraf albümü için geri göndermek yapar.

Ben aşağıdaki gibi fotoğraf yüklemek için kullandığınız kod

<?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);
}
?>

Bu sadece çalışmıyor. Daha spesifik olarak, bir "Yanlış imza" mesajı alıyorum.

Ne kodu ile yanlış??

4 Cevap

Bu soru kod outdated REST APIs kullanmak, yakında kesilecektir.

Doğru yolu şimdi:

$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"));

Unutmayın $fbk->setFileUploadSupport(true);

Hata bakılırsa, isteğiniz düzgün imzalı varlık değildir.

Ben facebook API docs hızlı bir göz attım ve signRequest () işlevi, bana hakkıyla ilgili görünüyor.

Bu yüzden bariz kontrol önerelim: Eğer $ gizli doğru olduğunu.

EDIT: yorumlarda sorulara verdiğiniz cevap bana şimdi görüyorum olun. Ben facebook sunucuları ikili veri ve imzaları ile nasıl başa bilmiyorum, ama imza o @ öneki yoladıyla dayanmaktadır. CURL dosya içeriğini gönderir beri Facebook, bu yolunu görür asla. Yani facebook imzayı yeniden ve bunu doğrulamak için hiçbir yolu yoktur.

Eğer çok dikkatli yapıyoruz çağrısı için facebook dokümanlar kontrol edin. Size imza-nesil dosyayı atlamak gerekebilir, ya da base64 kodlamak, ya da kim bilir ne.

Ama bu uzaktan isteği "@ / home / thoai / htdocs / apps / bemyfans / Lenna.png" benzeyen bir şey görür asla beri kod, facebook kontrol edemez bir imza gönderiyor olduğu açıktır.

Sen senin dosya argüman dahil olmak üzere tüm args kullanarak talep imzalıyorlar. Doğru bir imza almak için isteği args without dosya argümanı imzalamak gerekiyor.

I think you are doing it all wrong Look at my code

$appapikey = 'keykeykey';
$appsecret = 'secretcesret';
$facebook = new Facebook($appapikey, $appsecret);
$user=$facebook->require_login()

$facebook->api_client->photos_upload($file, null, "A test Photo", $user);

Bu benim için çalışıyor