Почему я получаю "Недопустимое значение 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. Оба аккаунта должны быть одинаковыми.

Идентификатор приложения должен быть одинаковым для вашего мобильного приложения и веб-приложения.

Для меня это были три исправления, которые заставили его работать

  1. Активируйте приложение Secret и Доступ к API в расширенной конфигурации вашего приложения в Facebook для разработчиков. Хотя теоретически мне это не нужно, он всегда подсказывал, что appsecret_proof был нужен, даже когда эти два параметра были отключены.

  1. При создании appsecret_proof, access_token, используемый для его создания, должен быть тем же access_token для отправки в запросе, и его user access_token, моя ошибка заключалась в том, что я использовал app access_token. Используйте user access_token.

  2. Отправляйте параметр 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 маркер страницы, сохраненный в моей базе данных, созданный, когда я связываю страницу с приложением.

Другие вопросы по тегам