vk / php-sdk
VK SDK for PHP
Requires
- php: >=5.4
- vkcom/vk-api-schema: ^1.4.1
Requires (Dev)
- phpunit/phpunit: 5.2.*
This package is not auto-updated.
Last update: 2024-09-22 09:38:56 UTC
README
PHP库,用于与VK API交互,包括OAuth 2.0授权和API方法。完整的VK API功能文档可以在这里找到。
此库是使用VK API JSON Schema创建的。可以在这里找到。它使用VK API 版本 5.69。
1. 安装
可以通过运行以下命令使用Composer安装VK PHP SDK
composer require vk/php-sdk
2. 初始化
使用以下代码创建VKAPIClient对象
$vk = new VKAPIClient();
3. 授权
该库提供了基于vk.com API中OAuth 2.0协议实现的用户授权流程。在开始之前,请阅读完整的文档。
3.1. 用户授权码流程
OAuth 2.0授权码流程允许从服务器端调用方法。
此流程包括两个步骤——获取授权码和用码换取访问令牌。首先,您应该通过使用以下方法将用户重定向到授权页面来获取"code" (手动)
$oauth = new VKOAuth(); $oauth->authorize('{client_id}', '{redirect_uri}', '{display}', '{scope_array}', OAuthResponseType::CODE, '{api_version}', '{state}');
作为'{display}',您应该传递OAuthDisplay类的常数。'{scope_array}'应该是OAuthUserScope类的常数的数组。
示例
$oauth->authorize(6125390, 'http://example.com', OAuthDisplay::POPUP, array(OAuthUserScope::AUDIO, OAuthUserScope::DOCS), OAuthResponseType::CODE, '5.69', 'some state');
授权成功后,用户的浏览器将被重定向到指定的redirect_uri。同时,代码将以GET参数的形式发送到指定的地址
REDIRECT_URI?code=CODE
然后使用此方法获取访问令牌
$access_token = $oauth->getAccessToken('{client_id}', '{client_secret}', '{redirect_uri}', '{code}');
'{redirect_uri}'应该是用于在第一步获取代码的URL。
示例
$access_token = $oauth->getAccessToken(6125390, 'Dv3Ef3srY3d2GE1c1X0F', 'http://example.com', '4g2h79rd3f7580a23d');
4. API请求
您可以在这里找到VK API方法的完整列表。
请求示例
调用方法users.get的示例
$users = array(1, 210700286); $fields = array('city', 'photo'); $response = $vk->users()->get($access_token, array( 'user_ids' => $users, 'fields' => $fields ) );
将照片上传到私密消息
在开始之前,请阅读完整手册。
调用photos.getMessagesUploadServer以接收上传地址
$address = $vk->photos()->getMessagesUploadServer('{access_token}');
然后使用upload()方法将文件发送到上一步骤中收到的upload_url地址
$photo = $vk->request()->upload($address['upload_url'], 'photo', '/Users/Me/Documents/Photos/my_photo.jpg');
您将得到一个包含server、photo、hash字段的JSON对象。要保存照片,请使用这三个参数调用photos.saveMessagesPhoto
$response_save_photo = $vk->photos()->saveMessagesPhoto($access_token, array( 'server' => $photo['server'], 'photo' => $photo['photo'], 'hash' => $photo['hash'] ) );
然后您可以使用最后响应中的'owner_id'和'id'参数来创建上传照片的附件。
上传视频文件
在开始之前,请阅读完整手册。
调用video.save以获取视频上传服务器地址
$address = $vk->video()->save($access_token, array( 'name' => 'My video', ) );
通过调用upload()方法将文件发送到先前收到的upload_url
$video = $vk->request()->upload($address['upload_url'], 'video_file', '/Users/Me/Documents/Videos/my_video.mp4');
上传后,视频将经过一段时间处理。
6. Callback API LongPoll处理程序
为您的群组启用Callback API LongPoll,并通过调用以下API方法指定应跟踪哪些事件
$vk->groups()->setLongPollSettings($access_token, array( 'group_id' => 159895463, 'enabled' => 1, 'message_new' => 1, 'wall_post_new' => 1, ));
覆盖CallbackApiHandler类的方法以处理事件
class CallbackAPIMyHandler extends CallbackApiHandler { public function messageNew($object) { var_dump('New message: ' . $object['body']); } public function wallPostNew($object) { var_dump('New wall post: ' . $object['text']); } }
要开始监听LongPoll事件,创建CallbackAPIMyHandler类的实例、CallbackApiLongPollExecutor类的实例,并调用run()方法
$handler = new CallbackApiMyHandler(); $executor = new CallbackApiLongPollExecutor($vk, '{access_token}', '{$group_id}', $handler, '{$wait}'); $executor->listen();
'{wait}'是等待期。
在调用函数 listen() 时,您还可以指定想要接收数据的事件的编号。默认值是最后一个事件的编号。
示例
$executor = new CallbackApiLongPollExecutor($vk, $access_token, 159895463, $handler, 25); $executor->listen(12);