facebook: Mã thông báo truy cập trang vĩnh viễn?


193

Tôi làm việc trong một dự án có các trang facebook là một trong những nguồn dữ liệu của nó. Nó nhập một số dữ liệu từ nó theo định kỳ mà không có GUI liên quan. Sau đó, chúng tôi sử dụng một ứng dụng web để hiển thị dữ liệu chúng tôi đã có.

Không phải tất cả các thông tin là công khai. Điều này có nghĩa là tôi phải truy cập vào dữ liệu một lần và sau đó giữ nó. Tuy nhiên, tôi không biết quy trình và tôi chưa tìm thấy một hướng dẫn tốt về điều đó. Tôi đoán tôi cần một access_token, làm thế nào tôi có thể lấy nó từ người dùng, từng bước một? Người dùng là quản trị viên của một trang facebook, anh ta sẽ phải thêm một số ứng dụng FB của chúng tôi vào trang chứ?

EDIT: Cảm ơn @phwd cho tiền boa. Tôi đã thực hiện một hướng dẫn làm thế nào để có được mã thông báo truy cập trang vĩnh viễn, ngay cả khi offline_accesskhông còn tồn tại.

EDIT: Tôi mới phát hiện ra nó đã trả lời ở đây: Mã thông báo truy cập FB lâu dài cho máy chủ để lấy thông tin trang FB



Có vẻ như vậy. Tôi có tiêu đề tốt hơn, anh ấy có câu hỏi chi tiết hơn và cả hai chúng tôi đều có cùng một câu trả lời được chấp nhận.
Vlasec

Câu trả lời:


638

Theo các hướng dẫn được nêu trong tài liệu mã thông báo trang mở rộng của Facebook, tôi có thể nhận được mã thông báo truy cập trang không hết hạn.

Tôi đề nghị sử dụng Trình khám phá API API cho tất cả các bước này trừ khi có quy định khác.

0. Tạo ứng dụng Facebook

Nếu bạn đã có một ứng dụng , hãy bỏ qua bước 1.

  1. Truy cập Ứng dụng của tôi .
  2. Nhấp vào "+ Thêm ứng dụng mới".
  3. Thiết lập một ứng dụng trang web.

Bạn không cần phải thay đổi quyền của nó hoặc bất cứ điều gì. Bạn chỉ cần một ứng dụng sẽ không biến mất trước khi bạn hoàn thành mã thông báo truy cập của mình.

1. Nhận mã thông báo truy cập ngắn hạn của người dùng

  1. Chuyển đến Trình khám phá API đồ thị .
  2. Chọn ứng dụng bạn muốn nhận mã thông báo truy cập (trong menu thả xuống "Ứng dụng", không phải menu "Ứng dụng của tôi").
  3. Nhấp vào "Nhận mã thông báo"> "Nhận mã thông báo truy cập người dùng".
  4. Trong cửa sổ bật lên, trong tab "Quyền mở rộng", hãy chọn "Manage_pages".
  5. Nhấp vào "Nhận mã thông báo truy cập".
  6. Cấp quyền truy cập từ tài khoản Facebook có quyền truy cập để quản lý trang đích. Lưu ý rằng nếu người dùng này mất quyền truy cập cuối cùng, mã thông báo truy cập không bao giờ hết hạn sẽ có khả năng ngừng hoạt động.

Mã thông báo xuất hiện trong trường "Mã thông báo truy cập" là mã thông báo truy cập ngắn hạn của bạn.

2. Tạo mã thông báo truy cập dài hạn

Thực hiện theo các hướng dẫn này từ tài liệu Facebook, tạo yêu cầu NHẬN

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_living_token}

nhập ID và bí mật của ứng dụng của bạn và mã thông báo tồn tại ngắn được tạo ở bước trước.

Bạn không thể sử dụng Trình khám phá API API . Vì một số lý do, nó bị kẹt trong yêu cầu này. Tôi nghĩ đó là vì phản hồi không phải là JSON, mà là một chuỗi truy vấn. Vì đó là yêu cầu NHẬN, bạn chỉ cần truy cập URL trong trình duyệt của mình.

