vk/php-sdk

VK SDK for PHP

v1.0 2018-01-30 12:13 UTC

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');

您将得到一个包含serverphotohash字段的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);