За последние 24 часа нас посетили 17580 программистов и 1718 роботов. Сейчас ищут 850 программистов ...

SOAP: метод __soapCall - как сформировать параметры

Тема в разделе "Прочие вопросы по PHP", создана пользователем snoggl, 2 дек 2008.

  1. snoggl

    snoggl Активный пользователь

    С нами с:
    18 ноя 2006
    Сообщения:
    41
    Симпатии:
    0
    Адрес:
    СПб
    надо вызвать soap функцию, у которой два параметра.

    xml документ запроса примерно выглядит так:

    <?xml version="1.0" encoding="UTF-8"?>
    <SOAP-ENV:Envelope xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"
    SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
    xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance"
    xmlns:xsd="http://www.w3.org/1999/XMLSchema">
    <SOAP-ENV:Body>
    <namesp1:addSubscriber xmlns:namesp1="http://webservices.ms.vocaltec.com">
    <credential>
    <role>ADMINISTRATOR</role>
    <userame>admin</userName>
    <userPassword>admin123</userPassword>
    <vpn>root</vpn>
    </credential>
    <subscriber>
    <userId>sippNat10_mh</userId>
    <password>1</password>
    <vpnName>GammaVpn</vpnName>
    <classOfServiceName>GammaCos</classOfServiceName>
    <status>active</status>
    <firstName>sippNat10_mh</firstName>
    <lastName>sippNat10_mh</lastName>
    <emailAddress>sippNat10_mh@vocaltec.com</emailAddress>
    <countryCode>19</countryCode>
    <areaCode>2</areaCode>
    <phoneNumber>9702588</phoneNumber>
    <intlAccessCode>00</intlAccessCode>
    <areaAccessCode>0</areaAccessCode>
    <enterpriseExtension>288</enterpriseExtension>
    <enterpriseLocationAccessCode>22</enterpriseLocationAccessCode>
    <enterpriseCostCenter xsi:null="1"/>
    <enterpriseDialAS>DialAsE164</enterpriseDialAS>
    <enterpriseKeepDialedNumber>false</enterpriseKeepDialedNumber>
    <enterpriseGatewayIP/>
    <sipDevice>false</sipDevice>
    </subscriber>
    </namesp1:addSubscriber>
    </SOAP-ENV:Body>
    </SOAP-ENV:Envelope>


    пишу код на php:

    $client = new
    SoapClient(
    "https://11.11.11.111/provisioning/services/BaxProvisioning?wsdl",
    array( "trace" => true)
    );


    $role = "ADMINISTRATOR";
    $userName = "ThreeWay";
    $userPassword = "1111111";
    $vpn = "ThreeWay";

    $userId = 'sippNat10_mh';
    $password = 1;
    $vpnName = 'GammaVpn';
    $classOfServiceName = 'Test';
    $status = 'active';
    $firstName = 'sippNat10_mh';
    $lastName = 'sippNat10_mh';
    $emailAddress = [email='sippNat10_mh@vocaltec.com]'sippNat10_mh@vocaltec.com[/email]';
    $countryCode = 19;
    $areaCode = 2;
    $phoneNumber = '9702588';
    $intlAccessCode = '00';
    $areaAccessCode = 0;
    $enterpriseExtension = 288;
    $enterpriseLocationAccessCode = 22;
    $enterpriseCostCenter = "1";
    $enterpriseDialAS = 'DialAsE164';
    $enterpriseKeepDialedNumber = 'false';
    $enterpriseGatewayIP = '';
    $sipDevice = 'false';


    //### создаем переменные функции
    $credential = array(
    'role' => "ADMINISTRATOR",
    'userName' => "ThreeWay",
    'userPassword' => "RidFWHuV",
    'vpn' => "ThreeWay"
    );

    $subscriber = array(
    'userId' => 'sippNat10_mh',
    'password' => 1,
    'vpnName' => 'GammaVpn',
    'classOfServiceName' => 'Test',
    'status' => 'active',
    'firstName' => 'sippNat10_mh',
    'lastName' => 'sippNat10_mh',
    'emailAddress' => [email='sippNat10_mh@vocaltec.com]'sippNat10_mh@vocaltec.com[/email]',
    'countryCode' => 19,
    'areaCode' => 2,
    'phoneNumber' => '9702588',
    'intlAccessCode' => '00',
    'areaAccessCode' => 0,
    'enterpriseExtension' => 288,
    'enterpriseLocationAccessCode' => 22,
    'enterpriseCostCenter' => "1",
    'enterpriseDialAS' => 'DialAsE164',
    'enterpriseKeepDialedNumber' => 'false',
    'enterpriseGatewayIP' => '',
    'sipDevice' => 'false'
    );

    //### запускаем функцию
    try {

    $client->__soapCall("addSubscriber", array(
    'credential' => $credential,
    'subscriber' => $subscriber)

    );


    print "Запрос :<br>".htmlspecialchars($client->__getLastRequest()) ."<br>";
    print "Ответ:<br>".htmlspecialchars($client->__getLastResponse())."<br>";

    }
    catch (SoapFault $fault) {
    print"Error: SOAP Fault (faultcode:".$fault->faultcode." _________ faultstring: ".$fault->faultstring.')
    E_USER_ERROR='.E_USER_ERROR.'<br>';
    }



    При запуске пишется ошибка:


    SOAP Fault (faultcode:Client _________ faultstring: SOAP-ERROR: Encoding: object hasn't 'credential' property) E_USER_ERROR=256



    Я думаю, что при вызове метода
    $client->__soapCall("addSubscriber", array(
    'credential' => $credential,
    'subscriber' => $subscriber)

    );

    я не правильно передаю параметры.

    Понимаю, вопрос сложный, кто может - подскажите хотя бы, в каком направлении копать.

    Буду очень благодарен.
     
  2. Eris

    Eris Активный пользователь

    С нами с:
    4 дек 2008
    Сообщения:
    2
    Симпатии:
    0
    Насколько я знаю, параметры функции нужно передавать обычным массивом, а не ассоциативным:

    $client->__soapCall("addSubscriber", array($credential, $subscriber));

    Если это не поможет, покажи всдл файл
     
  3. snoggl

    snoggl Активный пользователь

    С нами с:
    18 ноя 2006
    Сообщения:
    41
    Симпатии:
    0
    Адрес:
    СПб
    если пишу так:

    $client->__soapCall("addSubscriber", array($credential, $subscriber));


    то ошибка та же:

    Error: SOAP Fault (faultcode:Client
    faultstring: SOAP-ERROR: Encoding: object hasn't 'credential' property) E_USER_ERROR=256



    на счет показать wsdl - в текст вложить? так он большой, а ссылку дать - не откроется


    Но у меня функция заработала, я ее по другому записал:


    $g = $client->getSubscriberByName(
    array( 'credential' => $credential,
    'subscriber' => $subscriber));


    Вот только в мануале такой способ не рекомендуется, интересно, чем это может в дальнейшем грозить?