@pamparam

Ошибка 104 не правильный sig?

Добрый день!!
пытаюсь побороть подпись sig
все без результатно проверял запрос https://apiok.ru/dev/methods/ подставлял значения все ок
но с компа валится ошибка 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) {
                        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);
  • Вопрос задан
  • 145 просмотров
Решения вопроса 1
@pamparam Автор вопроса
Всем спасибо
разобрался.. если кому интересно то;

нужно что бы в результирующий url обработанные http_build_query попадали только
$data = ['photo_id'=> $photo_id,
              'token' => $step2['photos'][$photo_id]['token']];
        $q = http_build_query($q);

а не весь массив $params
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы