UPD to php 8.4

This commit is contained in:
2025-01-11 01:36:15 +03:00
parent 7f917ed0cb
commit 99d4587b3b
6 changed files with 233 additions and 164 deletions

View File

@@ -1,5 +1,7 @@
<?php
declare(strict_types=1);
namespace Sept\OAuth2\Client\Provider;
use League\OAuth2\Client\Provider\AbstractProvider;
@@ -9,10 +11,10 @@ use Psr\Http\Message\ResponseInterface;
class VkProvider extends AbstractProvider
{
protected $baseOAuthUri = 'https://oauth.vk.com';
protected $baseUri = 'https://api.vk.com/method';
protected $version = '5.236';
protected $language = null;
protected string $baseOAuthUri = 'https://oauth.vk.com';
protected string $baseUri = 'https://api.vk.com/method';
protected float $version = 5.199;
protected ?string $language = null;
/**
* @see https://vk.com/dev/permissions
@@ -21,26 +23,26 @@ class VkProvider extends AbstractProvider
'email',
// 'friends',
// 'offline',
//'photos',
//'wall',
//'ads',
//'audio',
//'docs',
//'groups',
//'market',
//'messages',
//'nohttps',
//'notes',
//'notifications',
//'notify',
//'pages',
//'stats',
//'status',
//'video',
// 'photos',
// 'wall',
// 'ads',
// 'audio',
// 'docs',
// 'groups',
// 'market',
// 'messages',
// 'nohttps',
// 'notes',
// 'notifications',
// 'notify',
// 'pages',
// 'stats',
// 'status',
// 'video',
];
/**
* @type array
* @see https://new.vk.com/dev/fields
* @see https://new.vk.com/dev/fields
*/
public array $userFields = [
'bdate',
@@ -60,63 +62,62 @@ class VkProvider extends AbstractProvider
'photo_max_orig',
'screen_name',
'sex',
//'about',
//'activities',
//'blacklisted',
//'blacklisted_by_me',
//'books',
//'can_post',
//'can_see_all_posts',
//'can_see_audio',
//'can_send_friend_request',
//'can_write_private_message',
//'career',
//'common_count',
//'connections',
//'contacts',
//'crop_photo',
//'counters',
//'deactivated',
//'education',
//'exports',
//'followers_count',
//'games',
//'has_mobile',
//'hidden',
//'interests',
//'is_favorite',
//'is_hidden_from_feed',
//'last_seen',
//'military',
//'movies',
//'occupation',
//'online',
//'personal',
//'photo_100',
//'photo_200',
//'photo_200_orig',
//'photo_400_orig',
//'photo_50',
//'photo_id',
//'quotes',
//'relation',
//'relatives',
//'schools',
//'site',
//'status',
//'timezone',
//'tv',
//'universities',
//'verified',
//'wall_comments',
'deactivated',
'is_closed',
// 'about',
// 'activities',
// 'blacklisted',
// 'blacklisted_by_me',
// 'books',
// 'can_post',
// 'can_see_all_posts',
// 'can_see_audio',
// 'can_send_friend_request',
// 'can_write_private_message',
// 'career',
// 'common_count',
// 'connections',
// 'contacts',
// 'crop_photo',
// 'counters',
// 'deactivated',
// 'education',
// 'exports',
// 'followers_count',
// 'games',
// 'has_mobile',
// 'hidden',
// 'interests',
// 'is_favorite',
// 'is_hidden_from_feed',
// 'last_seen',
// 'military',
// 'movies',
// 'occupation',
// 'online',
// 'personal',
// 'photo_100',
// 'photo_200',
// 'photo_200_orig',
// 'photo_400_orig',
// 'photo_50',
// 'photo_id',
// 'quotes',
// 'relation',
// 'relatives',
// 'schools',
// 'site',
// 'status',
// 'timezone',
// 'tv',
// 'universities',
// 'verified',
// 'wall_comments',
];
/**
* @param string $language
*/
public function setLanguage(string $language): self
{
$this->language = (string)$language;
$this->language = $language;
return $this;
}
@@ -130,21 +131,21 @@ class VkProvider extends AbstractProvider
{
return "$this->baseOAuthUri/access_token";
}
public function getResourceOwnerDetailsUrl(AccessToken $token): string
{
$params = [
'fields' => $this->userFields,
'fields' => $this->userFields,
'access_token' => $token->getToken(),
'v' => $this->version,
'lang' => $this->language
'v' => $this->version,
'lang' => $this->language,
];
$query = $this->buildQueryString($params);
$url = "$this->baseUri/users.get?$query";
$query = $this->buildQueryString($params);
$url = "$this->baseUri/users.get?$query";
return $url;
}
protected function getDefaultScopes(): array
{
return $this->scopes;
@@ -157,14 +158,15 @@ class VkProvider extends AbstractProvider
$contentTypeArray = explode(';', reset($contentTypeRaw));
$contentType = reset($contentTypeArray);
// Response info
$responseCode = $response->getStatusCode();
$responseCode = $response->getStatusCode();
$responseMessage = $response->getReasonPhrase();
// Data info
$error = !empty($data['error']) ? $data['error'] : null;
$errorCode = !empty($error['error_code']) ? $error['error_code'] : $responseCode;
$error = !empty($data['error']) ? $data['error'] : null;
$errorCode = !empty($error['error_code']) ? $error['error_code'] : $responseCode;
$errorDescription = !empty($data['error_description']) ? $data['error_description'] : null;
$errorMessage = !empty($error['error_msg']) ? $error['error_msg'] : $errorDescription;
$message = $errorMessage ?: $responseMessage;
$errorMessage = !empty($error['error_msg']) ? $error['error_msg'] : $errorDescription;
$message = (bool) $errorMessage ? $errorMessage : $responseMessage;
// Request/meta validation
if (399 < $responseCode) {
@@ -172,89 +174,93 @@ class VkProvider extends AbstractProvider
}
// Content validation
if ('application/json' != $contentType) {
if ('application/json' !== $contentType) {
throw new IdentityProviderException($message, $responseCode, $data);
}
if ($error) {
throw new IdentityProviderException($errorMessage, $errorCode, $data);
}
}
protected function createResourceOwner(array $response, AccessToken $token): VkUser
{
$response = reset($response['response']);
$response = reset($response['response']);
$additional = $token->getValues();
if (!empty($additional['email'])) {
$response['email'] = $additional['email'];
}
if (!empty($response['uid']) && 4 === floor($this->version)) {
if (!empty($response['uid']) && 4 === (int) floor($this->version)) {
$response['id'] = $response['uid'];
}
if (!empty($additional['user_id'])) {
$response['id'] = $additional['user_id'];
}
return new VkUser($response, $response['id']);
return new VkUser($response);
}
/**
* Возвращает массив объектов пользователей.
*
* @see https://vk.com/dev/users.get
*
* @param integer[] $ids
* @param AccessToken|null $token Current user if empty
* @param array $params
*
* @return User[]
*/
public function usersGet(array $ids = [], AccessToken $token = null, array $params = []): array
public function usersGet(array $ids = [], ?AccessToken $token = null, array $params = []): array
{
if (empty($ids) && !$token) {
if (empty($ids) && null === $token) {
throw new \InvalidArgumentException('Some of parameters usersIds OR access_token are required');
}
$default = [
'user_ids' => implode(',', $ids),
'fields' => $this->userFields,
'access_token' => $token ? $token->getToken() : null,
'v' => $this->version,
'lang' => $this->language
'user_ids' => implode(',', $ids),
'fields' => $this->userFields,
'access_token' => null !== $token ? $token->getToken() : null,
'v' => $this->version,
'lang' => $this->language,
];
$params = array_merge($default, $params);
$query = $this->buildQueryString($params);
$url = "$this->baseUri/users.get?$query";
$response = $this->getResponse($this->createRequest(static::METHOD_GET, $url, $token, []))['response'];
$users = !empty($response['items']) ? $response['items'] : $response;
$array2user = function ($userData) {
$params = array_merge($default, $params);
$query = $this->buildQueryString($params);
$url = "$this->baseUri/users.get?$query";
$response = $this->getResponse($this->createRequest(static::METHOD_GET, $url, $token, []))['response'];
$users = !empty($response['items']) ? $response['items'] : $response;
$array2user = function (mixed $userData) {
return new VkUser($userData);
};
return array_map($array2user, $users);
}
/**
* Возвращает список идентификаторов (id) друзей пользователя,
* если параметр fields не использовался. При использовании
* параметра fields возвращает список объектов пользователей,
* но не более 5000.
*
* @see https://vk.com/dev/friends.get
*
* @param integer $userId
* @param AccessToken|null $token
* @param array $params
*
* @return User[]
*/
public function friendsGet($userId, AccessToken $token = null, array $params = []): array
public function friendsGet(int $userId, ?AccessToken $token = null, array $params = []): array
{
$default = [
'user_id' => $userId,
'fields' => $this->userFields,
'access_token' => $token ? $token->getToken() : null,
'v' => $this->version,
'lang' => $this->language
'user_id' => $userId,
'fields' => $this->userFields,
'access_token' => null !== $token ? $token->getToken() : null,
'v' => $this->version,
'lang' => $this->language,
];
$params = array_merge($default, $params);
$query = $this->buildQueryString($params);
$url = "$this->baseUri/friends.get?$query";
$response = $this->getResponse($this->createRequest(static::METHOD_GET, $url, $token, []))['response'];
$friends = !empty($response['items']) ? $response['items'] : $response;
$array2friend = function ($friendData) {
$params = array_merge($default, $params);
$query = $this->buildQueryString($params);
$url = "$this->baseUri/friends.get?$query";
$response = $this->getResponse($this->createRequest(static::METHOD_GET, $url, $token, []))['response'];
$friends = !empty($response['items']) ? $response['items'] : $response;
$array2friend = function (mixed $friendData) {
if (is_numeric($friendData)) {
$friendData = ['id' => $friendData];
}