[Hybridauth] добавление провайдера battle.net

Всем привет!
Пытаюсь добавить нового провайдера в Hybridauth, но что-то не получается.

Создал в каталоге core/components/hybridauth/model/hybridauth/lib/Providers/ файл BattleNet.php с таким содержимым.

<?php
class Hybrid_Providers_BattleNet extends Hybrid_Provider_Model_OAuth2
{
	// default permissions
	public $scope = "wow.profile";
	public $state = "";

	function initialize()
	{
		parent::initialize();

		// Provider api end-points
		$this->api->authorize_url  = "https://eu.battle.net/oauth/authorize";
		$this->api->token_url      = "https://eu.battle.net/oauth/token";
		$this->state = bin2hex(openssl_random_pseudo_bytes(16));
		if (!empty($this->config['fields']))
			$this->fields = $this->config['fields'];
	}
	
	function loginBegin()
	{
		Hybrid_Auth::redirect( $this->api->authorizeUrl( array( "scope" => $this->scope, "state" => $this->state ) ) ); 
	}
}
На dev.battle.net создал приложение, где получил client_id и client_secret, добавил в системные настройки нового провайдера.

Теперь при попытке привязать учетку, в этом методе, в переменной response получаю ошибку:

{"error":"unauthorized","error_description":"An Authentication object was not found in the SecurityContext"}
Не могу понять почему не удается получить access token. Прошу помощи, может кто сталкивался с подобным или может уже подключал battle.net =)
Николай Загумённов
18 ноября 2016, 13:36
modx.pro
1
1 725
0
Поблагодарить автора Отправить деньги

Комментарии: 2

Алексей Ерохин
18 ноября 2016, 17:25
+1
Судя по всему дело в этом
To request access tokens, you need to provide the following POST parameters to the token URI, using your client ID and secret with HTTP Basic Authorization
нужно передать авторизацию в заголовках
а battle.net принимает client_secret и client_id из заголовков запроса
curl_setopt($ch,CURLOPT_HTTPHEADER,'Authorization: Basic ' . base64_encode($this->client_id .  ':' . $this->client_secret);
github.com/bezumkin/modx-hybridauth/blob/master/core/components/hybridauth/model/hybridauth/lib/thirdparty/OAuth/OAuth2Client.php#L34
github.com/bezumkin/modx-hybridauth/blob/master/core/components/hybridauth/model/hybridauth/lib/thirdparty/OAuth/OAuth2Client.php#L211

По идее надо сделать так в BattleNet.php:

function initialize()
	{
		parent::initialize();

		// Provider api end-points
		$this->api->authorize_url  = "https://eu.battle.net/oauth/authorize";
		$this->api->token_url      = "https://eu.battle.net/oauth/token";
               $this->api->curl_header      = array('Authorization: Basic ' . base64_encode($this->client_id .  ':' . $this->client_secret);
		$this->state = bin2hex(openssl_random_pseudo_bytes(16));
		if (!empty($this->config['fields']))
			$this->fields = $this->config['fields'];
	}
    Николай Загумённов
    18 ноября 2016, 20:09
    0
    Большое спасибо за помощь! Токен получен!

    Буду дальше разбираться.

    Это добавил в initialize():

    $this->api->curl_header = array('Authorization: Basic ' . base64_encode($this->api->client_id .  ':' . $this->api->client_secret));
    Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
    2