Facebook 发布游戏成就-无效令牌错误:“已指定ID”
我正试图使用下面显示的PHP CURL代码将一个游戏成果发布到Facebook上 我有两个变量$non_sef_成就和$sef_成就 使用$sef_成就,我得到了一个无效类型的游戏,并且该游戏是必需的 使用$non_sef_actization变量,我在注册成就时会得到以下转储。请注意,当我发布分数时,我得到了正确答案,而另一个错误是当我试图发布成绩时 你能帮我找出我做错了什么吗 [字符串]{错误:{消息:无效令牌:\103032446\.已指定ID.,类型:OAutheException,代码:2500}}=寄存器:工具提示 [string]true=帖子得分:工具提示 [string]{错误:{消息:无效令牌:\100023423602\。已指定ID.,类型:OAutheException,代码:2500}}=成就后:工具提示 注意:标记已被编辑Facebook 发布游戏成就-无效令牌错误:“已指定ID”,facebook,api,achievements,Facebook,Api,Achievements,我正试图使用下面显示的PHP CURL代码将一个游戏成果发布到Facebook上 我有两个变量$non_sef_成就和$sef_成就 使用$sef_成就,我得到了一个无效类型的游戏,并且该游戏是必需的 使用$non_sef_actization变量,我在注册成就时会得到以下转储。请注意,当我发布分数时,我得到了正确答案,而另一个错误是当我试图发布成绩时 你能帮我找出我做错了什么吗 [字符串]{错误:{消息:无效令牌:\103032446\.已指定ID.,类型:OAutheException,代码
//Get the achievement
$achievement_user = $this->achUser->event_user->username;
// $achievement = 'http://apps.facebook.com/my_app/component/achievements/achievement/'.$this->achUser->ach->name.'-'.$this->achUser->ach->id;
$non_sef_achievement = 'https://apps.facebook.com/my_app/index.php?option=com_jachievements&view=achievement&id='.$this->achUser->ach->id;
// http://mysite.com/index.php?option=com_jachievements&view=achievement&id=1
$sef_achievement = 'https://apps.facebook.com/my_app/achievements/achievement/'.$this->achUser->ach->id;
//CHECK https
$achievement_display_order = 1;
// Get an App Access Token
$token_url = 'https://graph.facebook.com/oauth/access_token?'
. 'client_id=' . $app_id
. '&client_secret=' . $app_secret
. '&grant_type=client_credentials';
$token_response = file_get_contents($token_url);
$params = null;
parse_str($token_response, $params);
$app_access_token = $params['access_token'];
$achievement_registration_URL = 'https://graph.facebook.com/'.$app_id.'/achievements';
$ch = curl_init($achievement_registration_URL);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, 'achievement='.$non_sef_achievement.'&display_order='.$achievement_display_order.'&access_token='.$app_access_token);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$result = curl_exec($ch);
curl_close($ch);
$ach_id = $this->achUser->ach->id;
$db =& JFactory::getDBO();
$tableName = $db->nameQuote('jos_ja_achievements_actions');
$achparams = $db->nameQuote('params');
$achtype = $db->nameQuote('community_addkarmapoints');
$sql = "SELECT $achparams FROM ".$tableName." WHERE ach_id = $ach_id AND `type_name` = 'community_addkarmapoints'" ;
$db->setQuery($sql);
$row = $db->loadRow();
$achparam = $row['0'];
$str = explode('"',$achparam);
$ach_points = $str['3'];
$score = $ach_points;
$score_URL = 'https://graph.facebook.com/' .$fbUserId. '/scores';
$ch = curl_init($score_URL);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, 'score='.$score.'&access_token=' . $app_access_token);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$result = curl_exec($ch);
curl_close($ch);
POST a user achievement
$achievement_URL = 'https://graph.facebook.com/'.$fbUserId.'/achievements';
$ch = curl_init($achievement_URL);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, 'achievement='.$non_sef_achievement.'&access_token=' . $app_access_token);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$result = curl_exec($ch);
curl_close($ch);
如果您发出以下请求,可能会导致“已指定ID”: https://graph.facebook.com/[USER ID]/feed?ID=[SOME OTHER ID] 在该示例中,路径中的第一个“[USER ID]”是Facebook请求的“ID”,指定另一个ID作为参数会触发错误
在这种情况下,最有可能的原因是,如果您的成就URL中有一个“?id=”,在调用API之前没有正确转义-请检查您的编码或更改您在成就生成代码中使用的参数的名称,如果您发出以下请求,可能会导致“已指定id”: https://graph.facebook.com/[USER ID]/feed?ID=[SOME OTHER ID] 在该示例中,路径中的第一个“[USER ID]”是Facebook请求的“ID”,指定另一个ID作为参数会触发错误
在这种情况下,,最可能的原因是,如果您的成就URL中有一个“?id=”,在调用API之前没有正确转义-请检查您的编码或更改您在成就生成代码中使用的参数的名称您使用的是什么版本的PHP-SDK?使用的是什么版本的PHP-SDK的v3.1.1?使用的是什么版本的PHP-SDK的v3.1.1事实上,你的成就URL中似乎有一个未编码的?id=——我相当肯定这就是问题所在。对URL进行编码帮助我克服了这个错误,但是我现在在尝试注册成就时遇到了一个新错误,它告诉我apps.facebook.com/canvas_appname有一个og类型的游戏。当我使用facebook linter工具并将此url作为游戏显示时,它需要game.og:type。我看不到任何可以在开发者端更改的设置。听起来这应该是一个新问题,但你确定你的应用程序没有进行重定向,并且URL本身是正确的吗?不,应用程序没有进行任何重定向。我不明白为什么当我把url放在那里时,facebook linter工具会返回游戏。我把apps.facebook.com/myappname放在上面,它告诉我类型是game,这就是为什么我会出现错误,因为它需要是game.Achieve。事实上,你的成就URL中似乎有一个未编码的?id=-我很确定这就是问题所在。对URL进行编码帮助我克服了这个错误,但是我现在在尝试注册成就时遇到了一个新错误,它告诉我apps.facebook.com/canvas_appname有一个og类型的游戏。当我使用facebook linter工具并将此url作为游戏显示时,它需要game.og:type。我看不到任何可以在开发者端更改的设置。听起来这应该是一个新问题,但你确定你的应用程序没有进行重定向,并且URL本身是正确的吗?不,应用程序没有进行任何重定向。我不明白为什么当我把url放在那里时,facebook linter工具会返回游戏。我把apps.facebook.com/myappname放进去,它告诉我类型是game,这就是为什么我会出错,因为它需要是game.acquisition