Facebook php sdk 50 :Facebook SDK returned an error: Cross-site request forgery validation failed. Required param “state” missing.

解法:

參考:

https://github.com/facebook/facebook-php-sdk-v4/issues/473
https://github.com/facebook/facebook-php-sdk-v4/blob/4.0.16/src/Facebook/FacebookRedirectLoginHelper.php#L205
https://github.com/facebook/facebook-php-sdk-v4/issues/470#issuecomment-212561488
https://github.com/facebook/facebook-php-sdk-v4/issues/572
https://github.com/facebook/facebook-php-sdk-v4/issues/470
https://github.com/facebook/facebook-php-sdk-v4/issues/529

粉絲團自動貼文:使用facebook php sdk > 4.0.*

要使用php sdk做粉絲團自動貼文步驟如下:

步驟1.取得app_id與app_secret

上https://developers.facebook.com/開一個app,之後會有app_id與app_secret。

步驟2.取得access_token

要讓應用程式取得使用者(粉絲團擁有者)的權限,也就是讓應用者能代替使用者貼文,這需要先取得access_token,因為之後會需要拿到page_tokens。
可以從這裡拿到:https://developers.facebook.com/tools/explorer。進去這個頁面後,Application點選剛剛開的應用程式,然後右邊點選get_page_tokens。之後就可以拿到上方的access_token。

步驟3.取得貼文權限

除了有access_token之外,還要讓使用者帳號授權給應用程式,所以通常需要寫個程式,透過登入(login dialog)來取得。而應用程式需要有以下權限:manage_pages與publish_pages。詳細說明可以看facebook官網

步驟4.取得long_lived_token

1.當使用者同意後,應用程式就有權限可以代替使用者貼文。不過透過第二步驟取得的access_token是short_lived_token,也就是只能用一個小時就沒用了。
如果我們要長期貼文,就需要取得long_lived_token。關於這部分的說明,可以看facebook說明頁面

2.基本上取得的步驟,可以從這個網址:
https://graph.facebook.com/oauth/access_token?grant_type=fb_exchange_token&client_id=aaa&client_secret=bbb&fb_exchange_token=ccc

3.上述aaa,bbb,ccc分別代表剛剛取得的app_id、app_secret、access_token。之後頁面會顯示一行字串,上面的access_token就是long_lived_token。要看是不是真的可以用兩個月,可以到以下網址:
https://developers.facebook.com/tools/debug/accesstoken?q=long_lived_token

4.有了long_lived_token之後,就要將它存到db,隨時取用,然後在兩個月內,透過上述步驟,定期手動更新,才不會過期。

步驟5.寫php程式

1.先用composer把php sdk裝起來。通常會在程式碼加入以下片段:

只要確定有load進來即可。

2.記得宣告

3.貼文的短程式碼範例

facebook_fanpage_id就是粉絲團的專屬id,上面要的資料、參數都有了,接下來就可以自動透過程式貼文到粉絲團上了。

步驟6.寫成cron

透過上述步驟,應該可以順利自動貼文了,最後再寫成cron,就可以定期貼文,後端程式碼依個人需求自行設計。

相關文章:
1.How to post into a Facebook Page with PHP using Graph API
2.https://developers.facebook.com/docs/php/howto/example_post_links/5.0.0
3.access_token 官方說明頁面