Добро пожаловать на сайт <БагБД>, где вы можете задавать вопросы о программировании и разработке на Битрикс и Битрикс24, и получать быстрые и квалифицированные ответы от профессионалов!

web-сервис с авторизацией пользователя

00 голосов
3
Добрый день!
Прошу помочь мне в таком вопросе:
Написал простой веб-сервис, который возводит число в степень 2. (это просто для теста smile:)). Вот код:
Код
<?
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();
?>
 
Так он доступен для всех и его можно посмотреть здесь: http://ssit.com.ua/testservice/?class=CMyserviceWS&op=TestServise

Но хотелось бы сделать его доступным только для пользователей сайта. Пробовал модифицировать функцию  TestServise так:
Код
 function TestServise($INPUTPARAM)
{
   
   if (!$GLOBALS["USER"]->RequiredHTTPAuthBasic()) {
       return new CSOAPFault('Server Error', 'Unable to authorize user.'); 
   }
       
   $result = pow($INPUTPARAM, 2);
   
   return Array("OUTPUTPARAM"=>$result);   

}
 
Теперь после ввода числа и нажатия кнопки "Запуск" выскакивает окошко для ввода логина/пароля (вроде как и должно быть). Но после их (логина и пароля) ввода расчета не происходит, а снова выскакивает то же окно для авторизации... smile:(
Что я делаю не так? Или веб-сервис с авторизацией не так делается? Очень мало документации по данному вопросу, поэтому прошу помощи...
спросил 12 Янв, 14 от W1Ng (540 баллов)

3 Ответы

00 голосов
Я бы тупо выставил права на сам раздел /testservice/
ответил 25 Апр, 14 от Ly (4,580 баллов)
00 голосов
Ну с авторизацией можно немного подождать, а вот возникла другая проблема:
Создавая вэб-сервис, смотрел пример описанный здесь, но обращаюсь к нему из 1С. Сначала возникла проблема с ссылкой при попытке определения вэб-сервиса. Писал: 
Код
Определение = Новый WSОпределения("http://ssit.com.ua/testservice/?wsdl");

 
Возникла ошибка разбора XML. Сменил на: 
Код
Определение = Новый WSОпределения("http://ssit.com.ua/testservice/index.php?wsdl");

 
Все заработало, но при попытке создать WSПрокси
Код
Прокси = Новый WSПрокси(Определение, "http://ssit.com.ua/testservice/", "bitrix.webservice.testservice", "CMyserviceWSSoap");
 

получаю сообщение, что

Цитата
 Сервис не найден. {http://ssit.com.ua/testservice/}:bitrix.webservice.testservice  

В чем может быть дело - ума не приложу. На блоге (ссылка выше) написано, что указывать адрес к странице с компонентом, так вроде и указал... Может кто сталкивался с такой задачей, прошу помощи!
ответил 20 Авг, 14 от W1Ng (540 баллов)
00 голосов
Все. Решилось. Надо было так указать: 
Код
Прокси = Новый WSПрокси(Определение, "http://ssit.com.ua/", "bitrix.webservice.testservice", "CMyserviceWSSoap");
 
ответил 25 Дек, 14 от W1Ng (540 баллов)

Похожие вопросы

0 голосов
2 ответов
спросил 27 Янв, 14 от ADAHOC (100 баллов)
0 голосов
0 ответов
спросил 29 Авг, 13 от Ragadar (120 баллов)
0 голосов
5 ответов
спросил 12 Дек, 13 от 666KREVED (760 баллов)