我有這樣的代碼:如何使用PHP SDK擴展Facebook用戶訪問令牌?
$facebook->api("/oauth/access_token?grant_type=fb_exchange_token&client_id=".$facebook->getAppId()."&client_secret=".$facebook->getAppSecret()."&fb_exchange_token=".$user->getFacebookAccessToken());
它不拋出任何異常,但它返回null。我試圖將一個短命的Facebook用戶訪問令牌擴展爲一個長壽命的Facebook用戶訪問令牌。但是,在生成新的令牌並在新令牌仍然存在的情況下調用此請求後,我等了幾個小時,然後啓動了瀏覽器,但未使用我的Facebook帳戶登錄。然後我用一個測試用戶(對應用程序,而不是Facebook)登錄,但不幸的是,它正在將我導向Facebook登錄,這意味着Facebook用戶訪問令牌無效。
我工作的基礎上發現文檔here。
那麼,有人能告訴我該如何發送請求,這樣Facebook纔會真正延長令牌的生命週期?另外,我不知道如何確定我是否已成功延長Facebook用戶訪問令牌的生命週期。 (我不是Facebook粉絲,至少可以說,我也是Facebook API的新手)。
謝謝,夥計們。
編輯: 我已閱讀this article並將setExtendedAccessToken方法複製到我的類中,並進行了一些修改以支持我的邏輯。現在它試圖延長用戶的生命週期的Facebook訪問令牌是如下的代碼:
$facebook->setExtendedAccessToken($user->getFacebookAccessToken());
現在它返回兩個元素,令牌和到期日期的陣列。失效日期是「5174078」。我相信我正處在解決這個問題的正確軌道上,是嗎?
一些你的問題並沒有完全意義的 - 的道理,如果正確擴展,應該保持有效約60天,到期時間應該來自令牌擴展端點的響應 - 您在哪裏存儲擴展令牌?你確定你對同一個用戶使用相同的標記,並且在沒有設置Facebook cookie的情況下,在你的PHP代碼中不意外調用getAccessToken()? – Igy
好,感謝您的意見,我會嘗試爲我的問題添加更多意義。我知道擴展令牌應該長時間保持有效。我將Facebook用戶訪問令牌存儲在與用戶關聯的數據庫中,所以是的,我相信我正在爲同一用戶使用相同的訪問令牌。我相信你的到期時間應該是在迴應中,但我得到的答覆爲空,所以我認爲有些錯誤。我的問題是:如果參數是正確的,我的代碼是否能正常工作(擴展令牌並返回擴展令牌)? –
當您擴展從JavaScript SDK收到的短期令牌(1-2小時有效期)時,您應該得到一個包含更新的令牌及其過期或錯誤消息的響應,如果您收到null,您可能會默默地忽略錯誤某處。您無法擴展您使用服務器端流程創建的代碼,或者擴展已交換的令牌,以防您正在嘗試執行的操作。您需要用戶在登錄FB時返回。總體而言,您應該能夠獲取和存儲令牌,然後在用戶返回時使用該令牌引導SDK('$ facebook-> setAccessToken()') – Igy