因為系統用戶代表伺服器呼叫,所以並未經過 Facebook 登入且無法安裝應用程式,也無法完成 Facebook oAuth 標準流程來產生權杖。您需要透過 API 呼叫來進行以上操作。
| 類型 | 沒有期限的存取權杖 | 建議會逾期的存取權杖 |
|---|---|---|
終身 | 永不到期 | 有效期 60 天 |
需要重新整理嗎? | 否 | 是 |
根據使用案例的建議 | 您可以容忍存取權杖洩露的風險,並希望您的第三方應用程式可以離線存取資料。 | 您希望限制存取權杖洩露的風險。 |
系統用戶或管理員系統用戶必須安裝將用於產生存取權杖的應用程式。這表示須允許應用程式代表此系統用戶或管理員系統用戶來呼叫 API。
系統用戶和應用程式必須隸屬於相同的企業管理平台。只可安裝具備廣告管理 API 標準存取權以上的應用程式。
若要為系統用戶安裝應用程式,您需要以下項目:
access_token:管理員用戶、管理員系統用戶或其他系統用戶的存取權杖business_app:要安裝的應用程式編號若要為系統用戶安裝應用程式,請發出 POST 要求:
curl \ -F "business_app=APP-ID" \ -F "access_token=ACCESS-TOKEN" \ "https://graph.facebook.com/API-VERSION/SYSTEM-USER-ID/applications"
如果安裝成功,此呼叫會傳回布林值結果。若未符合任一限制,您會看到適當的錯誤訊息。
系統用戶安裝應用程式後,就可產生持續性存取權杖。必須遵循以下限制:
以下為此 API 呼叫的參數:
business_app:系統用戶所屬企業管理平台擁有的應用程式。appsecret_proof:應用程式的計算欄位。此為必要項目,以確保是由正確的伺服器發出 API 呼叫。如需更多詳細資訊,請參閱登入安全性。scope:內含延伸權限並以逗號分隔的字串。access_token:隸屬於企業管理平台管理員、管理員系統用戶或一般系統用戶的權杖。set_token_expires_in_60_days:設定為 true,將產生有期限的系統用戶存取權杖。建議使用。有期限的權杖是確保安全的最佳作法。部分商家必須使用有期限的權杖。如果此要求適用於您的商家,省略此參數或將其設為 false 會導致系統發生錯誤。所有整合作業都應採用有期限的權杖,以因應不斷演進的平台安全標準。系統用戶支援範圍如下:
ads_managementads_readattribution_readbusiness_managementcatalog_managementcommerce_account_manage_orderscommerce_account_read_orderscommerce_account_read_settingsinstagram_basicinstagram_branded_content_ads_brandinstagram_branded_content_brandinstagram_content_publishinstagram_manage_commentsinstagram_manage_insightsinstagram_manage_messagesinstagram_shopping_tag_productsleads_retrievalpage_eventspages_manage_adspages_manage_ctapages_manage_engagementpages_manage_instant_articlespages_manage_metadatapages_manage_postspages_messagingpages_read_engagementpages_read_user_contentpages_show_listprivate_computation_accesspublish_videoread_audience_network_insightsread_insightsread_page_mailboxeswhatsapp_business_managementwhatsapp_business_messaging已停用的權限,僅適用於 2018 年 4 月 24 日之前建立的應用程式
publish_actions
依功能控制的權限
| 功能 | 權限 |
|---|---|
business_creative_asset_management |
|
commerce_public_api_beta_testing |
|
若要產生 appsecret_proof,您可以使用 PHP 程式碼:
$appsecret_proof = hash_hmac( 'sha256', $access_token_used_in_the_call, $app_secret_for_the_app_used_in_the_call, );
在上述程式碼範例中,app_secret_for_the_app_used_in_the_call 是用來產生存取權杖之應用程式的應用程式密鑰。您可以在應用程式主控板中查看應用程式密鑰。
經過雜湊處理的 appsecret_proof 必須是像 "1734d0d1e1ca62c9762c10bbc7321fdf89ecc7d819312b2f3" 的字串。
若要產生永久系統用戶存取權杖,請發出 POST 要求:
curl \ -F "business_app=<APP_ID>" \ -F "scope=ads_management,pages_read_engagement,pages_show_list" \ -F "appsecret_proof=APPSECRET-PROOF" \ -F "access_token=ACCESS-TOKEN" \ "https://graph.facebook.com/API-VERSION/SYSTEM-USER-ID/access_tokens"
若要產生有期限的系統用戶存取權杖,請發出 POST 要求:
curl \ -F "business_app=<APP_ID>" \ -F "scope=ads_management,pages_read_engagement,pages_show_list" \ -F "set_token_expires_in_60_days=true" \ -F "appsecret_proof=APPSECRET-PROOF" \ -F "access_token=ACCESS-TOKEN" \ "https://graph.facebook.com/API-VERSION/SYSTEM-USER-ID/access_tokens"
此端點先前稱為 /SYSTEM-USER-ID/ads_access_token。已無法向該名稱發出呼叫。
回應會傳回存取權杖字串。若未符合任一限制,則會擲回適當的錯誤代碼。回應:
{
"access_token": "CAAB3rQQzTFABANaYYCmOuLhbC]Fu8cAnmkcvT0ZBIDNm1d1fSp4Eg4XA79gmYumZCoSuiMSUILUjzG3y15BJlrYwXdqwd5c7y3lOUzu6aT7MkXL6HpISksSuLP4aFKWPmwb6iOgGeugRSn766xMZCN72vTiGGLUNqC2MKRL"
}您也可以使用企業管理平台用戶介面產生系統用戶存取權杖。
有期限的系統用戶權杖在產生或重新整理日期後的 60 天內有效。為了建立連續性,開發人員應在 60 天內重新整理存取權杖,否則會導致存取權杖遭撤銷,之後開發人員將需要新權杖才能重新取得 API 存取權限。
若要重新整理有期限的系統用戶存取權杖,您需要:
fb_exchange_token:有效的系統用戶存取權杖client_id:應用程式編號client_secret:應用程式密鑰set_token_expires_in_60_days:設定為 true,將重新整理有期限的系統用戶存取權杖。查詢 GET oauth/access_token 端點。
要求範例
curl -i -X GET
"https://graph.facebook.com/{graph-api-version}/oauth/access_token?
grant_type=fb_exchange_token&
client_id={app-id}&
client_secret={app-secret}&
set_token_expires_in_60_days=true&
fb_exchange_token={your-access-token}"回應範例
{
"access_token":"{expiring-system-user-access-token}",
"token_type": "bearer",
"expires_in": 5183944 // Time left in seconds until the token expires
}此端點用意是為受感染的系統用戶執行定期權杖輪換或撤銷存取權杖,作為保護系統的一種方式。
若要撤銷系統用戶存取權杖,您需要:
revoke_token:要撤銷的存取權杖
client_id:應用程式編號
client_secret:應用程式密鑰
access_token:用於識別呼叫者的存取權杖
必備條件如下:
client_id 必須與實際應用程式對應,並確保應用未受到限速、停用或刪除。
client_id,以及 revoke_token 的已安裝應用程式、access_token 的已安裝應用程式和 client_secret 必須全部相同。
查詢 GET oauth/revoke 端點。
要求範例
curl -i -X GET "https://graph.facebook.com/{graph-api-version}/oauth/revoke?
client_id={app-id}&
client_secret={app-secret}&
revoke_token={system-user-access-token-to-revoke}&
access_token={your-access-token}"回應範例
{
"success":"true",
}