2015-09-03 3 views
1

Instagram Документация: https://instagram.com/developer/secure-api-requests/Instagram API Принудительно Подпись просит подпись не совпадает Error

Цель: Соблюдать с [в настоящее время обязательным] Принудительно Подписанные пожеланиях с помощью Instagram API.

Функциональная проблема: без соблюдения требований IG. Как и пределы 30 часов в час. ОТВЕЧАЮЩИХ позволяет 100 лайков в час

Техническая проблема: следующая ошибка возвращается при выполнении простой вызов к API для СМИ:

{"code": 403, "error_type": "OAuthForbiddenException", "error_message": "Invalid signed-request: Signature does not match"} 

Instagram Client Настройка: идентификатор клиента, клиент Secret, Redirect URI были проверены, чтобы соответствовать тем, которые используются во всех частях кода PHP. Проверяются как «Отключить неявные OAuth», так и «Enforce signed requests».

Код Пояснение: Для создания рукопожатия с IG: необходимы три различных фрагмента кода: 1. Заголовок 2. Токен доступа (т. "access_token"] 3. Вызовите с помощью Sig [т.е. «sig» - не путать с «подписью»]. Я подтвердил, что те же client_id, client_secret и access_token используются во всех частях кода. ПРИМЕЧАНИЕ. Части 1 и 2 работают [ed] штрафа до обязательного соответствия. Они все еще работают нормально, но я получаю только 30 Likes/hr [т.е. основной функциональный вопрос]

Заголовок Код:

$ip = $_SERVER['HTTP_X_FORWARDED_FOR']; 
$this->signature = $ip .'|'. hash_hmac('sha256', $ip, $this->settings['client_secret'], false); 

Токен доступа код, который успешно возвращается с массивом аналогично { "access_token": "11deadbee7.7dded5e.c0d656eead134218beef31a61b45e4d9", ...}

$apiData = array(
'grant_type'  => 'authorization_code', 
'client_id'  => $this->getApiKey(), 
'client_secret' => $this->getApiSecret(), 
'redirect_uri' => $this->getApiCallback(), 
'code'   => $code 
); 
$ch = curl_init(); 
$xHeaderFront = 'X-Insta-Forwarded-For:'; 
$xHeader = $xHeaderFront.$this->signature; 
curl_setopt($ch, CURLOPT_URL, $apiHost); 
curl_setopt($ch, CURLOPT_POST, count($apiData)); 
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($apiData)); 
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Accept: application/json')); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 
$jsonData = curl_exec($ch); 
curl_close($ch); 

Звоните с Sig. Это возвращает ошибку { "код": 403, "ERROR_TYPE": "OAuthForbiddenException", "ERROR_MESSAGE": "Invalid зарегистрированны запрос: Подпись не соответствует"}:

$params = array(); //temporary to force a simple set of parameters 
$params['count']=10; 
$params['access_token'] = $this->getAccessToken(); //11deadbee7.7dded5e.c0d656eead134218beef31a61b45e4d9 masked, but kept for ease of comparison] 
$endpoint = '/media/657988443280050001_25025320'; //temporary 
$sig = $endpoint; 
ksort($params); 
foreach ($params as $key => $val) { 
    $sig .= "|$key=$val"; 
} 
$enforcedSig = hash_hmac('sha256', $sig, $secret, false); 
$apiCall = 'https://api.instagram.com/v1/media/657988443280050001_25025320/likes?sig='.$enforcedSig.'&count=10&access_token='.$params['access_token']; 
$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, $apiCall); 
$xHeaderFront = 'X-Insta-Forwarded-For:'; 
$xHeader = $xHeaderFront.$this->signature; 
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Accept: application/json',$xHeader)); 
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);   
$jsonData = curl_exec($ch); 
curl_close($ch); 

ответ

1

Ваш $ конечная точка, кажется, неправильно ,
Добавить "/ нравится".

$endpoint = '/media/657988443280050001_25025320/likes'; //temporary 
+0

Некоторые из самых простых вещей! Спасибо soooo много! –

Смежные вопросы