Проблемы с форматированием данных клиента PHP SOAP - PullRequest
1 голос
/ 23 января 2012

Я пытаюсь отформатировать SOAP-запрос с помощью PHP. Если я выполню следующий запрос через SOAPUI, я получу правильные результаты:

  <urn:getCallInfoSearch>
     <UserInfo>
        <UserID>USERID</UserID>
        <Password>PASS</Password>
        <SvcrAcct>USERID</SvcrAcct>
     </UserInfo>
     <FromDateTime>12/10/2011 12:00:00</FromDateTime>
     <ToDateTime>12/30/2011 12:00:00</ToDateTime>
  </urn:getCallInfoSearch>

Я пытаюсь отформатировать его в PHP с помощью SoapClient следующим образом:

$getCallInfoSearch = array(
    'UserInfo'      => array('UserId' => 'USERID', 'Password' => 'PASS', 'SvcrAcct' => 'USERID'),
    'FromDateTime'  => '12/10/2011 12:00:00',
    'ToDateTime'    => '12/30/2011 12:00:00',
);
$client->getCallInfo($getCallInfoSearch);

И я получаю ответ от сервера, что «UserID не может быть нулевым или пустым». Есть ли какая-то причина, по которой массив не будет преобразован именно в функциональный запрос от SoapUI?

WSDL определяет getCallInfoSearch следующим образом:

<complexType name="getCallInfoSearch">
<sequence>
<element name="UserInfo" nillable="true" type="impl:UserInfo"/>
<element name="FromDateTime" nillable="true" type="xsd:string"/>
<element name="ToDateTime" nillable="true" type="xsd:string"/>
</sequence>
</complexType>

И UserInfo:

<complexType name="UserInfo">
<sequence>
<element name="UserID" nillable="true" type="xsd:string"/>
<element name="Password" nillable="true" type="xsd:string"/>
<element name="SvcrAcct" nillable="true" type="xsd:string"/>
</sequence>
</complexType>

Обновление, я также попытался построить запрос со стандартными классами следующим образом, и я все еще получаю тот же результат:

$getCallInfoSearch = new stdclass();
$getCallInfoSearch->UserInfo = new stdclass();
$getCallInfoSearch->UserInfo->UserId    = 'USERID';
$getCallInfoSearch->UserInfo->Password  = 'PASS';
$getCallInfoSearch->UserInfo->SvcrAcct  = 'USERID';
$getCallInfoSearch->FromDateTime = '12/10/2011 12:00:00';
$getCallInfoSearch->ToDateTime = '12/30/2011 12:00:00';

ОБНОВЛЕНИЕ 2: Любое из этих решений работает правильно (опубликовано выше). Проблема всегда была чувствительностью к регистру. Идентификатор пользователя против идентификатора пользователя.

1 Ответ

2 голосов
/ 23 января 2012

Просто предположение, но "UserID"! = "UserId":

Попробуйте это:

$getCallInfoSearch = array(
    'UserInfo'      => array('UserID' => 'USERID', 'Password' => 'PASS', 'SvcrAcct' => 'USERID'),
    'FromDateTime'  => '12/10/2011 12:00:00',
    'ToDateTime'    => '12/30/2011 12:00:00',
);
$client->getCallInfo($getCallInfoSearch);
...