Библиотека упрощает работу с api vk.com
Внимание!
- Поддержка бесед работает только если выбрана версия callBack api старше 5.8
- Библитека адаптирована для версий 5.80 и выше
- Подключение
- Описание классов и их методов
- Работа с клавиатурой
- Файл конфигурации
- Примеры работы
- План развития проекта
- Помощь проекту
composer require digitalstars/vk_api
require_once "vendor/autoload.php"; //Подключаем библиотеку- Скачать последний релиз
- Подключить перемещённый autoload.php
- Подключение autoload.php, если ваш скрипт находится в той же папке, что и папка vk_api-master
require_once "vk_api-master/autoload.php"; //Подключаем библиотекуuse DigitalStar\vk_api\vk_api; // Основной класс
use DigitalStar\vk_api\Coin; // работа с vkcoins
use DigitalStar\vk_api\LongPoll; //работа с longpoll
use DigitalStar\vk_api\Execute; // Поддержка Execute
use DigitalStar\vk_api\Group; // Работа с группами с ключем пользователя
use DigitalStar\vk_api\Auth; // Авторизация
use DigitalStar\vk_api\Post; // Конструктор постов
use DigitalStar\vk_api\Message; // Конструктор сообщений
use DigitalStar\vk_api\VkApiException; // Обработка ошибок$vk = vk_api::create('токен группы или пользователя', 'версия api');авторизация через токен группы/пользователя$vk = vk_api::create('логин', 'пароль', 'версия api');авторизация через логин/пароль пользователя$vk = vk_api::create('экземпляр класса Auth', 'версия api');использование уже готовой авторизации
-
reply($message)- отправка сообщения тому, от кого пришел callback(личка пользователя или беседа) -
sendMessage($id, $message)- отправка сообщения -
sendOK()- отправка текста 'ok', и сообщение клиенту, что-бы не ждал ответа скрипта (обход тайм-аута vk) -
sendButton
($user_id, $message, $buttons = [], $one_time = False)- отправка клавиатуры (только если отправитель - бот)$user_id- id пользователя, которому нужно отправить клавиатуру$message- сообщение, прикреплённое к клавиатуре(обязательный параметр)$buttons- массив клавиатуры$one_time- исчезнет ли клавиатура после того, как пользователь ей воспользуется?
-
groupInfo($group_url)- Возвращает информацию о группе$group_url- ссылка на группу в любом виде или id группы
-
userInfo($user_url = null, $scope = [])- Возвращает информацию о пользователе$user_url- ссылка на пользователя в любом виде или его id$scope- дополнительные параметры запроса к api, в формате: ['параметр' => 'значение',...]
-
request($method, $params = [])- универсальная функция для работы с любыми методами api vk$method- метод$params- параметры в формате: ['параметр' => 'значение',...]
-
sendImage($id, $local_file_path)- отправка изображения$id- id того, кому отправится сообщение$local_file_path- путь до изображения
-
uploadDocsGroup($groupID, $local_file_path, $title = null)- загрузка документа в документы сообщества$groupID- id сообщества$local_file_path- путь до файла$title- название файла (если не указать, то останется локальное название)
-
uploadDocsUser($local_file_path, $title = null)- загрузка документа в документы пользователя (только с ключем пользователя)$local_file_path- путь до файла$title- название файла (если не указать, то останется локальное название)
-
sendDocMessage($id, $local_file_path, $title = null)- отправка документа$id- id получателя$local_file_path- путь до файла$title- название файла (если не указать, то останется локальное название)
-
sendVoice($id, $local_file_path)- отправляет аудиофайл с расширениями |.mp3|.ogg|.pcm|.wav| как голосовое сообщение$id- id получателя$local_file_path- путь до файла
-
getGroupsUser($id = [], $extended = 1, $props = [])- возвращает информацию о группах пользователя (только с ключём пользователя)$id- id пользователя, информацию о группах которого надо получить(если не указать, вернёт информацию о пользователе, чей токен)$extended- (1 - подробно, 0 - нет)$props- дополнительные параметры запроса к api, в формате: ['параметр' => 'значение',...]
-
setConfirm($str)- устанавливает строку подтверждения сервера. Подтверждает автоматически$str- строка, которую должен вернуть сервер для подтверждения
-
debug()- включает режим вывода ошибок -
initVars($id, $message, $payload, $user_id, $type, $data)- инициализирует переменные
Вы можете назвать переменные по другому, но важно сохранить их порядок. Так же вы можете только часть переменных, например $id, $message а остальные не указывать. Но вы НЕ можете сделать так initVars($id, $type), нужно указать все переменные стоящие до $type. Так же функция возвращает $data(весь json от вк в виде объекта), поэтому можно писать так:
$data = $vk->initVars($id, $message);
$time = $data->object->date;//пример кода
$vk = vk_api::create(TOKEN, VERSION)->setConfirm(CONFIRM_STR);
$vk->initVars($id, $message, $payload, $user_id, $type, $data);
$vk->reply($message); //отвечает пользователю или в беседу-
sendWallComment($owner_id, $post_id, $message)- отправляет комментарий под постом$owner_id- id пользователя$post_id- id поста$message- сообщение
-
getAlias($id, $n = null);- возвращает обращение к пользователю или группе в виде строки по типу @id123 или @public123$id- id пользователя или группы, так же можно указать короткий адрес$n- принимает 3 параметра или можно не указыватьесли не указать- вернет обращение в виде idtrue- вернет Имя и Фамилию пользователя или название группы. Пример: @id1(Павел Дуров)false- вернет только Имя пользователя или название группы Пример: @id1(Павел)любая кастомная строка, например Котик- Пример: @id1(Котик)
-
sendAllDialogs($message)- Отправляет сообщение во все диалоги в группе или личной странице(зависит от способа авторизации)$message- отправляемая строка
-
isAdmin($id, $chat_id)- проверяет, является ли $id админов в беседе $chat_id. Если пользователя ,нет в беседе или нет админ прав, то вылетит exception, советую сделать try catch для этой команды$id- id пользователя$chat_id- id чата
Может вернуть следущие значения:
owner- создательadmin- админfalse- пользовательnull- пользователя нет в беседе
-
setTryCountResendFile($var)- задаёт максимальное количество попыток загрузки файла- У vk, бывает, с этим возникают некоторые баги и файл не загружается
$var- число попыток, по умолчанию 5, также можно настроить число по умолчанию в файле конфигурации
-
setRequestIgnoreError($var)- задаёт коды ошибок vk, при которых сообщение об ошибке игнорируется и отправляется повторный запрос- Внимание! запрос будет отправляться бесконечно, пока не получит от api vk ответ об успешном выполнении!
$var- массив кодов ошибок, по умолчанию [6,9,14], также можно настроить число по умолчанию в файле конфигурации
Класс позволяет работать LongPoll
require_once('vendor/autoload.php'); //подключаем библу
use DigitalStar\vk_api\vk_api;
use DigitalStar\vk_api\LongPoll;$vk = vk_api::create(TOKEN, '5.95');
$vk = new LongPoll($vk);
$vk->listen(function($data)use($vk){ //в $data содержится все данные события, можно убрать, если не нужен
$vk->initVars($id, $message);
$vk->reply($message);
});$vk = vk_api::create('login', 'password', '5.95');
$vk = new LongPoll($vk);
$vk->listen(function()use($vk){ //longpoll для пользователя
$vk->on('new_message', function($data)use($vk) {
$vk->initVars($id, $message);
$vk->reply($message);
});
});Все методы vk_api
require_once('vendor/autoload.php'); //подключаем библу
use DigitalStar\vk_api\vk_api;
use DigitalStar\vk_api\Execute;$vk = new Execute($vk);
При использовании вместе с LongPoll следует передать этот объект при инициализации LongPoll
sendMessage($id, $message)- отправка сообщения- sendButton
($user_id, $message, $buttons = [], $one_time = False)- отправка клавиатуры (только если отправитель - бот)$user_id- id пользователя, которому нужно отправить клавиатуру$message- сообщение, прикреплённое к клавиатуре(обязательный параметр)$buttons- массив клавиатуры$one_time- исчезнет ли клавиатура после того, как пользователь ей воспользуется?
- Полная поддержка конструктора сообщений, если инициализировать конструктор от данного экземпляра
Также будут работать все методы класса vk_api, но в обычном режиме, а не в режиме Execute
exec()- выполняет все накопленные методы (максимум 25)
При использовании Execute, запросы к api vk накапливаются в памяти, как только количество запросов достигнет 25, они отправятся одним запросом на api vk, так же запросы отправляются при вызове деструктора экземпляра Execute (при завершении скрипта или функции, где он был инициализирован). Также можно запросить отправку вручную (если запросов < 25), с помощью метода exec()
При использовании LongPoll вместе с Execute, метод exec() вызывается автоматически после обработки каждой 'пачки' полученных данных
При испоьзовании Callback exec() вызывается автоматически при завершении скрипта
require_once('vendor/autoload.php'); //подключаем библу
use DigitalStar\vk_api\vk_api;
use DigitalStar\vk_api\Coin;$coin = new Coin(COIN_API_KEY, COIN_API_ID);- или
$сoin = Coin::create(COIN_API_KEY, COIN_API_ID);COIN_API_KEY- Ключ вашего магазинаCOIN_API_ID- идентификатор владельца магазина.
sendCoins($user_id, $amount)- отправка платежа.
ВНИМАНИЕ, 1 единица = 1 coin. Если вы хотите отправить меньше одного коина, то пишите 0.001
getBalance($user_ids = [])- получение баланса. Можно передать id или массив id. Если не задан$user_ids, вернет баланс магазина.setName($name)- установка имени магазина.setCallBack($url = null)- Установка callBack-сервера для примема платежей через специальную ссылку.deleteCallBack()- удаление callBack-сервера.getLogs()- получение списка ошибок и изменений в настройках callBack.verifyKeys($data)- Сверка ключей callBack. Вернет true или falsegetLink($sum = 0, $fixed_sum = true, $payload = 0, $to_hex = false)- Получение платежной ссылки.$sum- сумма$fixed_sum- Не дает возмоджности изменить сумму. Принимает true/false$payload- полезная нагрузка для ссылки. Принимает int значение$to_hex- кодирует в hex вид ссылку. Сделана скорее для скрытия данных от школьников. Если true - может не работать проверка ключей.
Вернет массив ['url' => ..., 'payload' => ...]. Для получения ссылки пишите getLink(...)['url']
getStoryShop($last_tx)- получить 100 последних транзакций на аккаунт$last_tx- id транзакции, после которой будут браться 100 следующих транзакций
getStoryAccount($last_tx)- получить 1000 последних транзакций по генерированных ссылкам функцией getLink$last_tx- id транзакции, после которой будут браться 1000 следующих транзакций
getInfoTransactions($id_transactions)- получить информацию о транзакциях. Принимает 1 id или массив idinitVars($from_id, $amount, $payload, $verify, $data)- инициализирует переменные, которые есть в callback транзакции$data- здесь находится все данные калбэка. На случай, если вам нужны переменные которые не задаются в функции$verify- содержит true или false. Защита, если кто-то вдруг найдет путь до вашего callback скрипта
Класс позволяет работать с группами от имени пользователя (используя токен доступа пользователя)
$my_group = new group('id группы', 'экземпляр класса vk_api')
Все методы vk_api, которые можно использовать с ключём доступа сообщества
Класс нужен для кастомной авторизации в vk, можно задать множество параметров при авторизации и выбрать метод авторизации, также получить токен доступа или куки
$my_auth = new Auth('логин', 'пароль', $other = null, $mobile = true)- авторизация через логин и пароль- Это инициализация по умолчанию при авторизации через логин/пароль в vk_api
- $mobile - выбор метода авторизации (true - будет использоваться штатная авторизация под видом мобильного приложения, false - авторизация через приложение vk)
$my_auth = new Auth('куки', null, $other = null)- авторизация через куки- куки - массив в json с куками
- Работает только если куки были получены на том же сервере (с тем же ip), с которого происходит авторизация
- Рекомендуется использовать куки, полученный при вызове метода dumpCookie()
- Авторизацию через куки можно использовать, только если куки были получены при авторизации через приложение VK!
$other - массив для изменения значений по умолчанию
может принимать значения: ['useragent' => 'пользовательский User-Agent', 'id_app' => 'id приложения для авторизации через приложение vk']
Причём как что-то одно, так и все сразу
Значения по умолчанию useragent и id_app можно также изменить в файле конфигурации
Как показала практика, авторизация через приложение vk может по непонятным причинам забагаваться для аккаунта, решение пока не найдено, и непонятно что на это влияет.
Штатная авторизация под видом мобильного приложения самая надёжная и работает всегда. Рекомендуется использовать именно её
auth()- запускает процесс авторизации (ТОЛЬКО ДЛЯ АВТОРИЗАЦИИ ЧЕРЕЗ ПРИЛОЖЕНИЕ vk)- После вызова метода происходит авторизация в vk (получение авторизационнах кук), но не получение токена доступа. (Смысл авторизации под видом мобильного приложения заключается в получении токена доступа, по этому метод auth() бессмысленен для метода авторизации через мобильное приложение)
dumpCookie()- возвращает текущие куки в формате JSONisAuth()- проверяет, выполнена ли авторизация вернёт true или falsegetAccessToken($captcha_key = null, $captcha_sid = null)- попытаться получить токен доступа, при успехе его и вернёт- Параметры не работают при авторизации через приложение VK
$captcha_key- решение каптчи$captcha_sid- сид каптчи, полученный при ошибки (VkApiException, можно поймать через try catch вместе со ссылкой на картинку каптчи) если при предыдущей попытке авторизации вылетала каптча
Этот класс является удобным конструктором запросов для создания и публикации постов
$new_post = new Post('экземпляр класса vk_api')
setMessage($message)- задаёт текстaddImage($images1, $images2,...)- добавляет картинки во вложения- Может принимать как 1 параметр (массив из ссылок на файлы), так и 1 или больше отдельных параметров (строк - ссылок на файлы)
addProp($prop, $value)- задаёт дополнительный(пользовательский) параметр в запросе к api$prop- название параметра$value- значение
addDocs($docs, $title = null)- добавляет документы во вложения- Может работать двумя способами:
- Принимать
$docs- путь до файла и$title- новое название файла, если нужно изменить - Принимать массив:
[['path' => 'путь', 'title' => 'название'], ['path' => 'путь', 'title' => null],...]
- Принимать
- Может работать двумя способами:
removeImages($images)- удаляет из вложений картинку с путём$imagesremoveDocs($docs)- удаляет из вложений документ с путём$docsremoveProp($prop)- удаляет пользовательский параметр$propgetMedia()- возвращает весь массив вложенийgetMessage()- возвращает заданное сообщениеgetProps()- возвращает пользовательские параметрыsend($id, $publish_date = null)- публикует пост, возвращает id поста после публикации$id- id пользователя или сообщества (если сообщества, то с минусом), на стену которого будет опубликован пост$publish_date- дата в формате Unixtime, когда будет опубликована запись (опубликуется в отложенные до этого времени). Если не задать, опубликуетс сразу же
Максимальное количество вложений - 10. Это ограничение самого VK, при превышении сгенерируется исключение
Также метод send() можно вызывать сколько угодно раз с разными параметрами, для публикации одного и того же поста в разных местах
При вызове нескольких методов подряд с префиксом add или remove, они будут дополнять друг друга, а не заменять
Этот класс является удобным конструктором запросов для создания и отпраvkи сообщений
$new_message = new Message($vk)$vk- экземпляр класса vk_api или group, при инициализации в группе с ключем пользователя
Все те же, что и у класса Post, только send() слегка другой и есть дополнительные
- setKeyboard
($keyboard = [], $one_time = false)- прикрепляет клавиатуру к сообщению (только если отпровитель - бот)$buttons- массив клавиатуры$one_time- исчезнет ли клавиатура после того, как пользователь ей воспользуется?- В целом, работает так же, как и
sendButton()
getKeyboard()- возвращает настройки прикреплённой клавиатурыaddVoice($local_file_path)- прикрепляет голосовое сообщение$local_file_path- путь до медиафайла. Поддерживаемые форматы: |.mp3|.ogg|.pcm|.wav|
send($id)- отправляет сообщение$id- $id адресата сообщения
try {
} catch (VkApiException $e) {
$e->getMessage() // сообщение ошибки
}Исключение генерируется, если VK возвращает в ответ ошибку (возвращается весь JSON вывода), и в некоторых случаях библиотека сама генерирует исключение.
$button1_1 = [null, "white", "white"];
$button1_2 = [["animals" => 'Pig'], "blue", "blue"];
$button2_1 = [["animals" => 'Cow'], "green", "green"];
$button2_2 = [["animals" => 'Chicken'], "red", "red"];Параметр 1: Payload - может принимать значение: ассоциативный массив или null
Параметр 2: Надпись на кнопке - текст
Параметр 3: Цвет кнопки - может принимать значения: white, blue, green, red
$id // ID пользователя, кому будет отправлена клавиатура, или peer_id беседы
$message // Сообщение, отправляемое вместе с клавиатурой
$buttons = [[$button, ...], ...] // Массив из отправляемый кнопок
$one_time // Не обязательный параметр. Принимает значение True или False. Если True - после нажатия клавиши клавиатуры, клавиатура исчезнет, Flase - не исчезнет. По умолчанию = False
$vk->sendButton($id, $message, $buttons, $one_time);$id // ID пользователя, кому будет отправлена клавиатура
[[$button, ...], ...] // Массив из отправляемый кнопок
$one_time // Не обязательный параметр. Принимает значение True или False. Если True - после нажатия клавиши клавиатуры, клавиатура исчезнет, Flase - не исчезнет. По умолчанию = False
$vk->sendButton($id, 'Клавиатура', [
[$button1_1, $button1_2],
[$button2_1, $button2_2]
], $one_time);Кнопки будут выглядеть так:
[ white ] [ blue ]
[ green ] [ red ]
Такой запрос:
$vk->sendButton($id, 'Клавиатура', [
[$button1_1, $button1_2, $button2_2],
[$button2_1]
]);Выведет следующие кнопки:
[ white ] [ blue ] [ red ]
[ green ]
Обращаем ваше внимание, что если передать параметр $one_time = True (см. отправка клавиатуры), клавиатура исчезнет после нажатия на одну из кнопок.
Для того, что-бы вручную выключить клавиатуру, нужно выполнить следующий запрос:
$id // ID пользователя
$message // Сообщение, отправляемое при удалении клавиатуры
$vk->sendButton($id, $message);Файл конфигурации называется config.php и находится в папке vk_api
Пользовательские параметры файла:
// массив кодов ошибок vk, при которых сообщение об ошибке игнорируется и отправляется повторный запрос к api
const REQUEST_IGNORE_ERROR = [6,9,14];
// максимальное количество попыток загрузки файла
const COUNT_TRY_SEND_FILE = 5;
// Auth
// Запрашиваемые права доступа для токена пользователя по уполчанию
const DEFAULT_SCOPE = "notify,friends,photos,audio,video,stories,pages,status,notes,messages,wall,ads,offline,docs,groups,notifications,stats,email,market";
// User-Agent по умолчанию
const DEFAULT_USERAGENT = 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.86 Safari/537.36';
// ID приложения vk по умолчанию
const DEFAULT_ID_APP = '6660888'; Файлы с некоторыми примерами работы библиотеки лежат в Examples
При установке через composer пути менять не нужно, примеры в Examples уже подключены и будут работать
В процессе заполнения
- Яндекс.Деньги - <money.yandex.ru/to/410014638432302>
- Дебетовая карта - 2202201272652211
- Также вы можете помочь проекту
Pull Request'ом