API(C#)を使ってFacebookページに投稿することはできましたが、ページの管理者がログアウトすると以下のエラーが発生します:
(OAuthException - #190) Error validating access token:ユーザがログアウトしたため、セッションが無効です;
期限切れにならないアクセストークンを生成するにはどうすればよいですか?
Facebookのログインダイアログを開かない解決策が必要です。
次の手順に従って、コーディングなしで期限切れのないアクセストークンを生成できます。
1。 グラフを開くエクスプローラー:https://developers.facebook.com/tools/explorer/。 2。 右隅のドロップダウンからアプリケーションを選択します。 3。 [トークンを取得]ドロップダウンからファンページを選択します。 4。 [送信]ボタンをクリックしてトークンを生成します。 5。 [フィールドの検索]の左側からaccess_tokenと入力し、[送信]をクリックします。 このトークンをメインウィンドウからコピーします。 6。 https://developers.facebook.com/tools/debug/accesstokenを開き、ここにトークンを貼り付けます。 「デバッグ」をクリックします。 7。 「アクセストークンの拡張」ボタンをクリックします。 これは決して期限切れになるトークンを生成しません。
これは、PHP SDKを使ってquot;Never"expireアクセストークンを生成するためのコードです:
$facebook = new \Facebook\Facebook([
'app_id' => '{app-id}',
'app_secret' => '{app-secret}',
'default_graph_version' => 'v2.10',
'default_access_token' => '{access-token}'
]);
// Exchange token
$token = $facebook->post('/oauth/access_token',
array(
'grant_type' => 'fb_exchange_token',
'client_id' => 'APP ID',
'client_secret' => 'APP Secret',
'fb_exchange_token' => 'access Token'
)
);
$token = $token->getDecodedBody();
$token = $token['access_token'];
echo $token;
アクセストークンをechoして、access token debuggerを使ってデバッグします。結果はこうなるはずです:期限切れ:Never`.
ドキュメントからの参照
1.ファンページの管理者用に長期保存可能なトークンを生成する http://appdevresources.blogspot.sg/2012/11/extend-facebook-access-token-make-it.html (画像付きの素敵な説明) 2.ファンページ自体のための長期トークンを生成する http://appdevresources.blogspot.sg/2012/11/retrieving-facebook-page-id-and.html 3.ファンページのウォールに投稿するには、2)のトークンを使用する(Facebookログインダイアログは不要)。 4.ファンページの管理者がログアウトした場合でも、生成されたトークンは失効しません。
トークンの有効期限を60日に更新するには、facebookの以下のapiを使用します。トークンの有効期限が切れる60日以内に同じapiを再度呼び出すと、その時点からトークンの有効期限が60日に更新されます。 トークンの有効期限はexpiresパラメータにあり、その値は秒単位である。
CLIENT_IDとCLIENT_SECRETを実際の値に置き換える。
https://graph.facebook.com/oauth/access_token?client_id=<CLIENT_ID>
&client_secret=<CLIENT_SECRET>&grant_type=fb_exchange_token
&fb_exchange_token=<ACCESS_TOKEN>
ACCESS_TOKENには、"access_token="を付けずに実際のトークン値を入れてください;
2018年11月ですが、これでうまくいきました。!
<?php
$args=[
'usertoken'=>'xxx',
'appid'=>'xxx',
'appsecret'=>'xxx',
'pageid'=>'xxx'
];
function generate_token($args){
$r = json_decode(file_get_contents("https://graph.facebook.com/v2.9/oauth/access_token?grant_type=fb_exchange_token&client_id={$args['appid']}&client_secret={$args['appsecret']}&fb_exchange_token={$args['usertoken']}")); // get long-lived token
$longtoken=$r->access_token;
$r=json_decode(file_get_contents("https://graph.facebook.com/{$args['pageid']}?fields=access_token&access_token={$longtoken}")); // get user id
$finaltoken=$r->access_token;
return $finaltoken;
}
echo "https://graph.facebook.com/v2.9/oauth/access_token?grant_type=fb_exchange_token&client_id={$args['appid']}&client_secret={$args['appsecret']}&fb_exchange_token={$args['usertoken']}";
echo '<br><br>Permanent access token is: <input type="text" value="'.generate_token($args).'"></input>';
。。
1。 ない場合はアプリを作成してください-https://developers.facebook.com/。 2。 グラフエクスプローラーで短命のユーザーアクセストークンを作成します-https://developers.facebook.com/tools/explorer/。
上記で作成したアプリを選択し、「ドロップダウンでユーザーアクセストークンを取得」を選択します。
ユーザーアクセストークンポップアップで、トークンのいくつかの権限を選択できます。 有効期限のないページアクセストークンの場合は、「ページを公開」と「ページを管理」を選択する必要があります。
3。 長寿命のユーザーアクセストークンを作成します。
https://developers.facebook.com/tools/accesstoken/に移動します。 そこには、あなたが持っているすべてのアプリの短命のユーザーアクセストークンとアプリアクセストークンがあります。
上記で作成したアプリのユーザーアクセストークンのデバッグオプションを押します。 これにより、デバッグツールに移動します。 短命のユーザーアクセストークンのすべての情報を見つけることができます。
下部には、この短命のユーザーアクセストークンの長寿命(60日)のユーザーアクセストークンを生成するオプションがあります。 「アクセストークンの拡張」を選択して、長寿命のユーザーアクセストークンを生成します。
4。 期限切れのないページアクセストークンを作成します。
a。 グラフエクスプローラーに移動します-https://developers.facebook.com/tools/explorer/。
b。 前のステップで生成された長寿命のユーザーアクセストークンを[アクセストークン]フィールドに貼り付けます。
c。 アクセス "/ me?fields = access_token」api。 . これにより、ページアクセストークンとそれらに関連するページが表示されます。 これらのページアクセストークンは期限切れになることはありません(ユーザーがパスワードを変更するまで/ユーザーがアプリを取り消すまで)。
5。 有効期限のないページアクセストークンを確認します。
a。 https://developers.facebook.com/tools/debug/accesstoken/に移動します。
b。 上記のステップから取得したページアクセストークンを「アクセストークン」フィールドに追加してデバッグします。
あなたは決して期限切れになります。
少し変更を加えてここで見つかりました: https://medium.com/@Jenananthan/how-to-create-non-expiry-facebook-page-token-6505c642d0b1。
受け入れられた答えはもはや正しくありません。 これは現在動作します。
グラフエクスプローラーを開く:https://developers.facebook.com。
-ログインして、右隅のドロップダウンからアプリケーションを選択します。 -ログインしたら、[ツール]をクリックします。右上隅のサポートアイコン。 -次に、アプリケーション名の下の右側にあるAccess Token Toolリンクを選択します。
表示されているユーザートークンの右側> [デバッグ]ボタンをクリックします。
これにより、Access Token Debuggerに移動します。
-[アクセストークンの拡張]と表示されている下部の青いボタンをクリックします。 -これは言うでしょう:この新しい長寿命のアクセストークンは決して期限切れになりません。 -そのトークンをコピーしてアプリケーションに貼り付けます。 EAAYMFDuobYUBADtYjVDukwBGpwPHOCY0iYglYY3j3r200MzyBZB4。....
スコープ権限でmanage_pages、pages_show_listなどを使用して、FB.login()によるユーザーアクセストークンを取得する必要があります。 次に、FB.api( "/ {user-app-id} / accounts"、フィールドを実行します。 ...)access_tokenを含む、それぞれの情報を含むページのリストを取得します。 ここでは、短命の話が得られますが、このトークンを使用すると、有効期限を「決して」に延長できます。
FB.login(function (response){
if(response.status!=="connected"){
return;
}
FB.api('/'+USER_APP_ID+'/accounts',{fields: 'id, name, access_token,category, picture'},
function(d){
console.log(d) // Here you get access_token (short-lived-token)
});
},{scope: 'manage_pages, pages_show_list', auth_type: 'rerequest'});
最後のアクセストークンとサーバー側から、アプリIDとアプリのApp Secretを使用してページを管理するための権限を取得して、APIグラフに電話をかけます。
GET /oauth/access_token?
grant_type=fb_exchange_token&
client_id={app-id}&
client_secret={app-secret}&
fb_exchange_token={short-lived-token}
この応答により、「Never」の有効期限付きのトークンにアクセスできます。
参照: APIグラフアカウント、。 発散とアクセストークンの拡張。
4.x
Facebook SDK:を使用している場合、以下の方法は私には効果的でした。
1。 ここのメソッドを使用して、初めて一時ユーザーアクセストークンを作成します。 2。 今。! PHP SDK 4.xを使用して、このトークンを長期トークンに変換する時が来ました。 次のコードを使用してください。
//長寿命トークンを生成するためのクラス
。
<?php。
namespace App\Lib;
use Facebook\FacebookApp;
use Facebook\FacebookClient;
use Facebook\Authentication\OAuth2Client;
class FacebookLongLivedTokenGenerator
{
public $longLivedTokenGenerated = false;
public function generateFacebookLongLivedToken($appId, $appSecret, $oldToken)
{
//request new access token
$oauth2Fb = new OAuth2Client(new FacebookApp($appId, $appSecret), new FacebookClient());
$longLivedToken = $oauth2Fb->getLongLivedAccessToken($oldToken);
if ($longLivedToken) {
$this->longLivedTokenGenerated = true;
$this->userAccessToken = $longLivedToken;
}
return trim($this->userAccessToken);
}
}
この方法で上記のクラスを消費できます。
$longToken = new FacebookLongLivedTokenGenerator();
echo $longToken->generateFacebookLongLivedToken($appId, $appSecret, $oldUserAccessToken);
このMakefileは2015-10-29の時点で動作します。 ステップ2と3は2か月のトークンのみを提供しますが、最後のステップで与えられたページアクセストークンは< a href = "https://developers.facebook.com/tools/debug/">debugger< / a> "Expires:Never"として。 この答えは、他のいくつかの作業を利用しており、優先プログラミング言語に関係なく、開発者にとって物事を簡素化することを期待して提供されています。
これを使用する前に、既存のページID、アプリID、およびアプリシークレットを次の順序で〜/ .netrcファイルに配置する必要があります。 machine graph.facebook.comログイン123456アカウント234567パスワード345678
。
これを使用する前に、w3mでFacebookにログインし、[ログインしたままにする]をクリックします。
MACHINE := graph.facebook.com
PAGE_ID := $(shell awk '$$2 ~ /^$(MACHINE)$$/ {print $$4}' $(HOME)/.netrc)
APP_ID := $(shell awk '$$2 ~ /^$(MACHINE)$$/ {print $$6}' $(HOME)/.netrc)
APP_SECRET := $(shell awk '$$2 ~ /^$(MACHINE)$$/ {print $$8}' $(HOME)/.netrc)
PERMISSIONS := manage_pages,publish_actions,publish_pages
FB := https://www.facebook.com
GRAPH := https://$(MACHINE)
CODE ?=
TOKEN ?=
TWOMONTHTOKEN ?=
BROWSER ?= w3m -dump
REDIRECT := http://jc.unternet.net/test.cgi
CLIENT_SIDE := $(FB)/dialog/oauth?client_id=$(APP_ID)&redirect_uri=$(REDIRECT)
CLIENT_SIDE := $(CLIENT_SIDE)&scope=$(PERMISSIONS)&response_type=code
SERVER_SIDE := $(GRAPH)/oauth/access_token?client_id=$(APP_ID)
SERVER_SIDE := $(SERVER_SIDE)&redirect_uri=$(REDIRECT)
SERVER_SIDE := $(SERVER_SIDE)&client_secret=$(APP_SECRET)&code=$(CODE)
LONG_LIVED := $(GRAPH)/oauth/access_token?client_id=$(APP_ID)
LONG_LIVED := $(LONG_LIVED)&client_secret=$(APP_SECRET)
LONG_LIVED := $(LONG_LIVED)&grant_type=fb_exchange_token
LONG_LIVED := $(LONG_LIVED)&fb_exchange_token=$(TOKEN)
ACCOUNTS := $(GRAPH)/me/accounts?access_token=$(TWOMONTHTOKEN)
export
env:
env
@echo Usage: make code
@echo ' ' make CODE=codefrompreviousstep token
@echo ' ' make TOKEN=tokenfrompreviousstep longterm
@echo ' ' make TWOMONTHTOKEN=tokenfrompreviousstep accounts
@echo Then edit '$$HOME/.netrc' replacing password with page token
code:
$(BROWSER) "$(CLIENT_SIDE)"
token:
$(BROWSER) "$(SERVER_SIDE)"
longterm:
$(BROWSER) "$(LONG_LIVED)"
accounts:
$(BROWSER) $(ACCOUNTS)
多くの場合、最初のステップはw3mで失敗します。 その場合は、firefoxなどの別のブラウザをインストールします。スクリプトがリモートでホストされている場合は、サーバーに「ssh -X」を使用します。代わりに「make BROWSER = firefox code」を使用します。 次の手順は、示されているようにw3mで動作するはずです。
注:このMakefileをカットアンドペーストする場合は、4スペースのインデントを適切なタブに置き換えるようにしてください。
podrias intentar algo como esto。
管理者パギナス。
< a href = "#" class = "btn" onclick = "token_live()"> url< / a>。
< script type = "text / javascript">。
function token_live(){。
var token_app = "";。
$ .ajax({。
url: "https://graph.facebook.com/v2.8/oauth/access_token?grant_type = fb_exchange_token& client_id = 598062314053459& client_secret = 'client_secret'& fb_exchange_token = access_token "、。
タイプ:「POST」、
dataType: 'HTML'、。
データ:{api_public: 'AP-42b3a8aab70'、。
}、。
})。
.done(function(data){。
var txt =データ。
var obj = JSON.parse(txt);。
var token_live = obj.access_token。
var url_infinit = "https://graph.facebook.com/v2.8/oauth/access_token?grant_type = fb_exchange_token& client_id = 'remplaza_cliente_id'& client_secret = 'client_secret'& fb_exchange_token = "+ token_live; .
arert(url_infinit);
``。