Хабрахабр

Как генерировать правильную подпись (SIG) в API OK.RU. Работаем с ошибкой 104

Не так давно я столкнулся с трудностью. У меня не получалось при запросе по API в OK.RU (одноклассники) создать правильную SIG (ошибка 104). Как оказалось, я не единственный такой был, предлагаемые в сети рецепты не очень работали (проверил многие методом тыка). На самом деле работали, просто я не понимал, как правильно построить нужный запрос, чтобы ещё и SIG был правильным.
Конкретно, этот пост посвящен именно 104 ошибке API OK.RU.

PARAM_SIGNATURE 104 Неверная подпись

Ниже простенький код для получения списка альбомов. Код немного костыльный (для себя я написал нужный класс, но он специфический и мало кому пригодится), но описывает суть, а многие начинающие программисты могут на основе примера создать свой собственный класс.

protected $params = array( 'application_id' => '5*******6', 'application_key' => 'C***********A', 'session_secret_key' => '*************0' ); protected $apiUrl = 'https://api.ok.ru/fb.do?'; public function getalbums( Request $request ) /*** Отредактировано уже в статье. Это кусок кода, как делать не надо (в первой редакции забыл закоментировать). $sig = strtolower( md5( $paramsStr) . md5( $userok->access_token .$this->params['session_secret_key'] ) ); **/ $sectret_key = md5($userok->access_token.$this->params['session_secret_key']); $sig = md5($paramsStr.$sectret_key); $paramsArray['sig'] = $sig; $paramsArray['access_token'] = $userok->access_token; return $this->sendRequest( $this->apiUrl, $paramsArray, 'POST' ); } protected function sendRequest($url = '', $params = array(), $method = 'POST') { if(is_array($params)) { $params = http_build_query($params); } $ch = curl_init(); if($method == 'GET') { $url .= $params; } else if($method == 'POST') { curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $params); } curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); $result = curl_exec($ch); curl_close($ch); return json_decode($result, true); }

Но чтобы это работало, нужен правильный $paramsArray, иначе Вы решите 104-ю ошибку, но получите другую. Многие начинающие программисты, наверняка, игнорируют старания OK.RU помочь разработчикам.

Итак, переходим по ссылке https://apiok.ru/dev/methods/.

Находим вот такую форму:

Заполняем нужными данными и получаем по сути готовую инструкцию, а вдобавок тестируем свой запрос.

Надеюсь, статья была полезной.

Теги
Показать больше

Похожие статьи

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Кнопка «Наверх»
Закрыть