2011年8月23日 星期二

facebook add testuser

PHP SDK VER:facebook-php-sdk-v3.1.1-5-gf2a8588

test users overview:
test users 除了可以大量建立測試帳號之外,其保密的功能簡直到家!
所建立的test users,除了所在的group之外,無法存取其他app或user
當然別人也連不到該test user。這在開發app時,可以防止開發資料外洩!!
而且也不用像以前那樣大量註冊facebook,來提供測試帳號;
更麻煩的是當新開一個專案,還要一個一個測試帳號加進test user list,並且等待對方接受邀請~
這些問題 通通不會再有了


有了add test users這項功能,往後你只要在一個app裡開完所有的test user,並且把這些帳密
發送出去就可以使用了;當有新專案產生時,也可以將test users 全部掛到新專案底下。

在facebook developers頁面底下,只要是該app的developer就可以新增test users
在facebook的介面下,可以一次增加十個,上限為500個
但使用facebook介面新增的話,目前有一個問題,就是得不到該帳號的password!
這會導致無法直接用test user的ac/pw登入此test user
參考官方文件,直接使用api建立,雖然一個request只能增加一個user
不過名稱可以馬上設定(也會將該名稱加入帳號裡),在加入成功之後 還會回傳該用戶的password

以下是sample

require 'src/facebook.php';
$app_id="APPID";
$secret="APPSECRET";
$facebook = new Facebook(array(
'appId' => $app_id,
'secret' => $secret,
));
if ($user) {
	try {
		// Proceed knowing you have a logged in user who's authenticated.
		$user_profile = $facebook->api('/me');
	} catch (FacebookApiException $e) {
		error_log($e);
		$user = null;
	}
}

$access_token=getaccessToken($app_id,$secret);
echo "accesstoken:".$access_token;
echo "
";
//create test user

$newTestUser=createTestUser($facebook,$app_id,$access_token,"newtestuser");
print_r($newTestUser);
echo "
";

//get testusers list
$testusers=getAllTestUsers($app_id,$access_token);
print_r($testusers);
echo "
";

print_r($testusers[0]);
echo makingFriendConnections($testusers[0],$testusers[1]);
echo "
";
echo makingFriendConnections($testusers[1],$testusers[0]);

/**
* @desc create a test user
* @param Lib $facebook
* @param STRING $app_id
* @param STRING $access_token
* @param STRING $name //no 0~9
* @return Object user
*/
function createTestUser($facebook,$app_id,$access_token,$name)
{
	$attachment = array('access_token' => $access_token);
	return $facebook->api("/$app_id/accounts/test-users?installed=true&name=".$name."&permissions=", 'POST', $attachment);
}

/**
* @desc getAllTestUsers
* @param STRING $app_id
* @param STRING $access_token
* @return ArrayObject user
*/
function getAllTestUsers($app_id,$access_token)
{
	$url = "https://graph.facebook.com/$app_id/accounts/test-users?access_token=$access_token";
	$data=facebookCurl($url);
	$request=json_decode($data,true);
	return $request['data'];
}

/**
* @desc makingFriendConnections
* @param userObject $testuser1
* @param userObject $testuser2
* @return BOOLEAN success
*/
function makingFriendConnections($testuser1,$testuser2)
{
	if(isset($testuser1['access_token'])==false)
	return "the user not install on this app";
	$url = "https://graph.facebook.com/".$testuser1['id']."/friends/".$testuser2['id']."?method=post&access_token=".$testuser1['access_token'];
	return facebookCurl($url);
}

function getaccessToken($app_id,$secret)
{
	$url = 'https://graph.facebook.com/oauth/access_token';
	$params=array(
"type" => "client_cred",
"client_id" => $app_id,
"client_secret" => $secret);
	$data=facebookCurl($url,$params);
	return str_replace('access_token=', '', $data);
}

function facebookCurl($url,$params=NULL)
{
	$ch = curl_init();
	curl_setopt($ch, CURLOPT_HEADER, $header);
	curl_setopt($ch, CURLOPT_NOBODY, $header);
	curl_setopt($ch, CURLOPT_URL, $url);
	curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
	curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
	curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
	curl_setopt($ch, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);
	curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
	curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
	curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
	if($params)
	curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($params, null, '&') );
	$data = curl_exec($ch);
	curl_close($ch);
	return $data;
}
?>

沒有留言:

張貼留言