sfreaky
@sfreaky
Начинающий веб и софт разработчик

Как устранить проблему пустого ответа на POST-запрос в поле photo VKAPI?

Вот небольшой класс для работы с VKAPI
class classVkApi {

	private $access_token;

	public function __construct($access_token)
	{
		$this->access_token = $access_token;
	}
	/*
	Метод для построения запроса
	$params - массив или строка
	Возвращает ответ на запрос
	 */
	public function APIMethod($name,$params)
	{
		$query ="https://api.vk.com/method/$name?access_token=$this->access_token";
		//Если параметры массив, строим запрос
		if ( is_array($params))
		{
			$query .= '&'.http_build_query($params);
		}
		else
		{
			$query .= '&'.$params;
		}
		return file_get_contents($query);
	}
	public function POSTQuery($url,$post_params)
	{
		if( $curl = curl_init() ) {
		curl_setopt($curl, CURLOPT_URL, $url);
		curl_setopt($curl, CURLOPT_RETURNTRANSFER,true);
		curl_setopt($curl, CURLOPT_POST, true);
		curl_setopt($curl, CURLOPT_POSTFIELDS, $post_params);
		$out = json_decode(curl_exec($curl));		
		curl_close($curl);
		return $out;
		}
	}
	public function UploadImage($images_array)
	{
		//Получаем адрес сервера для загрузки
		$upload_url = json_decode($this->APIMethod('photos.getMessagesUploadServer','count=1'))->response->upload_url;
	    //Отправляем фотографии на сервер
		$result = $this->POSTQuery($upload_url,$images_array);
		//Получаем данные 
	    $upload_params = array(
			'photo' => stripslashes($result->photo), 
			'server' => $result->server, 
			'hash' => $result->hash
		);
		//Сохраняем фото для дальнейшего прикрепления
		$savephoto = json_decode($this->APIMethod('photos.saveMessagesPhoto',$upload_params));
		//Получаем id
		$attachmentid = 'photo'.$savephoto->response[0]->owner_id.'_'.$savephoto->response[0]->pid;
		return $attachmentid;
	}
}

$attachmentid = $api -> UploadImage($post_params);
При вызове функции, возвращается только "photo_",
Вк присылает
{"server":639731,"photo":"[]","hash":"c27a0c8b411f39337629ee81fb792d0a"}
  • Вопрос задан
  • 327 просмотров
Решения вопроса 1
sfreaky
@sfreaky Автор вопроса
Начинающий веб и софт разработчик
У меня была проблема с curl запросом и формированием массива картинок, решил так, прикрепляю код с функциями
//Основной код
  //работа с картинками. файл должен хранится на сервере, откуда отправляется запрос
   	$img_src = "@".dirname(__FILE__)."/s.jpg";
  $post_params = array(
    "file1" => $img_src,
  ); 
        UploadImageToAlbum($post_params);
//Код функций
public function UploadImageToAlbum($images_array,$album_id,$group_id,$caption="")
  {
    //Получаем url для загрузки
    $upload_url = json_decode($this->APIMethod('photos.getUploadServer',"album_id=$album_id&group_id=$group_id&v=5.62"))->response->upload_url;
    //Отправляем POST запрос
    $result = $this->POSTQuery($upload_url,$images_array);
    //Получаем параметры для сохранения
    $imgparams = array(
      "group_id" => "//id группы",
      "server" => $result->server,
      "photos_list" => stripslashes($result->photos_list),
      "aid" => $result->aid,
      "hash" => $result->hash,
      "caption" => $caption
    );
    //Сохраняем на сервер || вместо ApiMethod, сформировать запрос с соответствующими параметрами
    $this->APIMethod('photos.save',$imgparams);
  }
  public function POSTQuery($url,$post_params)
  {
    $curl = curl_init($url);
    curl_setopt($curl, CURLOPT_SAFE_UPLOAD, false);
    curl_setopt($curl, CURLOPT_POST, true);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER,true);
    curl_setopt($curl, CURLOPT_POSTFIELDS, $post_params);
    curl_setopt($curl, CURLOPT_HTTPHEADER, array('Content-Type: multipart/form-data; charset=UTF-8'));
    $out = json_decode(curl_exec($curl));
    curl_close( $curl );
    return $out;
  }
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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