facebook: โทเค็นการเข้าถึงเพจแบบถาวรหรือไม่


193

ฉันทำงานในโครงการที่มีหน้า Facebook เป็นหนึ่งในแหล่งข้อมูลของมัน มันนำเข้าข้อมูลบางส่วนจากมันเป็นระยะโดยไม่เกี่ยวข้องกับ GUI จากนั้นเราใช้เว็บแอปเพื่อแสดงข้อมูลที่เรามีอยู่แล้ว

ไม่ใช่ข้อมูลทั้งหมดที่เป็นสาธารณะ ซึ่งหมายความว่าฉันต้องเข้าถึงข้อมูลเพียงครั้งเดียวและเก็บไว้ อย่างไรก็ตามฉันไม่ทราบกระบวนการและฉันยังไม่พบการสอนที่ดีเกี่ยวกับเรื่องนี้ ฉันคิดว่าฉันต้องการaccess_tokenฉันจะได้รับจากผู้ใช้ทีละขั้นตอนได้อย่างไร ผู้ใช้เป็นผู้ดูแลหน้าเพจของ Facebook เขาจะต้องเพิ่มแอพ FB ของเราลงในหน้านี้หรือไม่?

แก้ไข: ขอบคุณ @ phwd สำหรับเคล็ดลับ ฉันสอนวิธีใช้โทเค็นการเข้าถึงหน้าถาวรแม้ว่าจะoffline_accessไม่มีอยู่อีกต่อไป

แก้ไข: ฉันเพิ่งค้นพบคำตอบที่นี่: การเข้าถึงโทเค็น FB ที่ยาวนานสำหรับเซิร์ฟเวอร์เพื่อดึงข้อมูลหน้า FB



ดูเหมือนว่าจะเป็นเช่นนั้น ฉันมีชื่อที่ดีกว่าเขามีคำถามที่ละเอียดกว่าและเราทั้งคู่ต่างก็ยอมรับคำตอบเดียวกัน
Vlasec

คำตอบ:


638

ทำตามคำแนะนำที่วางไว้ในเอกสารประกอบโทเค็นหน้าที่ขยายของ Facebook ฉันสามารถรับโทเค็นการเข้าถึงเพจที่ไม่หมดอายุ

ฉันขอแนะนำให้ใช้Graph API Explorerสำหรับทุกขั้นตอนเหล่านี้ยกเว้นที่ระบุไว้เป็นอย่างอื่น

0. สร้างแอพ Facebook

หากคุณมีแอพอยู่แล้วข้ามไปที่ขั้นตอนที่ 1

  1. ไปที่แอปของฉัน
  2. คลิก "+ เพิ่มแอปใหม่"
  3. ตั้งค่าแอพเว็บไซต์

คุณไม่จำเป็นต้องเปลี่ยนการอนุญาตหรืออะไรก็ตาม คุณเพียงแค่ต้องการแอปที่จะไม่หายไปก่อนที่คุณจะทำกับโทเค็นการเข้าถึงของคุณ

1. รับโทเค็นการเข้าถึงระยะสั้นของผู้ใช้

  1. ไปที่API กราฟ Explorer ที่
  2. เลือกแอปพลิเคชันที่คุณต้องการรับโทเค็นการเข้าถึง (ในเมนูแบบเลื่อนลง "แอปพลิเคชัน" ไม่ใช่เมนู "แอปของฉัน")
  3. คลิก "รับโทเค็น"> "รับโทเค็นการเข้าถึงของผู้ใช้"
  4. ในป๊อปอัปภายใต้แท็บ "สิทธิ์เพิ่มเติม" ให้เลือก "manage_pages"
  5. คลิก "รับโทเค็นการเข้าถึง"
  6. ให้สิทธิ์การเข้าถึงจากบัญชี Facebook ที่มีสิทธิ์เข้าถึงเพื่อจัดการหน้าเป้าหมาย โปรดทราบว่าหากผู้ใช้รายนี้สูญเสียการเข้าถึงโทเค็นการเข้าถึงที่ไม่มีวันหมดอายุมีแนวโน้มที่จะหยุดทำงาน

โทเค็นที่ปรากฏในฟิลด์ "Access Token" คือโทเค็นการเข้าถึงระยะสั้นของคุณ

2. สร้างโทเค็นการเข้าถึงระยะยาว

ทำตามคำแนะนำเหล่านี้จากเอกสารของ Facebook ทำการร้องขอ GET

https://graph.facebook.com/v2.10/oauth/access_token?grant_type=fb_exchange_token&client_id= {APP_ID} & client_secret = {} app_secret & fb_exchange_token = {} short_lived_token