Câu trả lời sẽ giống như thế này:

{"access_token": " ABC123 ", "token_type": "người mang", "expires_in": 5183791}

"ABC123" sẽ là mã thông báo truy cập lâu dài của bạn. Bạn có thể đặt nó vào Trình gỡ lỗi mã thông báo truy cập để xác minh. Trong "Hết hạn", nó sẽ có nội dung như "2 tháng".

3. Nhận ID người dùng

Sử dụng mã thông báo truy cập lâu dài, tạo yêu cầu GET để

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

Các idlĩnh vực là ID tài khoản của bạn. Bạn sẽ cần nó cho bước tiếp theo.

4. Nhận mã thông báo truy cập trang vĩnh viễn

Thực hiện một yêu cầu NHẬN

https://graph.facebook.com/v2.10/ {account_id} / tài khoản? access_token = {long_living_access_token}

Phản hồi JSON phải có một datatrường trong đó là một mảng các mục mà người dùng có quyền truy cập. Tìm mục cho trang bạn muốn mã thông báo truy cập vĩnh viễn từ đó. Các access_tokenlĩnh vực cần có quyền truy cập vĩnh viễn của bạn Token. Sao chép nó và kiểm tra nó trong Trình gỡ lỗi mã thông báo truy cập . Trong phần "Hết hạn", nó sẽ hiện "Không bao giờ".


