2012-09-06 3 views
2

몇 달 전에 고객의 블로그 페이지에서 문자열을 구문 분석하여 Facebook 벽에 주석으로 게시 할 작은 응용 프로그램을 작성했습니다. 관리 할 자격 증명이 있습니다.자동화 된 코멘트 Cron 작업이 더 이상 작동하지 않음 : 치명적 오류 : 잡히지 않음 OAuthException : 잘못된 서명

클라이언트는 한 번만 내 앱을 인증하고 지금은 "offline_access"권한을 통해 자신의 벽에 게시 할 수있었습니다.

이전 SDK 또는 최신 SDK를 사용하더라도 코드가 더 이상 작동하지 않습니다. 나는 아래 코드를 최신 버전의 SDK로 마이그레이션하고 인증을 처리하지 못하는 최신 프로토콜을 무용지물로 마이그레이션하려고 시도했다. 또한 클라이언트가 "manage_pages"범위 (1 일부터 제자리에 있었음)로 차이점없이 내 앱을 다시 인증하게했습니다.

내가 오류 내가 페이스 북의 문서 및 스택 오버플로의 지혜로운 현인 사이 원에 있었던 Fatal error: Uncaught OAuthException: Bad signature

만 내 지혜의 끝에서입니다. 내 문제는 "오래 지속되는"액세스 토큰을 생성 할 수 없다는 점에 있다고 생각하지만 클라이언트가 매번 페이스 북에 로그인하지 않고도이 작업을 수행 할 수 있어야합니다 (또는 전혀 문제가되지 않습니다) . 그렇다면 Facebook의 사용자 트위터 상태를 반영하는 다른 앱이 후속 사용자 로그인/인증없이 오프라인 게시를 처리하는 방법은 무엇입니까?

Facebook의 Graph API Explorer를 사용하면 코드가 작동하는 것으로 나타났습니다. 그러나 그것은 내가 대화를보기를 요구하고 이것은 나의 고객의 경우에는 효과가 없을 것이다. (로그인/다시는-인증은 몇 달 전에 필요하지 않았다.)

내가 답을 찾기 위해 노력하고 지난 일주일 동안 내 머리 밖으로 당겨되었고, 나는 빙빙 돌고 계속 :

https://developers.facebook.com/blog/post/2011/05/13/how-to--handle-expired-access-tokens

https://developers.facebook.com/roadmap/offline-access-removal

Facebook API: How to post to own application wall without login

http://facebook.stackoverflow.com/questions/11839544/how-to-avoid-fatal-error-uncaught-oauthexception-when-using-cron-job

... 몇 가지 예를 들자면 다음과 같습니다. 욕조에 갇힌 거미 같아.

누군가가 내 사례에 맞는 실제 코드 예제를 공유 할 수 있다면 대단히 감사하게 생각합니다. 감사합니다.

<?php 

require_once 'facebook.php'; 

$facebook_access_token_url = "https://graph.facebook.com/oauth/access_token?grant_type=client_credentials&client_id=" . FACEBOOK_APP_ID . "&client_secret=" . FACEBOOK_APP_SECRET; 

$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, $facebook_access_token_url); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
$facebook_access_token = curl_exec($ch); 
curl_close($ch); 

$config['appId'] = FACEBOOK_APP_ID; 
$config['secret'] = FACEBOOK_APP_SECRET; 
$config['fileUpload'] = false; // optional 
$facebook = new Facebook($config); 

$facebook->setAccessToken($facebook_access_token); 

$page_id = FACEBOOK_APP_PAGE_ID; 
$facebook_access_token = ""; 
$result = $facebook->api('/' . FACEBOOK_ACCOUNT_ADMIN_ID . '/accounts'); 
foreach($result['data'] as $page){ 
    if($page['id'] == $page_id) { 
     $facebook_access_token = $page['access_token']; 
     break; 
    } 
} 

$facebook->setAccessToken($facebook_access_token); 
$attachment = array(
    'access_token' => $facebook_access_token, 
    'message' => 'Test message', 
    'scope' => 'manage_pages,publish_stream,publish_actions' 
); 

$result = $facebook->api('/' . $_GET['post_id'] . '/comments', 'post', $attachment); 

?> 
+0

코드의 어느 지점에서 오류가 발생합니까? – CBroe

답변

1

당신이 수명이 긴 사용자 액세스 토큰을 사용하여 토큰 페이지 액세스를 얻을 경우, 페이지 토큰 : 여기가 최신 페이스 북 PHP SDK 및 프로토콜에 적응하려고 노력하는 것이 작업 한 코드는 기본적으로 만료되지는 않습니다. 따라서 offline_access가 더 이상 사용되지 않는 것은 이러한 시나리오에서는 실제 문제가 아닙니다.

관련 문제