系统用户代表服务器调用,所以不能使用 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",
}