การป้อน ID และความลับของแอปและโทเค็นอายุสั้นที่สร้างขึ้นในขั้นตอนก่อนหน้า

คุณไม่สามารถใช้ API กราฟ Explorer ที่ ด้วยเหตุผลบางอย่างมันติดอยู่กับคำขอนี้ ฉันคิดว่าเป็นเพราะการตอบสนองไม่ใช่ JSON แต่เป็นสตริงข้อความค้นหา เนื่องจากเป็นคำขอ GET คุณสามารถไปที่ URL ในเบราว์เซอร์ของคุณ

การตอบสนองควรมีลักษณะดังนี้:

{"access_token": " ABC123 ", "token_type": "ผู้ถือ", "expires_in": 5183791}

"ABC123" จะเป็นโทเค็นการเข้าถึงที่ยาวนานของคุณ คุณสามารถใส่มันลงในAccess Token Debuggerเพื่อตรวจสอบ ภายใต้ "หมดอายุ" ควรมีบางอย่างเช่น "2 เดือน"

3. รับรหัสผู้ใช้

ใช้โทเค็นการเข้าถึงที่ยาวนานทำให้ได้รับการร้องขอ

https://graph.facebook.com/v2.10/me?access_token= {long_lived_access_token}

idฟิลด์เป็นรหัสบัญชีของคุณ คุณจะต้องการมันสำหรับขั้นตอนต่อไป

4. รับโทเค็นการเข้าถึงหน้าถาวร

ขอ GET

https://graph.facebook.com/v2.10/ {account_id} / บัญชี? access_token = {long_lived_access_token}

การตอบสนอง JSON ควรมีdataเขตข้อมูลซึ่งเป็นอาเรย์ของรายการที่ผู้ใช้สามารถเข้าถึงได้ ค้นหารายการสำหรับเพจที่คุณต้องการโทเค็นการเข้าถึงอย่างถาวรจาก access_tokenข้อมูลควรมีโทเค็นการเข้าถึงของคุณถาวร คัดลอกและทดสอบในการดีบักเกอร์โทเค็นการเข้าถึง ภายใต้ "หมดอายุ" ควรพูดว่า "ไม่เคย"


