@lapu_lapu

VK API photos.saveWallPhoto возвращает Invalid hash. Что не так?

Как правильно загрузить фотографию на стену?

1. Получаю сервер для загрузки
2. Загружаю фотографию
3. Пытаюсь ее сохранить методом photos.saveWallPhoto

И тут все время получаю ошибку

Не использую никаких SDK, запросы отправляю с помощью модуля request
Пробовал слать и напрямую курлом - результат тот же самый

Итак. На 2 пункте я в ответ получаю следующую строку:

{"server":604318,"photo":"[{\"photo\":\"eea7bb809b:x\",\"sizes\":[[\"s\",\"604318330\",\"23c30\",\"O6RTMNxqFAc\",75,50],[\"m\",\"604318330\",\"23c31\",\"8XuKKKELIWc\",130,87],[\"x\",\"604318330\",\"23c32\",\"4T0MFEgEcXM\",604,403],[\"o\",\"604318330\",\"23c33\",\"WYUUeisK1PI\",130,87],[\"p\",\"604318330\",\"23c34\",\"exWpeveeREo\",200,133],[\"q\",\"604318330\",\"23c35\",\"mnHulDDkpK8\",320,214],[\"r\",\"604318330\",\"23c36\",\"n8bxTfLYtgc\",510,340]],\"kid\":\"604eeef2f79a216276b3fc4db69db121\",\"debug\":\"xsxmxxxoxpxqxrx\"}]","hash":"dc4747eab0b9f081ae90211c5b484668"}


Проблема с параметром photo, как правильно его послать?

Если шлю как
photo=[{\"photo\":\"eea7bb809b:x\",\"sizes\":[[\"s\",\"604318330\",\"23c30\",\"O6RTMNxqFAc\",75,50],[\"m\",\"604318330\",\"23c31\",\"8XuKKKELIWc\",130,87],[\"x\",\"604318330\",\"23c32\",\"4T0MFEgEcXM\",604,403],[\"o\",\"604318330\",\"23c33\",\"WYUUeisK1PI\",130,87],[\"p\",\"604318330\",\"23c34\",\"exWpeveeREo\",200,133],[\"q\",\"604318330\",\"23c35\",\"mnHulDDkpK8\",320,214],[\"r\",\"604318330\",\"23c36\",\"n8bxTfLYtgc\",510,340]],\"kid\":\"604eeef2f79a216276b3fc4db69db121\",\"debug\":\"xsxmxxxoxpxqxrx\"}]


Получаю ошибку:
`One of the parameters specified was missing or invalid: photos_list is invalid`

Если шлю как
photo=[{"photo":"eea7bb809b:x","sizes":[["s","604318330","23c30","O6RTMNxqFAc",75,50],["m","604318330","23c31","8XuKKKELIWc",130,87],["x","604318330","23c32","4T0MFEgEcXM",604,403],["o","604318330","23c33","WYUUeisK1PI",130,87],["p","604318330","23c34","exWpeveeREo",200,133],["q","604318330","23c35","mnHulDDkpK8",320,214],["r","604318330","23c36","n8bxTfLYtgc",510,340]],"kid":"604eeef2f79a216276b3fc4db69db121","debug":"xsxmxxxoxpxqxrx"}]


Получаю ошибку:
Invalid hash

Если использовать encodeURIComponent для параметра photo все равно получаю
Invalid hash

Токен у меня с правами wall,groups.
Что делаю не так?

есть ли пример "сырого" запроса через curl?
  • Вопрос задан
  • 2286 просмотров
Решения вопроса 1
Decadal
@Decadal
Постит сам себе на стену фотку.
VK.Api.call('photos.getWallUploadServer', {}, function (answer) {
    up_url = answer.response.upload_url; // получаем upload_url, куда загружать фото
    $.ajax({
        'type': 'POST',
        'url': apiPoint + '/post-send', //экшн моего сервера, ниже приведу его текст
        data: {
            link: up_url, 
            file: fileName //имя файла, который я хочу загрузить в вк. Лежит на моем сервере
        },
        success: function (request) {
            request = JSON.parse(request);// параметры для сохранения
            //  request.user_id = response.session.mid; 
            VK.Api.call('photos.saveWallPhoto',  // сохраняем
                request, // передаем параметры полученные от post + uid_того_кому_отправляешь
                function (result) { // данные о сохраненном фото
                    console.log(result.response[0].id);
                    VK.Api.call('wall.post', // постим на стену
                        { 
                            //   owner_id : result.response[0].owner_id,
                            attachments: result.response[0].id,
                            message: inputedTxt
                        }, 
                        function (r) {
                            if (r.error) {
                                console.log(r.error);
                                return false;
                            }
                        });
                }
            );
        }
    });
});


public function actionPostSend() // это то что было в js как apiPoint + '/post-send'
    {
        $this->returnFormatJson(); //выставляю возвращаемый формат
        $fileName = $this->getRequest('post','file'); // принимаю имя файла
        $curl = new CurlHelper();
        $rez = $curl->sendFile([
            'url' => $this->getRequest('post','link', ''),
            'file' => $this->userUpload . DIRECTORY_SEPARATOR . $fileName //физический путь к файлу
        ]);
        return (isset($rez["html"]))
            ? $rez["html"]
            : false;
    }


пардон, что пришёл с этим своим php.
Надеюсь, поможет.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы