Marcos Rodriguez
Marcos Rodriguez

Reputation: 35

OAuthException(#240) This user isn't allowed to upload photos to this object's wall

This is my cron.php

<?php
ob_start();

// Load the required files

require_once('fb_src/facebook.php');
require_once('includes/fb.php');
require_once('includes/db.php');
require('includes/timezone.php');


// Connect to the DB

$con = mysql_connect(SERVER,USERNAME,PASSWORD);
if (!$con)
{
    die('Could not connect: ' . mysql_error());
}
mysql_select_db(DB, $con);

$result = mysql_query("SELECT * FROM queue WHERE date_to_post='" . date("o-m-d") . "'");

// Fetch in the DB the content that is supposed to be posted today and echo it out

date_default_timezone_set('CST');
echo "Date: " . date("o-m-d");  
echo "<br/>Time: " . date(g) . ":" . date(i) . " " . date(A);

// Connect to FB

$facebook = new Facebook(array(
    'appId' => APPID,
    'secret' => SECRET,
    'cookie' => true,
    'fileUpload' => true
));   

while($row = mysql_fetch_array($result))
{
    echo "ID: " . $row['id'];
}

echo "<br/><hr/><br/>";




echo "Connected...<br/>";



// Post the content in FB

echo "<br/><br/>Query: SELECT * FROM queue WHERE date_to_post='" . date("o-m-d") . "'";
$result2 = mysql_query("SELECT * FROM queue WHERE date_to_post='" . date("o-m-d") . "'");


while($row = mysql_fetch_array($result2))
{
    $picture_path_query = mysql_query("SELECT * FROM messages WHERE id='" . $row['message_id'] . "'");
    while ($row_for_picture_path = mysql_fetch_array($picture_path_query)) {
        $picture_path =  "@" . realpath($row_for_picture_path['picture']);
    }
    echo "<br/>Picture Path: $picture_path <br/>";
    echo "<br/>Message ID: " . $row['message_id'];
    /* if ((substr(strstr($row['time_to_post'], ':'), 0, 2) ==  ":" . substr(date('i'), 0, 1)) && (date(g) == substr($row['time_to_post'], 0, 1)) && (date(A) == $row['am_or_pm'])) {  */
        try {
            echo "<br/><br/>About to post...<br/><br/>";
            $uid = $row['uid'];
            $message = $row['message_to_post'];
            $picture = $picture_path;
            echo "PIC: $picture <br/><br/>";
            $access_token = $row['access_token'];
            $response = $facebook->api(
              "/$uid/photos/",
              'post',
              array(
                'access_token ' => $access_token,
                'message' => $message,
                'source' => $picture,
                 // @-sign must be the first character
)
            );
            echo "Reponse: $response";

            //}
            echo "Posted message #" . $row['id'] . " with message '" . $row['message_to_post'] . "' and picture path '" . $row['picture'] . "' by user: '" . $uid . "'";
            }

        catch(FacebookApiException $e) {
            $login_url = $facebook->getLoginUrl( array(
                'scope' => 'publish_stream'
            ));

            print_r($e->getType());
            print_r($e->getMessage());
        }
    }
//}

echo "<br/><br/><strong>Done.</strong> - <a href='" . $facebook->getLogoutUrl() . "'>Logout</a>";
ob_flush();
?>

I get the UID and the access token from a mysql db. That user has allowed my app to post on their behalf and access the news feed. Once I run the script I get:

OAuthException(#240) This user isn't allowed to upload photos to this object's wall

Upvotes: 0

Views: 730

Answers (1)

cpilko
cpilko

Reputation: 11852

It looks like you're trying to post this photo to the user's wall. Your API relative_url would be less prone to errors if you use /me/photos instead of /$uid/photos. The access_token owner dictates who is me.

Other thoughts: Have you checked the stored access_token in your database with the Facbook Debugger to make sure it is valid, actually belongs to the user you expect and has the correct permissions? Also, have you validated the stored uid to be sure it is correct?

Upvotes: 2

Related Questions