rusld
@rusld
API, Blockchain, Go

Почему Client API ВК не дает прав доступа для методов с ключом доступа сообщества?

В приложении ВКонтакте для сообщества пытаюсь вызвать методы, которые помечены как доступные с ключом доступа для группы. По документации я должен вызвать метод запроса прав доступа с помощью метода Client API, а затем сам вызов метода VK API:

VK.init(function() {
	$('#item_addserver').on('click', function() {
		// Запрашиваем права доступа
		accessGroup();
	});
});

function accessGroup() {
	VK.callMethod("showGroupSettingsBox", 262144);
	VK.addCallback('onGroupSettingsChanged', function(){ 
		//alert("Успешно"); 
		// Получаем информацию о серверах в группе
		showServers();
	});

	VK.addCallback('onGroupSettingsCancel', function(){ 
		alert("Отказ в доступе"); 
	});
}

function showServers() {
	VK.api("groups.enableOnline", 
	{
		"group_id": the_group_id,
		"v": the_version,
		"test_mode": the_test_mode
	}, 
	function (data) {
		var res = JSON.stringify(data);
		alert(res); 
	});
}


Запрос прав появляется, нажимаю, успешно, происходит вызов groups.enableOnline (или подобной) и тут jошибка доступа:

5c09191fbd708358231361.png

У меня только предположение, что из-за test_mode=1, но в документации где то видел, что можно вызывать, в тестовом.
  • Вопрос задан
  • 541 просмотр
Решения вопроса 1
rusld
@rusld Автор вопроса
API, Blockchain, Go
Вообщем решение такое нашел. И как бы даже более логично чем мой первый план по организации запроса к апи ВК. Я изначально предполагал, что после разрешения прав доступа на группу администратором, токен доступа от имени группы возвращается и сохраняется где нибудь в Client API, и таким образом при вызове функций его требующих, подставляется автоматически. Но мои ванильные мечты потерпели фиаско. После получения ключа его нужно пустить в дело, путем передачи на сервер, с которого запущено приложение, а там уже вызывать метода VK API:
Client (JS):
VK.init(function() {
  $('#item_addserver').on('click', function() {
    // Запрашиваем права доступа
    accessGroup();
  });
});

function accessGroup() {
  VK.callMethod("showGroupSettingsBox", 262144);
  VK.addCallback('onGroupSettingsChanged', function(settings, grp_token){ 
		addServer(grp_token); 
	});

  VK.addCallback('onGroupSettingsCancel', function(){ 
    alert("Отказ в доступе"); 
  });
}

// Добавление сервера
function addServer(gtoken) {
	$.get('https://mymo.info/api.php', 
		{
			"viewer_id": the_viewer_id,
			"secret": the_secret,
			"method": "add_server",
			"group_access_token": gtoken,
			"group_id": the_group_id
		},
		function(data) {
			alert('addserver: ' + data);
		});
}


Сервер (PHP):

// ... дополнительная обработка подключений к своему API
/* создает новый сервер */
	function add_server() {
		//print_r($_GET);
		$access_token = clearStr($_GET['group_access_token']);
		$group_id = clearInt($_GET['group_id']);
		
		//print "$group_id\n$access_token";
		
		$api_params = array(
			"group_id" => $group_id,
			"access_token" => $access_token,
			"v" => VK_API_VERSION
		);
		
		$get_query_string = http_build_query($api_params);
		$api_request = 'https://api.vk.com/method/groups.getCallbackServers?'.$get_query_string;
		
		//print $get_query_string;
		
		$api_result = file_get_contents($api_request);
		
		print $api_result;
	}


Вот теперь работает :)
5c0944e3cf23a677455306.png
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы