Почему я получаю "Недопустимое значение appsecret_proof в аргументе API"
Со времени последнего изменения на Facebook, касающегося appsecret_proof: https://developers.facebook.com/docs/reference/api/securing-graph-api/, мы по-прежнему не можем загружать отчеты о производительности даже после включения / отключения функций из Advanced Настройки в нашем приложении или примените код как описано в их документе.
Мы постоянно получаем эту ошибку:
{"error": {"message": "В аргументе API указано недопустимое значение appsecret_proof","type":"GraphMethodException","code":100}}
и я открыл конфиденциальную ошибку, но никто не возвращается ко мне с ответом.
Я действительно не знаю, что еще мы можем попробовать?
15 ответов
Ошибка (основываясь на моем опыте) почти наверняка исправлена; это означает, что вы проверяете недопустимое appsecret_proof с помощью вызова API
Предполагая, что вы используете стандартный PHP SDK без изменений, наиболее вероятные причины этого:
- Вы настроили неправильный идентификатор приложения в коде SDK
- Вы указали неверный секретный ключ приложения в коде SDK
- Вы пытаетесь использовать токен доступа из неправильного / другого приложения
Другая потенциальная причина ошибки "Invalid appsecret_proof ..." - маркер доступа пользователя, который не связан с приложением. Если вы генерируете токен доступа пользователя с помощью обозревателя графиков, обязательно выберите приложение из раскрывающегося списка в правом верхнем углу. В противном случае вы будете генерировать токены, которые работают только в графическом обозревателе API.
Я подал ошибку в Python SDK, прежде чем поймал свою ошибку. GUI - это дьявол
Нет ошибки в последней версии PHP PHP SDK. Вам нужно создать appsecret_proof согласно документам:
$appsecret_proof= hash_hmac('sha256', $access_token, $app_secret);
затем передайте его в качестве параметра вашему вызову API.
Смотрите документы здесь: https://developers.facebook.com/docs/graph-api/securing-requests/
Как только я это сделал, все было хорошо, и мне не пришлось взламывать base_facebook.php
В SDK Facebook есть ошибка. После 20 часов все попытки отладить мой собственный код (который не имел проблем!), Я закомментировал это в base_facebook.php:
/* Commented out by SJ
if (isset($params['access_token'])) {
$params['appsecret_proof'] = $this->getAppSecretProof($params['access_token']);
}
*/
И все проблемы ушли!
Это ошибка из-за правильного токена. Это может быть связано с тем, что вы используете другую учетную запись для настройки веб-приложения и мобильное приложение для настройки Facebook. Оба аккаунта должны быть одинаковыми.
Идентификатор приложения должен быть одинаковым для вашего мобильного приложения и веб-приложения.
Для меня это были три исправления, которые заставили его работать
- Активируйте приложение Secret и Доступ к API в расширенной конфигурации вашего приложения в Facebook для разработчиков. Хотя теоретически мне это не нужно, он всегда подсказывал, что appsecret_proof был нужен, даже когда эти два параметра были отключены.
При создании appsecret_proof, access_token, используемый для его создания, должен быть тем же access_token для отправки в запросе, и его user access_token, моя ошибка заключалась в том, что я использовал app access_token. Используйте user access_token.
Отправляйте параметр appsecret_proof как appsecret_proof, а не как app_secret_proof. Мелкая деталь, но случилась со мной.
Дополнительно: для python вы можете создать appsecret_proof следующим образом:
import hmac
import hashlib
facebook_app_secret = '<your_app_secret>'
facebook_access_token = '<your_user_access_token>'
appsecret_proof = hmac.new(facebook_app_secret.encode('utf-8'),
msg=facebook_access_token.encode('utf-8'),
digestmod=hashlib.sha256).hexdigest()
print(appsecret_proof)
Получено из вызовов api графика facebook с appsecret_proof в python
Если эта ошибка является неожиданным поведением, возможно, вы проверили параметр в своем приложении, чтобы потребовать его. Снимите флажок, и вы должны перестать получать эту ошибку. Этот параметр находится в настройках -> расширенный и называется "Подтверждение секретности приложения для вызовов API сервера". Установите это в НЕТ.
На данный момент этот параметр находится на этой странице (не забудьте указать свой appId в URL): https://developers.facebook.com/apps/YOUR-APP-ID/settings/advanced/
Обратите внимание, что это не универсальное решение, а решение для людей, которые не хотят такого поведения.
Эта ошибка является результатом неправильной установки токена доступа. Например, для публикации на странице альбома с помощью токена доступа пользователя (администратора). Я почти всегда решал эту ошибку, устанавливая правильный токен доступа
Проблема возникает из-за неправильного токена доступа к платформе. Вы должны проверить свою панель управления, которую вы предпочли API, и проверить свой токен доступа, откуда он берется.
Просто для людей, имеющих ту же проблему;
Когда вы устанавливаете Client OAuth Login на "да" на Facebook, вы должны указать правильные URI OAuth-адреса для перенаправления. В противном случае facebook выдает точно такую же ошибку.
В моем случае мне нужно было установить токен доступа по умолчанию с помощью метода: setDefaultAccessToken()
Я использовал токен, сгенерированный в GraphApi dev tool, но не переключился на правильное приложение. Это было решено путем изменения приложения в правильное и использования восстановленного токена.
Я знаю, что это старый вопрос, но я решил свой, изменив приложение на соответствующее приложение, с которым я должен генерировать токен доступа. Например из Project1
в Project2
,
Убедитесь, что ваши настройки правильные fbappid + fbappsecret
эта ошибка происходит, когда они не установлены правильно
как у вас есть 2 приложения одна разработка и одно производство
и вы испортили коды, дважды проверьте эти два
возможно, что-то не так с вашим токеном доступа, вам нужен стиль Business Manager. вы можете получить токен из содержимого https://business.facebook.com/settings/system-users/ {sys_user_id}? business_id = {bussiness_id} с помощью regex r'"accessToken":"([\d|\w]+)","context"'
Работает для меня:
$appsecret_proof = hash_hmac('sha256', $facebook_page_token, $app_secret);
ГДЕ facebook_page_token
маркер страницы, сохраненный в моей базе данных, созданный, когда я связываю страницу с приложением.