• Как правильно загружать картинки через VK API на PHP?

    @Nc_Soft
    <?php
    $token = '**************************************';
    $group_id = '1111111';
    $vk = new Vk($token);
    
    $image_path = 'image.png';
    copy('https://www.google.ru/images/branding/googlelogo/2x/googlelogo_color_272x92dp.png', 'image.png');
    
    $upload_server = $vk->photosGetWallUploadServer($group_id);
    
    $upload = $vk->uploadFile($upload_server['upload_url'], $image_path);
    
    $save = $vk->photosSaveWallPhoto([
            'group_id' => $group_id,
            'photo' => $upload['photo'],
            'server' => $upload['server'],
            'hash' => $upload['hash']
        ]
    );
    
    $attachments = sprintf('photo%s_%s', $save[0]['owner_id'], $save[0]['id']);
    
    
    $post = $vk->wallPost([
        'owner_id' => "-$group_id",
        'from_group' => 1,
        'message' => "блаблабла",
        'attachments' => $attachments
    ]);
    
    
    class Vk
    {
        private $token;
        private $v = '5.37';
    
        public function __construct($token)
        {
            $this->token = $token;
        }
    
        public function wallPost($data)
        {
            return $this->request('wall.post', $data);
        }
    
        public function photosGetWallUploadServer($group_id)
        {
            $params = [
                'group_id' => $group_id,
            ];
            return $this->request('photos.getWallUploadServer', $params);
        }
    
        /**
         * @param $params [user_id, group_id, photo, server, hash]
         * @return mixed
         * @throws \Exception
         */
        public function photosSaveWallPhoto($params)
        {
            return $this->request('photos.saveWallPhoto', $params);
        }
    
        public function uploadFile($url, $path)
        {
            $ch = curl_init($url);
            curl_setopt($ch, CURLOPT_HEADER, false);
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
            curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
            curl_setopt($ch, CURLOPT_POST, true);
    
            if (class_exists('\CURLFile')) {
                curl_setopt($ch, CURLOPT_POSTFIELDS, ['file1' => new \CURLFile($path)]);
            } else {
                curl_setopt($ch, CURLOPT_POSTFIELDS, ['file1' => "@$path"]);
            }
    
            $data = curl_exec($ch);
            curl_close($ch);
            return json_decode($data, true);
        }
    
        private function request($method, array $params)
        {
            $params['v'] = $this->v;
    
            $ch = curl_init('https://api.vk.com/method/' . $method . '?access_token=' . $this->token);
            curl_setopt($ch, CURLOPT_HEADER, false);
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
            curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
            curl_setopt($ch, CURLOPT_POST, true);
            curl_setopt($ch, CURLOPT_POSTFIELDS, $params);
            $data = curl_exec($ch);
            curl_close($ch);
            $json = json_decode($data, true);
            if (!isset($json['response'])) {
                throw new \Exception($data);
            }
            usleep(mt_rand(1000000, 2000000));
            return $json['response'];
        }
    }
    Ответ написан
    6 комментариев