14
Facebook đã làm hỏng điều này để nó không hoạt động nữa. :-( Sau bước 1.5 ở trên (nhấp vào nút "Nhận mã thông báo truy cập"), một cảnh báo màu đỏ xuất hiện trong hộp thoại sau, cho biết "Gửi để xem lại đăng nhập - Một số quyền dưới đây chưa được Facebook chấp thuận để sử dụng" và cũng là một khóa với dòng chữ "Điều này không cho phép ứng dụng đăng lên Facebook" xuất hiện cùng lúc bên dưới. Vì vậy, một bước mới nên được chèn giữa bước 1.5 và 1.6 ở trên, đọc "Thực hiện nhiều thao tác tẻ nhạt với ứng dụng của bạn, sau đó gửi nó để xem xét, sau đó cầu nguyện và chờ đợi. ":-( Bất cứ ai cũng biết cách này cho một ứng dụng thử nghiệm thuần túy?
Câu hỏi

10
Đối với bất kỳ ai đã đến bước cuối cùng và trình duyệt chỉ cần quay lại: message: "(#100) Tried accessing nonexisting field (accounts) on node type (Page)", type: "OAuthException", code: 100 hãy truy cập Trình gỡ lỗi mã thông báo truy cập FB và kiểm tra long_living_access_token của bạn. Một cách nhất quán tôi đã thấy rằng sau một vài phút, nếu bạn quay lại và kiểm tra lại long_living_access_token Trình gỡ lỗi mã thông báo truy cập FB sau đó sẽ chỉ ra rằng mã thông báo đó là vĩnh viễn (hết hạn: không bao giờ)
AdjuncProfigatorFalcon

14
Tôi thề, nếu tôi không đọc câu trả lời này, tôi vẫn sẽ đập đầu vào tường bằng một mã thông báo ngắn ngủi ... Thật tệ là phần cuối cùng không hoạt động ... Tôi đang gặp (#100) Tried accessing nonexisting field (accounts) on node type (Page)lỗi .. . không thể tiếp tục với bước 5 ... Tuy nhiên, cảm ơn bạn ... LE: kiểm tra phần cuối của câu trả lời được cung cấp bởi @Vlasec. Bạn có thể nhận được mã thông báo truy cập vĩnh viễn bằng cách truy vấn / {pageId}? Field = access_token & access_token = {long_living_access_token} để vấn đề được khắc phục.
Mujnoi Gyula Tamas

15
Phải sử dụng bước này cho bước cuối cùng để nhận mã thông báo truy cập vĩnh viễn của tôi vì thông báo "tài khoản" không tồn tại, ngay cả đối với https://graph.facebook.com/v2.7/{page_id}?fields=access_token&access_token={long_lived_access_token}
phiên bản 2.7

5
Ở bước cuối cùng, tôi nhận được ngoại lệ sau {"error": {"message": "Lỗi cú pháp \" Kết thúc chuỗi dự kiến ​​thay vì \ "? \". \ "Tại ký tự 11: access_toke \ u200c \ u200bn" , "type": "OAuthException", "code": 2500, "fbtrace_id": "A8 + gtSaShIO"}} Bất cứ ai cũng biết cách giải quyết nó ????
Lucy

89

Đây là giải pháp của tôi khi chỉ sử dụng Trình gỡ lỗi API ExplorerTrình gỡ lỗi mã thông báo truy cập :

  1. Trình duyệt API đồ thị:
    • Chọn Ứng dụng của bạn từ menu thả xuống trên cùng bên phải
    • Chọn "Nhận mã thông báo truy cập người dùng" từ danh sách thả xuống (bên phải trường mã thông báo truy cập) và chọn các quyền cần thiết
    • Sao chép mã thông báo truy cập của người dùng
  2. Trình gỡ lỗi mã thông báo truy cập:
    • Dán mã thông báo đã sao chép và nhấn "Gỡ lỗi"
    • Nhấn "Mở rộng mã thông báo truy cập" và sao chép mã thông báo truy cập người dùng được tạo lâu dài
  3. Trình duyệt API đồ thị:
    • Dán mã thông báo đã sao chép vào trường "Mã thông báo truy cập"
    • Thực hiện một yêu cầu GET với "PAGE_ID? Field = access_token"
    • Tìm mã thông báo truy cập trang vĩnh viễn trong phản hồi (nút "access_token")
  4. (Tùy chọn) Trình gỡ lỗi mã thông báo truy cập:
    • Dán mã thông báo vĩnh viễn và nhấn "Gỡ lỗi"
    • "Hết hạn" phải là "Không bao giờ"

(Đã thử nghiệm với API Phiên bản 2.9-2.11, 3.0-3.1)


3
Không có nút "Mở rộng mã thông báo truy cập" để nhấn. Có lẽ họ đã lấy nó ra.
Cesar Bielich

4
Tôi thấy nút "Gia hạn"
Eduardo

2
Sau khi mở rộng mã thông báo truy cập (bước 2) và gỡ lỗi lại, nó sẽ không bao giờ hết hạn. Bạn chỉ có thể vượt qua bước 3 và 4.
daniel_serretti

1
Cảm ơn vì câu trả lời này dễ hiểu hơn câu trả lời lớn ở trên. Nó thực sự hữu ích.
Paul Laffitte

2
Oh, anh bạn, bạn đang cháy! Cảm ơn nhiều! Tôi đã lãng phí quá nhiều thời gian để tìm tùy chọn này, vì tôi không thể gỡ lỗi một ứng dụng đúng cách!
Killuminati

11

Ngoài các bước được đề xuất trong câu trả lời Vlasec , bạn có thể sử dụng:

  • Trình thám hiểm API đồ thị để thực hiện các truy vấn, ví dụ:/{pageId}?fields=access_token&access_token=THE_ACCESS_TOKEN_PROVIDED_BY_GRAPH_EXPLORER
  • Trình gỡ lỗi mã thông báo truy cập để nhận thông tin về mã thông báo truy cập.

3
Điều này không còn hoạt động nữa. Mã thông báo chỉ tồn tại trong một giờ
flashsnake

@flashsnake bạn đã thực sự thử nghiệm điều này trên v2.8 chưa? trình gỡ lỗi mã thông báo hiển thị hết hạn không bao giờ
Bizmate

Tôi không nhớ. Tôi có thể đã thử nó.
flashsnake

11

Tôi đã tạo một kịch bản PHP để làm cho nó dễ dàng hơn. Tạo một ứng dụng . Trong Trình khám phá API API, chọn Ứng dụng của bạn và nhận mã thông báo người dùng với quyền Manage_pages và quyền xuất bản. Tìm ID trang của bạn ở cuối trang Giới thiệu. Điền vào vars config và chạy script.

<?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 Chỉ cần thử và, trong số tất cả những câu trả lời mất giá một phần này, nó hoạt động rất tuyệt vời! Tôi thích câu trả lời này vì những sửa đổi trong tương lai rất dễ dàng với một chút chỉnh sửa ở đây và đó.
Siddhant Rimal

Xin lỗi, tôi không được phép chỉnh sửa câu trả lời này. Vì vậy, đối với API API 2.9, tôi đã viết một câu trả lời khác thay thế.
Ridd Siddhant

Có vẻ như họ đã thay đổi công cụ với 2.9 vì không có ví dụ nào trong số này hoạt động nữa
Cesar Bielich

10

Một câu trả lời PHP khác để làm cho cuộc sống dễ dàng hơn. Đã cập nhật cho API đồ thị Facebook 2.9 . Chỉ cần điền 'er lên và tải.

<?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;
}
?>

Phụ lục: (thay thế)

Biểu đồ 2.9 trở đi, bạn có thể bỏ qua nhiều rắc rối khi nhận được mã thông báo truy cập dài bằng cách nhấp vào Mở rộng mã thông báo truy cập ở cuối công cụ Trình gỡ lỗi mã thông báo truy cập, sau khi đã gỡ lỗi mã thông báo truy cập ngắn. Được trang bị thông tin về pageidlonglivedtoken, chạy php bên dưới để nhận mã thông báo truy cập vĩnh viễn.

<?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;
}
?>

Mặc dù mã thứ hai giúp bạn tiết kiệm rất nhiều rắc rối, tôi khuyên bạn nên chạy mã php đầu tiên trừ khi bạn đang rất vội vì nó kiểm tra chéo pageid và userid. Mã thứ hai sẽ không hoạt động nếu bạn chọn mã thông báo người dùng do nhầm lẫn.

Cảm ơn dw1Rob


Nút Mở rộng mã thông báo truy cập không có ở đó, tôi có thiếu thứ gì không?
Cesar Bielich

@CesarBielich: Trước tiên, bạn phải gỡ lỗi Mã thông báo truy cập ngắn. Nó xuất hiện bên dưới kết quả khi bạn gỡ lỗi mã thông báo ứng dụng ngắn. Vì bạn không thể nhìn thấy nó, bạn phải gỡ lỗi mã thông báo truy cập của người dùng. Lưu ý rằng câu trả lời này không áp dụng để sử dụng mã thông báo truy cập; chỉ có thể sử dụng mã thông báo truy cập ứng dụng có thể được sử dụng Mã thông báo người dùng không thể là vĩnh viễn. Chúng có thể được tạo tối đa Token dài.
Siddhant Rimal

1
@CesarBielich Tôi nghĩ bạn đang nhầm lẫn một cái gì đó ở đây. Bạn có thể tạo mã thông báo truy cập cho Người dùng, Ứng dụng và Trang. Bạn cần chọn một ứng dụng mà bạn đã tạo, thay vì Graph API Explorertrong trường Ứng dụng trước khi bạn có thể yêu cầu mã thông báo.
Siddhant Rimal

@CesarBielich: Sử dụng phương pháp đầu tiên nếu phương pháp thứ hai quá khó hiểu với bạn. Bạn chỉ cần điền vào các trường đầu vào trong trường đầu tiên và mọi thứ sẽ tự động xảy ra :)
Ridd Siddhant

Xin lỗi tôi đã bình luận về một bài viết khác tôi vừa thực hiện tối qua lol. Vâng vì một số lý do tôi không thể khiến bạn làm việc và biến tôi thành một mã thông báo không bao giờ hết hạn. Tôi đã phải loại bỏ v2.9cuộc gọi thứ hai và điều đó đã làm việc cho tôi. Wierd
Cesar Bielich

6

Tôi đã thử các bước sau: https://developers.facebook.com/docs/marketing-api/access#graph-api-explorer

Nhận mã thông báo truy cập trang vĩnh viễn

  • Chuyển đến Trình khám phá API API
  • Chọn ứng dụng của bạn trong Ứng dụng
  • Dán mã thông báo truy cập lâu dài vào thông báo truy cập
  • Bên cạnh thông báo truy cập, chọn trang bạn muốn mã thông báo truy cập. Mã thông báo truy cập xuất hiện dưới dạng một chuỗi mới.
  • Nhấp vào i để xem các thuộc tính của mã thông báo truy cập này
  • Nhấp vào nút Mở trong Công cụ mã thông báo truy cập Nút một lần nữa để mở công cụ Trình gỡ lỗi mã thông báo truy cập trực tuyến để kiểm tra các thuộc tính

Một mẹo, nó chỉ hoạt động với tôi khi ngôn ngữ trang là tiếng Anh .


1
NGƯỜI ĐÀN ÔNG NÀY!!! 5 loại bia ảo. Công việc này thay thế bước 5 của câu trả lời đã được phê duyệt. đồ thị phiên bản 2.8
Root -

1
Tôi đã lãng phí nhiều tuần để có thể sử dụng API Facebook. Đó là, cho đến nay, mã thông báo nhầm lẫn và không nhất quán nhất mà tôi đã gặp. Giải pháp này vẫn hoạt động hoàn hảo .. Tháng 10 năm 2017
user919426

4

Nếu bạn chỉ yêu cầu dữ liệu trang, thì bạn có thể sử dụng mã thông báo truy cập trang. Bạn sẽ chỉ phải ủy quyền cho người dùng một lần để có được mã thông báo truy cập của người dùng; gia hạn đến hai tháng hiệu lực sau đó yêu cầu mã thông báo cho trang. Tất cả điều này được giải thích trong Kịch bản 5 . Lưu ý rằng mã thông báo truy cập trang đã mua chỉ có hiệu lực miễn là mã thông báo truy cập của người dùng là hợp lệ.


Xin lỗi, có lẽ tôi đã không đủ rõ ràng. Tôi đã đọc về mã thông báo, tôi chỉ cần tìm hiểu cách yêu cầu người dùng cấp phép và chuyển mã thông báo vào ứng dụng của mình. Có vẻ như tôi cần tạo một số "ứng dụng" facebook mà mục đích duy nhất là xin quyền, đúng không?
Vlasec

1
@Viasec Sửa cách duy nhất để có được mã thông báo truy cập là thông qua một ứng dụng như được giải thích ở đây developers.facebook.com/docs/facebook-login
phwd

Cảm ơn, tôi đã bỏ qua nó bằng cách nào đó, tôi cho rằng nó ở đâu đó trong phần API, điều đó là sai. Tôi sẽ xem xét điều đó, tôi hy vọng nó trả lời câu hỏi của tôi.
Vlasec

4

Trong khi nhận được mã thông báo truy cập vĩnh viễn, tôi đã làm theo 5 bước như Donut đã đề cập. Tuy nhiên, trong bước thứ 5 trong khi tạo mã thông báo truy cập vĩnh viễn, mã thông báo truy cập tồn tại lâu dài (có giá trị trong 2 tháng) không phải là mã thông báo truy cập vĩnh viễn (không bao giờ hết hạn). điều tôi nhận thấy là phiên bản hiện tại của API API là V2.5. Nếu bạn đang cố gắng nhận mã thông báo truy cập vĩnh viễn với V2.5, mã thông báo truy cập tồn tại lâu dài. Hãy thử gọi API với V2.2 (nếu bạn không thể thay đổi phiên bản trong trình thám hiểm api đồ thị, hãy nhấn lệnh gọi API https: //graph.facebook.com/v2.2/ {account_id} / Tài khoản? access_token = {long_living_access_token} trong tab mới với V2.2) sau đó bạn sẽ nhận được mã thông báo truy cập vĩnh viễn (Không bao giờ hết hạn)


Quay trở lại các phiên bản api để đạt được kết quả sẽ chỉ mang lại nhiều công việc hơn trong tương lai mà tôi đã tìm thấy, đặc biệt là khi phiên bản API hết hạn sau một thời gian nhất định.
SlickRemix

nó trả về null :( Làm thế nào chúng ta có được mã thông báo truy cập trang?
Nancy thakkar

3

Ngoài các phương pháp được đề cập, điều đáng nói là đối với các ứng dụng từ máy chủ đến máy chủ, bạn cũng có thể sử dụng hình thức mã thông báo truy cập vĩnh viễn này: app_id | app_secret Loại mã thông báo truy cập này được gọi là Mã thông báo ứng dụng. Nó thường có thể được sử dụng để gọi API đồ thị và truy vấn các nút công khai trong back-end ứng dụng của bạn. Nó được đề cập ở đây: https://developers.facebook.com/docs/facebook-login/access-tokens


1
Nó có cho phép bất kỳ loại quyền truy cập vào các trang? Tôi nghĩ rằng nó không và trong trường hợp đó nó không thực sự trả lời câu hỏi.
Vlasec

@Vlasec Nó cho phép bạn truy cập bình luận trên một bài đăng công khai
Ali Gajani

1
Trong khi điều đó có thể là đủ cho một số người, nó không trả lời câu hỏi.
Vlasec

2

Nhờ @donut, tôi đã quản lý để có được mã thông báo truy cập không bao giờ hết hạn trong 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);
})

và sau đó tôi đã sử dụng mã thông báo truy cập đã lưu như thế này

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))

