Добрый день!
Прошу помочь мне в таком вопросе:
Написал простой веб-сервис, который возводит число в степень 2. (это просто для теста :)). Вот код:
[CODE]<?
if(!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true) die();
if(!CModule::IncludeModule("webservice") || !CModule::IncludeModule("iblock"))
return;
// наш новый класс наследуется от базового IWebService
class CMyserviceWS extends IWebService
{
function TestServise($INPUTPARAM)
{
$result = pow($INPUTPARAM, 2);
return Array("OUTPUTPARAM"=>$result);
}
function GetWebServiceDesc()
{
$wsdesc = new CWebServiceDesc();
$wsdesc->wsname = "bitrix.webservice.testservice"; // название сервиса
$wsdesc->wsclassname = "CMyserviceWS"; // название класса
$wsdesc->wsdlauto = true;
$wsdesc->wsendpoint = CWebService::GetDefaultEndpoint();
$wsdesc->wstargetns = CWebService::GetDefaultTargetNS();
$wsdesc->classTypes = array();
$wsdesc->structTypes = Array();
$wsdesc->classes = array(
"CMyserviceWS"=> array(
"TestServise" => array(
"type" => "public",
"input" => array(
"INPUTPARAM" => array("varType" => "integer"),
),
"output" => array(
"OUTPUTPARAM" => array("varType" => "integer")
),
"httpauth" => "Y"
),
)
);
return $wsdesc;
}
}
$arParams["WEBSERVICE_NAME"] = "bitrix.webservice.testservice";
$arParams["WEBSERVICE_CLASS"] = "CMyserviceWS";
$arParams["WEBSERVICE_MODULE"] = "";
// передаем в компонент описание веб-сервиса
$APPLICATION->IncludeComponent(
"bitrix:webservice.server",
"",
$arParams
);
die();
?>
[/CODE]Так он доступен для всех и его можно посмотреть здесь: [url=http://ssit.com.ua/testservice/?class=CMyserviceWS&op=TestServise]http://ssit.com.ua/testservice/?class=CMyserviceWS&op=TestServise[/url]
Но хотелось бы сделать его доступным только для пользователей сайта. Пробовал модифицировать функцию [B]TestServise[/B] так:
[CODE] function TestServise($INPUTPARAM)
{
if (!$GLOBALS["USER"]->RequiredHTTPAuthBasic()) {
return new CSOAPFault('Server Error', 'Unable to authorize user.');
}
$result = pow($INPUTPARAM, 2);
return Array("OUTPUTPARAM"=>$result);
}
[/CODE]Теперь после ввода числа и нажатия кнопки "Запуск" выскакивает окошко для ввода логина/пароля (вроде как и должно быть). Но после их (логина и пароля) ввода расчета не происходит, а снова выскакивает то же окно для авторизации... :(
Что я делаю не так? Или веб-сервис с авторизацией не так делается? Очень мало документации по данному вопросу, поэтому прошу помощи...
Прошу помочь мне в таком вопросе:
Написал простой веб-сервис, который возводит число в степень 2. (это просто для теста :)). Вот код:
[CODE]<?
if(!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true) die();
if(!CModule::IncludeModule("webservice") || !CModule::IncludeModule("iblock"))
return;
// наш новый класс наследуется от базового IWebService
class CMyserviceWS extends IWebService
{
function TestServise($INPUTPARAM)
{
$result = pow($INPUTPARAM, 2);
return Array("OUTPUTPARAM"=>$result);
}
function GetWebServiceDesc()
{
$wsdesc = new CWebServiceDesc();
$wsdesc->wsname = "bitrix.webservice.testservice"; // название сервиса
$wsdesc->wsclassname = "CMyserviceWS"; // название класса
$wsdesc->wsdlauto = true;
$wsdesc->wsendpoint = CWebService::GetDefaultEndpoint();
$wsdesc->wstargetns = CWebService::GetDefaultTargetNS();
$wsdesc->classTypes = array();
$wsdesc->structTypes = Array();
$wsdesc->classes = array(
"CMyserviceWS"=> array(
"TestServise" => array(
"type" => "public",
"input" => array(
"INPUTPARAM" => array("varType" => "integer"),
),
"output" => array(
"OUTPUTPARAM" => array("varType" => "integer")
),
"httpauth" => "Y"
),
)
);
return $wsdesc;
}
}
$arParams["WEBSERVICE_NAME"] = "bitrix.webservice.testservice";
$arParams["WEBSERVICE_CLASS"] = "CMyserviceWS";
$arParams["WEBSERVICE_MODULE"] = "";
// передаем в компонент описание веб-сервиса
$APPLICATION->IncludeComponent(
"bitrix:webservice.server",
"",
$arParams
);
die();
?>
[/CODE]Так он доступен для всех и его можно посмотреть здесь: [url=http://ssit.com.ua/testservice/?class=CMyserviceWS&op=TestServise]http://ssit.com.ua/testservice/?class=CMyserviceWS&op=TestServise[/url]
Но хотелось бы сделать его доступным только для пользователей сайта. Пробовал модифицировать функцию [B]TestServise[/B] так:
[CODE] function TestServise($INPUTPARAM)
{
if (!$GLOBALS["USER"]->RequiredHTTPAuthBasic()) {
return new CSOAPFault('Server Error', 'Unable to authorize user.');
}
$result = pow($INPUTPARAM, 2);
return Array("OUTPUTPARAM"=>$result);
}
[/CODE]Теперь после ввода числа и нажатия кнопки "Запуск" выскакивает окошко для ввода логина/пароля (вроде как и должно быть). Но после их (логина и пароля) ввода расчета не происходит, а снова выскакивает то же окно для авторизации... :(
Что я делаю не так? Или веб-сервис с авторизацией не так делается? Очень мало документации по данному вопросу, поэтому прошу помощи...