Приветствую,
Пишу PHP класс для работы с OK.RU. Сделал, вроде бы так, как написано
здесь:
namespace App\Http\Controllers\Apps\Shop\Api;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use App\Models\Userok;
class ApiOKExportController extends Controller
{
//
protected $params = array(
'application_id' => 'ID приложения',
'application_key' => 'Публичный ключ',
'session_secret_key' => 'Секретный ключ'
);
public function getalbums( Request $request ) {
//access_token для каждого пользователя хранится в БД (и обновляется при необходимости нажатием кнопки в личном кабинете)
$userok = Userok::where('useroks.user_id', '=', $request->user_id)->first(); //Это, собственно, Ларавел. Получили строку с access_token из БД
$paramsArray = array(
'application_key' => $this->params['application_key'],
'method' => 'photos.getAlbums',
'uid' => $userok->ok_id
);
ksort($paramsArray);
foreach($paramsArray as $k=>$v) {
$paramsStr .= $k . "=" . $v;
}
$sig = strtolower(
md5(
$paramsStr
.$this->params['session_secret_key']
)
);
$sURL = "https://api.ok.ru/fb.do?method=photos.getAlbums&uid={$uid}&application_key={$paramsArray['application_key']}&session_secret_key={$this->params['session_secret_key']}&format=json&access_token={$userok->access_token}&sig={$sig}";
$oResponce = json_decode($this->get_curl($sURL));
return file_get_contents($sURL);
}
function get_curl($url) {
if(function_exists('curl_init')) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
$output = curl_exec($ch);
echo curl_error($ch);
curl_close($ch);
return $output;
} else {
return file_get_contents($url);
}
}
}
Пришел с сервера такой ответ:
{"error_code":104,"error_msg":"PARAM_SIGNATURE : Invalid signature 3ca9389b7c7c36o1a85f7df12681db62, calculated by string application_key=APPKEY=jsonmethod=photos.getAlbumssession_secret_key=SEKRETKEYuid=********SECRET KEY*******","error_data":null}
Я, как вы догадались, понял суть ошибки. Я неправильно сгенерировал SIG. Перепробовал несколько вариантов. Читал статьи на тостере и т.п. Но все одно и тоже. Даже класс готовый нашел. Мне он не совсем подходит, но что-то из него взял на вооружение для того, чтобы свой нормально построить.