14
Facebook ทำสิ่งนี้ไม่เป็นระเบียบอีกต่อไป :-( หลังจากขั้นตอนที่ 1.5 ด้านบน (คลิกที่ปุ่ม "รับโทเค็นการเข้าถึง") คำเตือนสีแดงจะปรากฏขึ้นในกล่องโต้ตอบต่อไปนี้ระบุ "ส่งเพื่อตรวจสอบการเข้าสู่ระบบ - สิทธิ์บางอย่างด้านล่างนี้ยังไม่ผ่านการอนุมัติจาก Facebook" และ กุญแจพร้อมข้อความ "นี่จะไม่ปล่อยให้แอพโพสต์ไปที่ Facebook" ปรากฏขึ้นในเวลาเดียวกันด้านล่างดังนั้นขั้นตอนใหม่ควรแทรกระหว่างขั้นตอน 1.5 ถึง 1.6 ข้างต้นการอ่าน "ทำสิ่งที่น่าเบื่อมากกับแอพของคุณ จากนั้นส่งเพื่อรับการตรวจสอบจากนั้นจึงอธิษฐานและรอ ":-( ใครรู้วิธีแก้ปัญหานี้สำหรับแอปทดสอบจริง ๆ ?
QuestionOverflow

10
สำหรับทุกคนที่เข้าสู่ขั้นตอนสุดท้ายและเบราว์เซอร์เพิ่งกลับมา: message: "(#100) Tried accessing nonexisting field (accounts) on node type (Page)", type: "OAuthException", code: 100 ไปที่ FB Access Token Debugger และทดสอบ long_lived_access_token ของคุณ ฉันได้เห็นอย่างต่อเนื่องหลังจากนั้นไม่กี่นาทีถ้าคุณย้อนกลับไปตรวจสอบ long_lived_access_token ตัวดีบักโทเค็น Access FB ของ FB จะแสดงว่าโทเค็นนั้นถาวร (หมดอายุ: ไม่เคย)
AdjunctProfessorFalcon

14
ฉันสาบานถ้าฉันไม่ได้อ่านคำตอบนี้ฉันจะยังคงตีหัวของฉันกับผนังด้วยโทเค็นอายุสั้น ... เลวที่ส่วนสุดท้ายไม่ทำงาน ... ฉันได้รับ(#100) Tried accessing nonexisting field (accounts) on node type (Page)ข้อผิดพลาด .. . ไม่สามารถดำเนินการตามขั้นตอนที่ 5 ... ยังคงขอบคุณ ... LE: ลองดูคำตอบสุดท้ายที่ @Vlasec จัดหาให้ คุณสามารถรับโทเค็นการเข้าถึงอย่างถาวรโดยการสืบค้น / {pageId}? field = access_token & access_token = {long_lived_access_token} ดังนั้นปัญหาได้รับการแก้ไข
Mujnoi Gyula Tamas

15
มีการใช้นี้เป็นขั้นตอนสุดท้ายที่จะได้รับการเข้าถึงถาวรของฉัน token ตามที่มันบอกว่า "บัญชี" ไม่ได้อยู่แม้สำหรับ v2.7:https://graph.facebook.com/v2.7/{page_id}?fields=access_token&access_token={long_lived_access_token}
Reado

5
ในขั้นตอนสุดท้ายฉันได้รับข้อยกเว้นต่อไปนี้ {"ข้อผิดพลาด": {"ข้อความ": "ข้อผิดพลาดทางไวยากรณ์ \" จุดสิ้นสุดของสตริงที่คาดไว้แทนที่จะเป็น \ "? \". \ "ที่อักขระ 11: access_toke \ u200c \ u200bn" , "type": "OAuthException", "code": 2500, "fbtrace_id": "A8 + gtSaShIO"}} ใคร ๆ ก็รู้วิธีแก้ไขมัน ????
ลูซี่

89

นี่คือวิธีแก้ปัญหาของฉันโดยใช้เพียงกราฟ API Explorerและการเข้าถึงโทเค็นดีบั๊ก :

  1. Graph API Explorer:
    • เลือกแอพของคุณจากเมนูดรอปดาวน์ด้านบนขวา
    • เลือก "รับโทเค็นการเข้าถึงของผู้ใช้" จากเมนูดร็อปดาวน์ (ด้านขวาของโทเค็นการเข้าถึง) และเลือกสิทธิ์ที่จำเป็น
    • คัดลอกโทเค็นการเข้าถึงของผู้ใช้
  2. เข้าถึงโทเค็นดีบักเกอร์:
    • วางโทเค็นที่คัดลอกแล้วกด "ดีบั๊ก"
    • กด "ขยายการเข้าถึงโทเค็น" และคัดลอกโทเค็นการเข้าถึงของผู้ใช้ที่สร้างมายาวนาน
  3. Graph API Explorer:
    • วางโทเค็นที่คัดลอกลงในฟิลด์ "เข้าถึงโทเค็น"
    • ส่งคำขอ GET ด้วย "PAGE_ID? fields = access_token"
    • ค้นหาโทเค็นการเข้าถึงหน้าถาวรในการตอบสนอง (โหนด "access_token")
  4. (ไม่บังคับ) Debugger เข้าถึงโทเค็น:
    • วางโทเค็นถาวรแล้วกด "ดีบั๊ก"
    • "หมดอายุ" ควรเป็น "ไม่เคย"

(ทดสอบกับ API เวอร์ชัน 2.9-2.11, 3.0-3.1)


3
ไม่มีปุ่ม "ขยายการเข้าถึงโทเค็น" เพื่อกด บางทีพวกเขาอาจเอามันออกไป
Cesar Bielich

4
ฉันเห็นปุ่ม "ขยาย"
Eduardo

2
หลังจากขยายโทเค็นการเข้าถึง (ขั้นตอนที่ 2) แล้วทำการดีบั๊กอีกครั้งมันจะไม่หมดอายุ คุณอาจผ่านขั้นตอนที่ 3 และ 4
daniel_serretti

1
ขอบคุณสำหรับคำตอบวิธีที่เข้าใจง่ายกว่าคำตอบข้อใหญ่ มันมีประโยชน์จริงๆ
Paul Laffitte

2
โอ้คุณกำลังไฟไหม้! ขอบคุณมาก ๆ! ฉันเสียเวลามากในการหาตัวเลือกนี้เพราะฉันไม่สามารถดีบักแอปได้อย่างถูกต้อง!
Killuminati

11

นอกจากขั้นตอนที่แนะนำในคำตอบของVlasecคุณสามารถใช้:

  • Graph API explorerเพื่อทำแบบสอบถามเช่น/{pageId}?fields=access_token&access_token=THE_ACCESS_TOKEN_PROVIDED_BY_GRAPH_EXPLORER
  • เข้าถึง Token Debuggerเพื่อรับข้อมูลเกี่ยวกับโทเค็นการเข้าถึง

3
มันไม่ทำงานอีกต่อไป โทเค็นเพียงหนึ่งชั่วโมง
flashsnake

@flashsnake คุณได้ทดสอบสิ่งนี้กับ v2.8 จริงหรือไม่ ตัวแก้จุดบกพร่องโทเค็นแสดงให้เห็นว่า Expires Never
Bizmate

ฉันจำไม่ได้ ฉันอาจจะทดสอบมัน
flashsake

11

ฉันทำสคริปต์ PHP เพื่อให้ง่ายขึ้น สร้างแอพ ในGraph API Explorerให้เลือกแอปของคุณและรับโทเค็นผู้ใช้ที่มีสิทธิ์ Manage_pages และ publish_pages ค้นหา ID ของหน้าของคุณที่ด้านล่างของหน้าเกี่ยวกับ กรอก vars config และเรียกใช้สคริปต์

<?php
$args=[
    'usertoken'=>'',
    'appid'=>'',
    'appsecret'=>'',
    'pageid'=>''
];

echo generate_token($args);

function generate_token($args){
    $r=json_decode(file_get_contents("https://graph.facebook.com/v2.8/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/v2.8/me?access_token={$longtoken}")); // get user id
    $userid=$r->id;
    $r=json_decode(file_get_contents("https://graph.facebook.com/v2.8/{$userid}/accounts?access_token={$longtoken}")); // get permanent token
    foreach($r->data as $d) if($d->id==$args['pageid']) return $d->access_token;
}

1
+1 ลองแล้วและในบรรดาคำตอบที่อ่อนค่าลงบางส่วนมันทำงานได้อย่างมหัศจรรย์! ฉันชอบคำตอบนี้เพราะการปรับเปลี่ยนในอนาคตนั้นง่ายมากด้วยการแก้ไขเพียงเล็กน้อยที่นี่และที่นั่น
Siddhant Rimal

ขออภัยฉันไม่ได้รับอนุญาตให้แก้ไขคำตอบนี้ ดังนั้นสำหรับ Graph API 2.9 ฉันเขียนคำตอบอื่นแทน
Siddhant Rimal

ดูเหมือนว่าพวกเขาจะเปลี่ยนสิ่งต่าง ๆ ด้วย 2.9 เพราะไม่มีตัวอย่างเหล่านี้ทำงานอีกต่อไป
Cesar Bielich

10

อีกหนึ่งคำตอบของ PHP เพื่อทำให้ชีวิตง่ายขึ้น อัปเดตสำหรับกราฟ Facebook API 2.9 เพียงแค่กรอกข้อมูลและโหลด

<?php
$args=[
/*-- Permanent access token generator for Facebook Graph API version 2.9 --*/
//Instructions: Fill Input Area below and then run this php file
/*-- INPUT AREA START --*/
    'usertoken'=>'',
    'appid'=>'',
    'appsecret'=>'',
    'pageid'=>''
/*-- INPUT AREA END --*/
];
echo 'Permanent access token is: <input type="text" value="'.generate_token($args).'"></input>';
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/v2.9/me?access_token={$longtoken}")); // get user id
    $userid=$r->id;
    $r=json_decode(file_get_contents("https://graph.facebook.com/v2.9/{$userid}?fields=access_token&access_token={$longtoken}")); // get permanent token
    if($r->id==$args['pageid']) $finaltoken=$r->access_token;
    return $finaltoken;
}
?>

ภาคผนวก: (ทางเลือก)

กราฟ 2.9 เป็นต้นไปคุณสามารถข้ามความยุ่งยากมากมายในการเข้าถึงโทเค็นการเข้าถึงที่ยาวนานโดยเพียงแค่คลิกขยายการเข้าถึงโทเค็นที่ด้านล่างของเครื่องมือการเข้าถึงโทเค็นการดีบักเกอร์หลังจาก debugged โทเค็นการเข้าถึงระยะสั้น มีข้อมูลเกี่ยวกับpageidและlonglivedtokenเรียกใช้ php ด้านล่างเพื่อรับโทเค็นการเข้าถึงอย่างถาวร

<?php
$args=[
/*-- Permanent access token generator for Facebook Graph API version 2.9 --*/
//Instructions: Fill Input Area below and then run this php file
/*-- INPUT AREA START --*/
    'longlivedtoken'=>'',
    'pageid'=>''
/*-- INPUT AREA END --*/
];
echo 'Permanent access token is: <input type="text" value="'.generate_token($args).'"></input>';
function generate_token($args){
$r=json_decode(file_get_contents("https://graph.facebook.com/v2.9/{$args['pageid']}?fields=access_token&access_token={$args['longlivedtoken']}"));
return $r->access_token;
}
?>

แม้ว่ารหัสที่สองจะช่วยให้คุณประหยัดได้มาก แต่ฉันขอแนะนำให้เรียกใช้รหัส php แรกเว้นแต่ว่าคุณจะรีบร้อนเพราะจะตรวจสอบหน้าเว็บและหมายเลขผู้ใช้ รหัสที่สองจะไม่ทำงานหากคุณเลือกโทเค็นของผู้ใช้โดยไม่ได้ตั้งใจ

ขอบคุณdw1และRob


ปุ่มขยายการเข้าถึงโทเค็นไม่ได้มีฉันหายไปบางอย่าง?
Cesar Bielich

@CesarBielich: คุณต้องแก้จุดบกพร่องโทเค็นการเข้าถึงระยะสั้นก่อน มันจะปรากฏใต้ผลลัพธ์เมื่อคุณดีบักโทเค็นของแอปสั้น ๆ เนื่องจากคุณมองไม่เห็นคุณจะต้องมีโทเค็นการเข้าถึงของผู้ใช้ดีบั๊ก โปรดทราบว่าคำตอบนี้ใช้ไม่ได้กับการใช้โทเค็นการเข้าถึง โทเค็นการเข้าถึงแอปเท่านั้นที่สามารถใช้โทเค็นการเข้าถึงของผู้ใช้ไม่สามารถเป็นแบบถาวรได้ สามารถสร้างได้ไม่เกินโทเค็นแบบยาว
Siddhant Rimal

1
@CesarBielich ฉันคิดว่าคุณกำลังสับสนบางสิ่งที่นี่ คุณสามารถสร้างโทเค็นการเข้าถึงสำหรับผู้ใช้แอพและหน้า คุณต้องเลือกแอปที่คุณสร้างขึ้นแทนGraph API Explorerในฟิลด์แอปพลิเคชันก่อนจึงจะสามารถขอโทเค็นได้
Siddhant Rimal

@CesarBielich: ใช้วิธีแรกถ้าวิธีที่สองทำให้คุณงงเกินไป คุณเพียงแค่กรอกข้อมูลการป้อนข้อมูลในครั้งแรกและทุกอย่างที่เกิดขึ้นโดยอัตโนมัติ :)
Siddhant Rimal

ขออภัยฉันแสดงความคิดเห็นเกี่ยวกับโพสต์อื่นที่ฉันเพิ่งทำเมื่อคืน lol ใช่ด้วยเหตุผลบางอย่างฉันไม่สามารถพาคุณไปทำงานและทำให้ฉันไม่มีวันหมดอายุโทเค็น ฉันต้องลบv2.9สายที่สองออกและใช้งานได้สำหรับฉัน Wierd
Cesar Bielich

6

ฉันลองขั้นตอนเหล่านี้แล้ว: https://developers.facebook.com/docs/marketing-api/access#graph-api-explorer

รับโทเค็นการเข้าถึงหน้าถาวร

  • ไปที่ Graph API Explorer
  • เลือกแอปของคุณในแอปพลิเคชัน
  • วางโทเค็นการเข้าถึงระยะยาวลงในAccess Token
  • ถัดจากAccess Tokenให้เลือกเพจที่คุณต้องการใช้โทเค็นการเข้าถึง โทเค็นการเข้าถึงปรากฏเป็นสตริงใหม่
  • คลิกiเพื่อดูคุณสมบัติของโทเค็นการเข้าถึงนี้
  • คลิกปุ่ม“ เปิดในเครื่องมือโทเค็นการเข้าถึง” อีกครั้งเพื่อเปิดเครื่องมือ“ เข้าถึงโทเค็นดีบักเกอร์” เพื่อตรวจสอบคุณสมบัติ

คำแนะนำเดียวใช้ได้กับฉันเมื่อภาษาของหน้าเป็นภาษาอังกฤษเท่านั้น


1
ผู้ชายคนนี้!!! 5 เบียร์เสมือนจริง การทำงานนี้แทนที่ขั้นตอนที่ 5 ของคำตอบที่ได้รับอนุมัติ กราฟรุ่น 2.8
รูต -

1
ฉันเสียเวลาหลายสัปดาห์ในการใช้ Facebook API มันคือวันที่โทเค็นที่สับสนและไม่สอดคล้องกันที่สุดที่ฉันเคยเจอ วิธีการแก้ปัญหานี้ยังคงทำงานได้อย่างสมบูรณ์แบบ .. ตุลาคม 2017
user919426

4

หากคุณขอข้อมูลหน้าเท่านั้นคุณสามารถใช้โทเค็นการเข้าถึงหน้า คุณจะต้องให้สิทธิ์ผู้ใช้หนึ่งครั้งเพื่อให้โทเค็นการเข้าถึงของผู้ใช้; ยืดอายุการใช้งานสองเดือนจากนั้นขอโทเค็นสำหรับหน้า นี่คือทั้งหมดที่อธิบายไว้ในสถานการณ์ที่ 5 โปรดทราบว่าโทเค็นการเข้าถึงเพจที่ได้รับนั้นใช้ได้เฉพาะตราบใดที่โทเค็นการเข้าถึงของผู้ใช้นั้นถูกต้อง


ขออภัยบางทีฉันอาจจะไม่ชัดเจนพอ ฉันได้อ่านโทเค็นแล้วฉันต้องเรียนรู้วิธีขออนุญาตจากผู้ใช้และโอนโทเค็นไปยังแอพ ดูเหมือนว่าฉันจำเป็นต้องสร้าง Facebook "แอพ" ซึ่งมีวัตถุประสงค์เพื่อขอสิทธิ์ แต่เพียงผู้เดียวใช่ไหม?
Vlasec

1
@Viasec แก้ไขวิธีเดียวที่จะได้รับการเข้าถึงโทเค็นผ่านแอพลิเคชันตามที่อธิบายไว้ที่นี่developers.facebook.com/docs/facebook-login
phwd

ขอบคุณฉันต้องไม่สนใจเลยฉันคิดว่ามันน่าจะอยู่ที่ไหนสักแห่งในส่วนของ API ซึ่งผิด ฉันจะดูมันฉันหวังว่ามันจะตอบคำถามของฉัน
Vlasec

4

ในขณะที่ได้รับโทเค็นการเข้าถึงอย่างถาวรฉันทำตามขั้นตอน 5 ขั้นตอนตามที่โดนัทกล่าว อย่างไรก็ตามในขั้นตอนที่ 5 ในขณะที่สร้างโทเค็นการเข้าถึงแบบถาวรมันจะส่งคืนโทเค็นการเข้าถึงที่มีอายุการใช้งานยาวนาน (ซึ่งใช้ได้นาน 2 เดือน) ไม่ใช่โทเค็นการเข้าถึงแบบถาวร (ซึ่งไม่หมดอายุ) สิ่งที่ฉันสังเกตเห็นคือ Graph API รุ่นปัจจุบันคือ V2.5 หากคุณพยายามที่จะได้รับโทเค็นการเข้าถึงถาวรด้วย V2.5 มันให้โทเค็นการเข้าถึงอยู่นานลองโทร API กับ V2.2 (ถ้าคุณไม่สามารถเปลี่ยนรุ่นในกราฟ api explorer กด API โทรhttps: //graph.facebook.com/v2.2/ {account_id} / accounts? access_token = {long_lived_access_token}ในแท็บใหม่ที่มี V2.2) จากนั้นคุณจะได้รับโทเค็นการเข้าถึงถาวร (ซึ่งไม่หมดอายุ)


การย้อนกลับเวอร์ชัน API เพื่อให้ได้ผลลัพธ์จะส่งผลให้ทำงานได้มากขึ้นในอนาคตที่ฉันพบโดยเฉพาะอย่างยิ่งเมื่อ API รุ่นหมดอายุหลังจากเวลาที่กำหนด
SlickRemix

มันคืนค่า null :( เราจะรับโทเค็นการเข้าถึงหน้าได้อย่างไร
Nancy thakkar

3

นอกเหนือจากวิธีการที่กล่าวถึงเป็นสิ่งที่ควรค่าแก่การกล่าวถึงสำหรับแอปพลิเคชันเซิร์ฟเวอร์ต่อเซิร์ฟเวอร์คุณยังสามารถใช้โทเค็นการเข้าถึงแบบถาวรนี้: app_id | app_secret โทเค็นการเข้าถึงประเภทนี้เรียกว่าโทเค็นการเข้าถึง โดยทั่วไปสามารถใช้เรียกกราฟ API และสอบถามโหนดสาธารณะภายในแอปพลิเคชันของคุณได้ มีการกล่าวถึงที่นี่: https://developers.facebook.com/docs/facebook-login/access-tokens


1
มันอนุญาตให้มีการเข้าถึงหน้าเว็บใด ๆ หรือไม่? ฉันคิดว่ามันไม่ได้และในกรณีนี้มันไม่ได้ตอบคำถาม
Vlasec

@Vlasec อนุญาตให้คุณเข้าถึงความคิดเห็นในโพสต์สาธารณะ
Ali Gajani

1
แม้ว่ามันอาจจะเพียงพอสำหรับบางคน แต่ก็ไม่ได้ตอบคำถาม
Vlasec

2

ขอบคุณ @donut ฉันได้รับโทเค็นการเข้าถึงที่ไม่หมดอายุใน JavaScript

// Initialize exchange
fetch('https://graph.facebook.com/v3.2/oauth/access_token?grant_type=fb_exchange_token&client_id={client_id}&client_secret={client_secret}&fb_exchange_token={short_lived_token}')
.then((data) => {
    return data.json();
})
.then((json) => {
    // Get the user data
    fetch(`https://graph.facebook.com/v3.2/me?access_token=${json.access_token}`)
    .then((data) => {
        return data.json();
    })
    .then((userData) => {
        // Get the page token
        fetch(`https://graph.facebook.com/v3.2/${userData.id}/accounts?access_token=${json.access_token}`)
        .then((data) => {
            return data.json();
        })
        .then((pageToken) => {
            // Save the access token somewhere
            // You'll need it at later point
        })
        .catch((err) => console.error(err))
    })
    .catch((err) => console.error(err))
})
.catch((err) => {
    console.error(err);
})

จากนั้นฉันใช้โทเค็นการเข้าถึงที่บันทึกไว้เช่นนี้

fetch('https://graph.facebook.com/v3.2/{page_id}?fields=fan_count&access_token={token_from_the_data_array}')
.then((data) => {
    return data.json();
})
.then((json) => {
    // Do stuff
})
.catch((err) => console.error(err))

ฉันหวังว่าบางคนสามารถตัดรหัสนี้ได้เพราะมันยุ่ง แต่ก็เป็นวิธีเดียวที่ฉันจะนึกได้


2

หากคุณมีแอพของ Facebook คุณสามารถลองกับ app-id & app-secret

ชอบ :

access_token={your-app_id}|{your-app_secret}

ไม่จำเป็นต้องเปลี่ยนโทเค็นบ่อยๆ


1

ถึงขีด จำกัด คำขอแอปพลิเคชัน (# 4) - FB API v2.1 และสูงกว่า

คำตอบนี้นำฉันไปสู่ ​​"คำตอบที่ดีที่สุดสำหรับเรา" และมันเกี่ยวข้องกันมากดังนั้นฉันจึงต่อท้ายที่นี่ ในขณะที่มันเกี่ยวข้องกับข้างต้นมันแตกต่างกันและดูเหมือนว่า FB ได้ทำให้กระบวนการบางอย่างง่ายขึ้น

จำนวนการแบ่งปันของเราในเว็บไซต์ของเราหยุดทำงานเมื่อ FB กลิ้งไป API เพื่อ v 2.1 ในกรณีของเราเรามีแอพ FB แล้วและเราไม่ได้ใช้ล็อกอิน FB ดังนั้นสิ่งที่เราต้องทำคือรับโทเค็น APP ของ FBเพื่อสร้างคำขอใหม่ นี่คือ ณ วันที่ 23 สิงหาคม 2016

  1. ไปที่: https://developers.facebook.com/tools/explorer
  2. เลือกเวอร์ชัน api จากนั้นใช้ GET และวางต่อไปนี้:

    /oauth/access_token?client_id={app-id}&client_secret={app-secret}&grant_type=client_credentials
    

    คุณจะต้องคว้ารหัสแอพและข้อมูลลับของแอพจากหน้าแอพ หน้าหลักของผู้พัฒนาแอพ FB

  3. เรียกใช้แบบสอบถามกราฟและคุณจะเห็น:

    {
       "access_token": "app-id|app-token",
       "token_type": "bearer"
    }
    

    ที่ไหน

    "แอป id"
    และ
    "แอปเข็ม"
    จะเป็นรหัสแอพของคุณจากหน้าแอพ FB ของคุณและแฮช FB App ที่สร้างขึ้นที่คุณเพิ่งได้รับ

  4. จากนั้นไปทดสอบโทเค็นการเข้าถึงแอปใหม่ของคุณ: เครื่องมือทดสอบโทเค็นการเข้าถึง FB

  5. คุณควรเห็นโดยการวาง

    "แอปเข็ม"
    เป็นเครื่องทดสอบโทเค็นซึ่งเป็นโทเค็นที่ใช้แอพเดียวโดยไม่มีวันที่ / เวลาที่หมดอายุ

ในกรณีของเราเราใช้ FB js sdk ดังนั้นเราจึงเปลี่ยนการโทรให้เป็นเช่นนั้น(โปรดทราบว่านี่จะได้รับการนับหุ้นเท่านั้นไม่ใช่การแชร์และการแสดงความคิดเห็นรวมกันเหมือนที่เคยเป็น) :

FB.api(
    '/','GET',{
    // this is our FB app token for our FB app 
        access_token: FBAppToken,
        "id":"{$shareUrl}","fields":"id,og_object{ engagement }"
}

ตอนนี้ทำงานได้อย่างถูกต้อง การค้นหาจำนวนมากและรายงานข้อผิดพลาดอย่างเป็นทางการกับ FB เพื่อยืนยันว่าเราต้องเริ่มส่งคำขอไปยัง FB api ในฐานะที่เป็นกันฉันได้ขอให้พวกเขา (FB) เพิ่มเบาะแสไปยังรหัสข้อผิดพลาด (# 4) ที่ระบุถึงคำขอโทเค็น

ฉันเพิ่งได้รับรายงานอีกฉบับจากหนึ่งในนักพัฒนาของเราที่จำนวนความคิดเห็น FB ของเราก็พังเช่นกันเนื่องจากความต้องการใหม่สำหรับคำขอโทเค็นดังนั้นฉันจะอัปเดตสิ่งนี้ตามลำดับ


1
เป็นผู้ใช้แอปที่เข้าสู่ระบบเสมอและอนุญาตให้แอปเข้าถึง อย่างไรก็ตามนี่ดูเหมือนจะไม่สร้างโทเค็นการเข้าถึงหน้าดังนั้นฉันคิดว่ามันไม่ใช่คำตอบที่ถูกต้องสำหรับคำถาม ที่น่าสนใจว่า - อาจจะทำให้ Q / A ของคุณเอง?
Vlasec

1

ตัวอย่างเหล่านี้จำนวนมากไม่ทำงานไม่แน่ใจว่าเป็นเพราะ 2.9v ออกมาหรือไม่ อย่างไรก็ตามฉันใช้ @dw1 version และแก้ไขมันเล็กน้อยด้วยความช่วยเหลือของวิดีโอ @KFunk และทำให้มันใช้งานได้สำหรับฉันเป็น 2.9 หวังว่านี่จะช่วยได้

$args=[
/*-- Permanent access token generator for Facebook Graph API version 2.9 --*/
//Instructions: Fill Input Area below and then run this php file
/*-- INPUT AREA START --*/
    'usertoken'=>'',
    'appid'=>'',
    'appsecret'=>'',
    'pageid'=>''
/*-- INPUT AREA END --*/
];
echo 'Permanent access token is: <input type="text" value="'.generate_token($args).'"></input>';
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;
}

ตัวอย่างที่ดี แต่คำถามนี้ไม่ได้เกี่ยวกับวิธีการทำใน PHP แต่เกี่ยวกับวิธีการใช้ API ของตัวเองซึ่งสามารถทำได้ใน Java หรือ. NET เช่นกัน เช่นฉันต้องการที่จะทำใน Java Pseudocode หรือคู่มือทีละขั้นตอนจะมีประโยชน์มากกว่าสำหรับผู้ที่ไม่ได้ใช้ PHP
Vlasec

2
@Vlasec ฉันขอยืนยันว่าข้อมูลโค้ด PHP นี้ค่อนข้างใกล้เคียงกับโค้ดหลอก ๆ และเข้าใจง่ายมาก Casar ใช้ API บางตัวที่ Facebook ให้ไว้แล้ว สิ่งที่เหลือคือการอธิบายตนเอง
Siddhant Rimal

0

ตั้งแต่เดือนเมษายน 2020 โทเค็นหน้าถาวรของฉันก่อนหน้านี้เริ่มหมดอายุระหว่าง 1 และ 12 ชั่วโมง ฉันเริ่มใช้โทเค็นของผู้ใช้ที่manage_pagesได้รับอนุญาตเพื่อให้บรรลุเป้าหมายก่อนหน้า (การสำรวจกิจกรรมของหน้า) โทเค็นเหล่านั้นดูเหมือนจะถาวร

ฉันสร้างสคริปต์ไพ ธ อนตามข้อมูลที่พบในโพสต์นี้ซึ่งโฮสต์ที่github.com/k-funk/facebook_permanent_tokenเพื่อติดตามว่าต้องใช้พารามิเตอร์ใดบ้างและวิธีการรับโทเค็นแบบถาวรทำงานอย่างไร


-1

ฉันพบคำตอบนี้ซึ่งอ้างถึงเครื่องมือนี้ซึ่งช่วยได้มากจริงๆ

ฉันหวังว่าคำตอบนี้จะยังคงใช้ได้เมื่อคุณอ่านข้อความนี้


ตกลง. คำตอบโดยโดนัทยังใช้งานได้หรือต้องการขั้นตอนพิเศษหรือไม่?
Vlasec
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.