Одноклассники API: загрузка фото в альбом photosV2.commit php происходит Ошибка 104?

// Параметры
$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) {

                    pre(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 фото
$params = array(
    "application_key"   =>  $ok_public_key,
    "method"            => "photosV2.getUploadUrl",
    "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];

// Закачаем фотку

// Предполагается, что картинка располагается в каталоге со скриптом
$params = array(
    "pic1" => new \CURLFile(__DIR__ .'/e2cd131a01dea207300c9972de79b573.png'),
);

// Отправляем картинку на сервер, подписывать не нужно
$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;

pre($step2);

// Выполним
$step3 = json_decode(getUrl("https://api.ok.ru/fb.do", "POST", $params), true);
print_r($step3);


Происходит Ошибка 104, но суть в том что бывает и не появляется очень редко, запросов на 80 - 1 проходит нормально и фото добавляется. Ошибка 104-Мол не правильно формируется SIG
  • Вопрос задан
  • 145 просмотров
Пригласить эксперта
Ответы на вопрос 1
@Ganzo Автор вопроса
Все сам разобрался
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
YCLIENTS Москва
от 200 000 до 350 000 ₽
Ведисофт Екатеринбург
от 25 000 ₽
ИТЦ Аусферр Магнитогорск
от 100 000 до 160 000 ₽
24 апр. 2024, в 16:19
4000 руб./за проект
24 апр. 2024, в 15:34
20000 руб./за проект
24 апр. 2024, в 15:32
130000 руб./за проект