Tôi hy vọng rằng ai đó có thể cắt mã này vì nó hơi lộn xộn nhưng đó là cách duy nhất tôi có thể nghĩ ra.


2

Nếu bạn có ứng dụng của facebook, thì bạn có thể thử với ứng dụng-id & ứng dụng bí mật.

Giống :

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

nó sẽ không yêu cầu thay đổi mã thông báo thường xuyên.


1

Đạt giới hạn yêu cầu ứng dụng (# 4) - FB API v2.1 trở lên

Câu trả lời này đã đưa tôi đến "câu trả lời cuối cùng cho chúng tôi" và vì vậy nó có liên quan rất nhiều nên tôi đang nối nó ở đây. Mặc dù nó liên quan đến những điều trên nhưng nó lại khác và có vẻ như FB đã đơn giản hóa một số quy trình.

Số lượt chia sẻ của chúng tôi trên trang web của chúng tôi đã ngừng hoạt động khi FB chuyển qua api sang phiên bản 2.1. Trong trường hợp của chúng tôi, chúng tôi đã có Ứng dụng FB và chúng tôi KHÔNG sử dụng thông tin đăng nhập FB. Vì vậy, những gì chúng ta cần làm là nhận Mã thông báo FB APP để thực hiện các yêu cầu mới. Đây là vào ngày 23 tháng 8 năm 2016.

  1. Truy cập: https://developers.facebook.com/tools/explorer
  2. Chọn phiên bản api và sau đó sử dụng GET và dán như sau:

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

    Bạn sẽ muốn lấy id ứng dụngbí mật ứng dụng của bạn từ trang ứng dụng của bạn. Trang nhà phát triển ứng dụng FB chính

  3. Chạy truy vấn đồ thị và bạn sẽ thấy:

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

    Ở đâu

    "id ứng dụng"
    "mã thông báo ứng dụng"
    sẽ là id ứng dụng của bạn từ trang ứng dụng FB của bạn và HASH Ứng dụng FB được tạo mà bạn vừa nhận được.

  4. Tiếp theo hãy kiểm tra mã thông báo truy cập APP mới của bạn: Trình kiểm tra mã thông báo truy cập FB

  5. Bạn sẽ thấy, bằng cách dán

    "mã thông báo ứng dụng"
    vào trình kiểm tra mã thông báo, một mã thông báo dựa trên ứng dụng mà không có ngày / thời gian hết hạn.

Trong trường hợp của chúng tôi, chúng tôi đang sử dụng sdk FB js vì vậy chúng tôi đã thay đổi cuộc gọi của mình thành như vậy (xin lưu ý CHỈ này nhận được số lượt chia sẻ chứ không phải số lượt chia sẻ và bình luận như trước đây) :

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

Điều này hiện đang hoạt động đúng. Điều này đã mất rất nhiều tìm kiếm và một báo cáo lỗi chính thức với FB để xác nhận rằng chúng tôi phải bắt đầu thực hiện các yêu cầu token hóa cho api FB. Ngoài ra, tôi đã yêu cầu họ (FB) thêm một đầu mối vào mã Lỗi (# 4) có đề cập đến yêu cầu được mã hóa.

Tôi vừa nhận được một báo cáo khác từ một trong những nhà phát triển của chúng tôi rằng số lượng bình luận FB của chúng tôi cũng bị hỏng do nhu cầu mới về các yêu cầu mã thông báo nên tôi sẽ cập nhật thông tin này cho phù hợp.


1
Nó luôn là người dùng của ứng dụng đã đăng nhập và cho phép ứng dụng truy cập. Dù sao, điều này dường như không tạo ra mã thông báo truy cập trang, vì vậy tôi nghĩ đó không phải là câu trả lời hợp lệ cho câu hỏi. Mặc dù thú vị - có thể tạo một Q / A của riêng bạn?
Vlasec

1

Nhiều ví dụ trong số này không hoạt động, không chắc có phải vì 2.9v sắp ra mắt không nhưng tôi đã đập đầu mình. Dù sao, tôi đã lấy phiên bản @ dw1 và sửa đổi nó một chút với sự trợ giúp của video @KFunk và nó đã hoạt động với tôi cho 2.9. Hi vọng điêu nay co ich.

$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;
}

Đoạn trích hay, nhưng câu hỏi này không phải là về cách tạo nó trong PHP, mà là về cách sử dụng chính API, có thể được thực hiện bằng Java hoặc .NET. Ví dụ tôi cần làm điều đó trong Java. Mã giả hoặc hướng dẫn từng bước sẽ hữu ích hơn cho những người không sử dụng PHP.
Vlasec

2
@Vlasec Tôi cho rằng đoạn mã PHP này khá gần với bất kỳ mã giả nào và rất dễ hiểu. Casar chỉ đang sử dụng một số API đã được cung cấp bởi facebook. Phần còn lại của công cụ là tự giải thích.
Ridd Siddhant

0

Kể từ tháng 4 năm 2020, mã thông báo trang thường trực trước đây của tôi bắt đầu hết hạn vào khoảng từ 1 đến 12 giờ. Tôi đã bắt đầu sử dụng mã thông báo người dùng với sự manage_pagescho phép để đạt được mục tiêu trước đó (bỏ phiếu Sự kiện của Trang). Những mã thông báo dường như là vĩnh viễn.

Tôi đã tạo một tập lệnh python dựa trên thông tin tìm thấy trong bài đăng này, được lưu trữ tại github.com/k-funk/facebook_permanent_token , để theo dõi những thông số nào được yêu cầu và phương pháp nào để có được mã thông báo vĩnh viễn đang hoạt động.


-1

Tôi tìm thấy câu trả lời này trong đó đề cập đến công cụ này thực sự đã giúp rất nhiều.

Tôi hy vọng câu trả lời này vẫn còn hiệu lực khi bạn đọc nó.


ĐỒNG Ý. Liệu câu trả lời bằng bánh rán vẫn hoạt động, hay nó cần thêm một bước nữa?
Vlasec
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.