Answer the question
In order to leave comments, you need to log in
Error 104 is not a valid sig?
Good afternoon!!
I'm trying to overcome the sig signature
, everything was unsuccessful, I checked the request https://apiok.ru/dev/methods/ I substituted the values, everything is OK
, but the error 104 falls from the computer, the
first two steps go as it should,
I do this
// Параметры
$ok_access_token = ""; // Наш вечный токен
$ok_private_key = ""; // Секретный ключ приложения
$ok_public_key = ""; // Публичный ключ приложения
$ok_group_id = ""; // ID нашей группы
// Запрос
function getUrl($url, $type = "GET", $params = array(), $timeout = 30, $image = false, $decode = true)
{
if ($ch = curl_init())
{
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, false);
if ($type == "POST")
{
curl_setopt($ch, CURLOPT_POST, true);
// Картинка
if ($image) {
curl_setopt($ch, CURLOPT_POSTFIELDS, $params);
}
// Обычный запрос
elseif($decode) {
curl_setopt($ch, CURLOPT_POSTFIELDS, urldecode(http_build_query($params)));
}
// Текст
else {
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($params));
}
}
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.2.12) Gecko/20101026 Firefox/3.6.12');
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
$data = curl_exec($ch);
curl_close($ch);
// Еще разок, если API завис
if (isset($data['error_code']) && $data['error_code'] == 5000) {
$data = getUrl($url, $type, $params, $timeout, $image, $decode);
}
return $data;
}
else {
return "{}";
}
}
// Массив аргументов в строку
function arInStr($array)
{
ksort($array);
$string = "";
foreach($array as $key => $val) {
if (is_array($val)) {
$string .= $key."=".arInStr($val);
} else {
$string .= $key."=".$val;
}
}
return $string;
}
// 1. Получим адрес для загрузки 1 фото
$params = array(
"application_key" => $ok_public_key,
"method" => "photosV2.getUploadUrl",
'aid' => 52630516531438,
"count" => 1, // количество фото для загрузки
"gid" => $ok_group_id,
"format" => "json"
);
// Подпишем запрос
$sig = md5( arInStr($params) . md5("{$ok_access_token}{$ok_private_key}") );
$params['access_token'] = $ok_access_token;
$params['sig'] = $sig;
// Выполним
$step1 = json_decode(getUrl("https://api.ok.ru/fb.do", "POST", $params), true);
// Если ошибка
if (isset($step1['error_code'])) {
// Обработка ошибки
exit();
}
// Идентификатор для загрузки фото
$photo_id = $step1['photo_ids'][0];
// 2. Закачаем фотку
// Предполагается, что картинка располагается в каталоге со скриптом
$params = array(
"pic1" => new \CURLFile(__DIR__ .'/83PHvrz.jpg'),
);
// Отправляем картинку на сервер, подписывать не нужно
$step2 = json_decode( getUrl( $step1['upload_url'], "POST", $params, 30, true), true);
$params = [
"application_key" => $ok_public_key,
"format" => "json",
"method" => "photosV2.commit",
'photo_id' => $photo_id,
'token' => $step2['photos'][$photo_id]['token'],
];
$sig = md5( arInStr($params) . md5("{$ok_access_token}{$ok_private_key}"));
$params['sig'] = $sig;
$params['access_token'] = $ok_access_token;
// Выполним
$step3 = json_decode(getUrl("https://api.ok.ru/fb.do", "POST", $params), true);
print_r($step3);
Answer the question
In order to leave comments, you need to log in
Thank you all
figured out .. if anyone is interested then;
it is necessary that only processed http_build_query get into the resulting url
$data = ['photo_id'=> $photo_id,
'token' => $step2['photos'][$photo_id]['token']];
$q = http_build_query($q);
Didn't find what you were looking for?
Ask your questionAsk a Question
731 491 924 answers to any question