Saya telah berhasil untuk posting ke Facebook Page melalui API (C#), tapi ketika administrator halaman log out, kesalahan berikut terjadi:
"(OAuthException - #190) Kesalahan memvalidasi akses token: sesi ini tidak valid karena pengguna log out."
Bagaimana saya menghasilkan akses token yang tidak pernah berakhir?
Aku perlu solusi yang doesn't membuka Facebook Login dialog.
Anda dapat menghasilkan tidak pernah berakhir akses token tanpa coding, berikut ini petunjuk:
Ini adalah kode yang saya gunakan untuk menghasilkan "Tidak" berakhir akses token menggunakan PHP SDK:
$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;
Saya echo access token dan kemudian debug menggunakan akses token debugger. Hasilnya harus: Berakhir: tidak Pernah
.
Referensi dan Dokumentasi:
Anda dapat menggunakan api berikut dari facebook untuk me-refresh token hidup untuk 60 hari dan hanya ketika tanda akan berakhir, panggilan yang sama api lagi dengan-dalam 60 hari untuk menyegarkan kembali kehidupan untuk 60 hari dari titik waktu Token berakhir hadir dalam berakhir parameter dan nilainya dalam hitungan detik
Mengganti CLIENT_ID dan CLIENT_SECRET dengan nilai mereka yang sebenarnya
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>
di ACCESS_TOKEN, menempatkan sebenarnya token nilai tanpa menambahkan "access_token="
It's November 2018 dan ini bekerja untuk saya!
<?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>';
Pilih aplikasi yang dibuat di atas dan pilih "pengguna Dapatkan akses token di drop down"
Di akses pengguna token pop up anda dapat memilih beberapa izin untuk token. Untuk yang non kadaluwarsa halaman akses token yang anda butuhkan untuk memilih "mempublikasikan halaman" dan "mengelola halaman"
Pergi ke https://developers.facebook.com/tools/accesstoken/. Di sana anda akan menemukan berumur pendek user access token dan aplikasi access token dari semua aplikasi yang anda miliki
Tekan debug pilihan user access token dari aplikasi yang dibuat di atas. Ini akan membawa anda ke debug alat. Di mana anda dapat menemukan semua informasi singkat pengguna akses token.
Di bagian bawah ada pilihan untuk menghasilkan lama tinggal(60 hari) pengguna akses token untuk pendek ini tinggal pengguna akses token. Menghasilkan lama tinggal pengguna akses token dengan memilih "Memperluas Akses Token"
a. Pergi ke Graph Explorer - https://developers.facebook.com/tools/explorer/.
b. Paste yang lama tinggal pengguna akses token yang dihasilkan pada langkah sebelumnya dalam "Akses token" lapangan.
c. Akses "/saya?bidang=access_token" api . Ini akan menghasilkan halaman akses token dan halaman yang berhubungan dengan mereka. Halaman ini akses token tidak akan pernah berakhir(sampai pengguna mengubah password/user mencabut aplikasi)
a. Pergi ke https://developers.facebook.com/tools/debug/accesstoken/
b. Tambahkan halaman akses token yang diambil dari atas masuk ke "Access token" lapangan dan debug
Anda akan mendapatkan berakhir seperti yang Pernah
Ditemukan di sini dengan sedikit perubahan: https://medium.com/@Jenananthan/how-to-create-non-expiry-facebook-page-token-6505c642d0b1
Jawaban yang diterima tidak lagi benar. Ini bekerja sekarang.
Open graph Explorer: https://developers.facebook.com
Di sebelah kanan ditampilkan pengguna token > klik [Debug] tombol
Ini akan membawa anda untuk Akses Token Debugger
Anda perlu untuk mendapatkan user access token FB.login() dengan manage_pages, pages_show_list dan lain-lain dalam lingkup perizinan. Kemudian, jalankan FB.api("/{user-aplikasi-id}/akun", bidang: ...) untuk mendapatkan sebuah daftar dari halaman-halaman mereka masing-masing info, termasuk access_token. Di sini, anda mendapatkan dalam waktu singkat-token, tapi dengan token ini anda dapat memperpanjang waktu kedaluwarsa untuk "Tidak".
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'});
Dengan akses token dan dari sisi server, anda dapat membuat panggilan ke API Grafik, menggunakan App ID dan App Secret dari App yang anda gunakan untuk mendapatkan izin untuk mengelola halaman.
GET /oauth/access_token?
grant_type=fb_exchange_token&
client_id={app-id}&
client_secret={app-secret}&
fb_exchange_token={short-lived-token}
Respon memberi anda akses token dengan waktu kedaluwarsa di "Tidak".
Referensi: API Grafik Rekening, Tanggal kedaluwarsa dan Memperluas Akses Token
Metode di bawah ini bekerja untuk saya, jika anda menggunakan 4.x
Facebook SDK:
//Kelas untuk Menghasilkan Lama Tinggal Token
<?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);
}
}
Anda dapat mengkonsumsi kelas atas seperti ini:
$longToken = new FacebookLongLivedTokenGenerator();
echo $longToken->generateFacebookLongLivedToken($appId, $appSecret, $oldUserAccessToken);
Menggunakan Facebook API v3.1 - Tidak ada jawaban di atas bekerja untuk saya. Sebaliknya, saya harus:
Membuat "pengguna sistem"
memberinya akses ke properti yang saya butuhkan (dalam kasus saya Aplikasi)
Menghasilkan token baru untuk aplikasi tersebut dan pengguna sistem
Petunjuk yang saya digunakan dapat ditemukan di sini
ini Makefile bekerja sebagai 2015-10-29. langkah-langkah 2 dan 3 hanya memberikan dua bulan token, tapi halaman akses token yang diberikan pada langkah terakhir menunjukkan di debugger sebagai "Berakhir: tidak Pernah". jawaban ini mengacu pada pekerjaan dari beberapa orang lain, dan disediakan dalam harapan bahwa itu akan menyederhanakan hal-hal untuk pengembang terlepas dari pilihan bahasa pemrograman.
sebelum menggunakan ini, anda harus menempatkan anda ada di halaman ID, app ID, app secret, dalam rangka itu, di ~/.netrc file sebagai berikut: mesin graph.facebook.com login 123456 akun 234567 password 345678
juga sebelum menggunakan ini, login ke Facebook dengan w3m, klik "biarkan saya Tetap masuk".
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)
ternyata dalam banyak kasus langkah pertama gagal dengan w3m. dalam kasus itu, instal browser lain seperti firefox; ssh -X
ke server anda jika script remote host, dan menggunakan membuat BROWSER=firefox kode
sebagai gantinya. berikut langkah-langkah yang harus bekerja dengan w3m seperti yang ditunjukkan.
catatan: jika memotong-dan-paste ini Makefile, pastikan untuk mengganti 4-ruang lekukan dengan tepat tab.
podrias intentar algo como esto
`` Administrar Paginas url
<script type="text/javascript"> fungsi 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", jenis: 'POST', dataType: 'HTML', data: {api_public: 'AP-42b3a8aab70', }, }) .dilakukan(function(data) {var txt = data var obj = JSON.mengurai(txt);
var token_live = obj.access_token
alert(url_infinit);
``