我创建了一个使用 Facebook Login for Business 的应用程序。身份验证流程获取授权代码,然后将其交换为系统用户访问令牌(SUAT)。
成功登录会返回以下有效负载:
{
"authResponse": {
"userID": null,
"expiresIn": null,
"code": "AQA..."
},
"status": "connected"
}
然后将其交换为系统用户访问令牌,如下所示:
{
"data": {
"access_token": "EAAT...",
"token_type": "bearer"
}
}
我希望能够在用户登录我们的应用程序后自动执行我们的内部流程。由于单个客户可以有多个业务经理,我需要了解以下详细信息:企业帐户 ID、用户名、电子邮件等,以便能够准确识别用于登录的帐户。
我尝试使用 Facebook 开发者控制台和以下端点调试访问令牌: https://graph.facebook.com/debug_token?input_token={token-to-inspect}&access_token={app-token-or-管理令牌} 这会返回如下所示的有效负载:
{
"data": {
"app_id": "1234567890123456",
"type": "SYSTEM_USER",
"application": "My App",
"data_access_expires_at": 0,
"expires_at": 0,
"is_valid": true,
"issued_at": 1234567890,
"scopes": [
"pages_show_list"
"public_profile"
],
"granular_scopes": [
{
"scope": "pages_show_list"
}
],
"user_id": "123456789012345678"
}
}
返回的 UserID 是应用程序范围的用户 ID,并且始终映射到与我们自己的业务管理器关联的系统用户。我们想要的是刚刚登录的客户的商务管理平台帐户 ID。
要获取有关用户在登录过程中选择的业务、adaccounts 和页面的信息,您可以使用系统用户访问令牌发出获取请求:
curl --request GET --url 'https://graph.facebook.com/v19.0/me?fields=accounts{name,id,business},adaccounts{name,id,account_id}&access_token=<system-user-access-token>'
响应会是这样的:
{
"accounts": {
"data": [
{
"name": "My Page",
"id": "111111111111111",
"business": {
"id": "111111111111111",
"name": "My Business"
}
}
],
"paging": {
"cursors": {
"before": "before",
"after": "after"
}
}
},
"adaccounts": {
"data": [
{
"name": "My Ads",
"id": "act_1111111111111111",
"account_id": "1111111111111111"
}
],
"paging": {
"cursors": {
"before": "before",
"after": "after"
}
}
}
}