Всем доброго времени суток. Пытаюсь отправить картинку на стену группы ВК.
Но не получается загрузить картинку.
По порядку:
Получаю сервер для загрузки:
var
sl : TStringList;
res : string;
JSONObj : TJSONObject;
serv, photo, hash : string;
picStream : TIdMultiPartFormDataStream;
begin
sl := TStringList.Create;
// Получаем сервер загрузки
sl.Add('group_id=111586045');
sl.Add('access_token='+token);
sl.Add('v=5.131');
res := IdHTTP1.Post('https://api.vk.com/method/photos.getWallUploadServer?', sl);
JSONObj := TJSONObject.ParseJSONValue(res) as TJSONObject;
try
serv := JSONObj.FindValue('response.upload_url').Value;
memoLog.Lines.Add(serv);
except
ShowMessage ('Не удалось проучить сервер загрузки.' +#13#10+ JSONObj.FindValue('error.error_msg').Value);
exit;
end;
Исключено. Другие API методы нормально с этим же токеном отрабатываются в этой же процедуре.
Все участки кода, которые я предоставил находятся в одной и той же процедуре и идут друг за другом. Переменная token глобальная и в коде нигде не меняется, кроме как при авторизации.
Я про то, что я бы для начала с помощью отладчика или отладочного вывода проверил бы значение в том месте. Вдруг оно где-то случайно поменялось или не та переменная (локальная с тем же именем, …).
Еще на всякий случай убрать ? в конце, раз за ним все равно нет параметров.
Так там в каждом методе API VK передаются параметры. Я бы сказал больше, что мне не приходилось работать с такими методами VK API, где не нужны параметры.
Отладчиком прошёлся. token верный 100%
Да он и не может быть не верный, т.к. другие то методы нормально с этим токеном там же отрабатываются.
Так. Почему же тогда во всех других методах нужен. Они все вызываются совершенно идентично и отрабатывают прекрасно. Сейчас попробую убрать конечно. Но что-то мне подсказывает, что будет ошибка…
Ни в каких не нужен если за ним не идут параметры как тут
Ну а убрать на всякий случай, вдруг оно например определяет откуда читать параметры (из тела или URL) по наличию ?.
Тогда я бы попробовал посмотреть нет ли чего странного в отправляемом запросе (например, по сравнению с предыдущими) с помощью чего-нибудь типа Fiddler.
Или попробовать выполнить запрос какой-нибудь другой утилитой (curl, Postman, …, Postman вообще удобная штука для экспериментов). Если и там та же ошибка, то перепроверить, что всё как в документации, и писать в тех. поддержку.
Кстати я использую прямую авторизацию и в ней client_id и client_secret как я понял от родного андроид приложения. Может в нём дело? Но хотя токен то получаю.
Создал своё приложение. Взял с него client_id и client_secret но с него даже авторизация не проходит. В чем может быть проблема? Не могли бы вы свои дать для проверки?
Но вообще я бы взял язык, для которого есть оф. библиотека вк, чтоб не велосипедить.
Или хотя бы живая не оф. типа https://github.com/vknet/vk
Если очень нужна “прямая” без ручного взаимодействия, то наверно можно автоматизировать взаимодействие с формой/отправку запросов для OAuth авторизации. В библиотеке выше вроде так и сделано.