Задать вопрос

SOAP, PHP, как составить запрос?

Здравствуйте. С SOAP не работал. Почитал теорию, примерно понял, что к чему. Помогите составить запрос.

wsdl:
<xsd:element name="ZfmCrmLoyMshInf">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="IsCrd" type="tns:ZstCrdCrmLoyMshInfIn" minOccurs="0"/>
<xsd:element name="IsStore" type="tns:ZstStore" minOccurs="0"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="ZfmCrmLoyMshInfResponse">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="EsCrd" type="tns:ZstCrdCrmLoyMshInfOut"/>
<xsd:element name="EsDynAttr" type="tns:ZstDynAttr"/>
<xsd:element name="EsLp" type="tns:ZstLp"/>
<xsd:element name="EsMemb" type="tns:ZstMemb"/>
<xsd:element name="EsMsh" type="tns:ZstMshCrmLoyMshInfOut"/>
<xsd:element name="EtCampList" type="tns:ZttChar24"/>
<xsd:element name="EtErrorList" type="tns:ZttErrorList"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>


Подскажите "с самого начала", как составить запрос на wsdl и после получить ответ?

P.S. соединение создаю, оно работает.

UPD*!

Спасибо большое! Код работает, ноя не получаю ответа, из-за своей тупости, видимо. Нашел нужную мне функцию.
Подскажите, как понять, какие параметры она принимает, чтобы ей их передать?

UPD*2

<xsd:element name="ZfmCrmLoyMshInf">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="IsCrd" type="tns:ZstCrdCrmLoyMshInfIn" minOccurs="0"/>
<xsd:element name="IsStore" type="tns:ZstStore" minOccurs="0"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="ZfmCrmLoyMshInfResponse">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="EsCrd" type="tns:ZstCrdCrmLoyMshInfOut"/>
<xsd:element name="EsDynAttr" type="tns:ZstDynAttr"/>
<xsd:element name="EsLp" type="tns:ZstLp"/>
<xsd:element name="EsMemb" type="tns:ZstMemb"/>
<xsd:element name="EsMsh" type="tns:ZstMshCrmLoyMshInfOut"/>
<xsd:element name="EtCampList" type="tns:ZttChar24"/>
<xsd:element name="EtErrorList" type="tns:ZttErrorList"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>


<wsdl:operation name="ZfmCrmLoyMshInf">
<wsdl:input message="tns:ZfmCrmLoyMshInf"/>
<wsdl:output message="tns:ZfmCrmLoyMshInfResponse"/>
</wsdl:operation>



<wsdl:message name="ZfmCrmLoyMshInf">
<wsdl:part name="parameters" element="tns:ZfmCrmLoyMshInf"/>
</wsdl:message>
<wsdl:message name="ZfmCrmLoyMshInfResponse">
<wsdl:part name="parameter" element="tns:ZfmCrmLoyMshInfResponse"/>
</wsdl:message>


UPD*3

Вот такой запрос в SOAPUI работает:

Т.е. я передаю 1120000000001530, 0003

<soapenv:Body>
      <urn:ZfmCrmLoyMshInf>
         <!--Optional:-->
         <IsCrd>
            <ExtId>1120000000001530</ExtId>
         </IsCrd>
         <!--Optional:-->
         <IsStore>
            <Id>0003</Id>
         </IsStore>
      </urn:ZfmCrmLoyMshInf>
   </soapenv:Body>
</soapenv:Envelope>


Возвращает мне:

<soap-env:Header/>
   <soap-env:Body>
      <n0:ZfmCrmLoyMshInfResponse xmlns:n0="urn:sap-com:soap:functions:mc-style">
         <EsCrd>
            <ExtId>1120000000001530</ExtId>
            <Status>Активно</Status>
            <Estat>E0003</Estat>
            <CardValidFrom>2013-11-07</CardValidFrom>
            <CardValidTo>9999-12-31</CardValidTo>
         </EsCrd>
         <EsDynAttr>
            <Zsumofpurch>0</Zsumofpurch>
         </EsDynAttr>
         <EsLp>
            <Id>Zaratustra</Id>
            <Name>Программа</Name>
            <LoyType>B</LoyType>
         </EsLp>
         <EsMemb>
            <Id>3000023950</Id>
            <Birthdt>2013-02-29</Birthdt>
         </EsMemb>
         <EsMsh>
            <Guid>ACFanIPNHtOR9rGVA2en1Q==</Guid>
            <Status>Активно</Status>
            <Estat>E0002</Estat>
            <Tier>Базовый</Tier>
            <Etier>GBT0_BASE</Etier>
            <Balance>4000.0</Balance>
            <EmemsType>STDMEM</EmemsType>
            <MemsType>Участие в программе</MemsType>
         </EsMsh>
         <EtCampList/>
         <EtErrorList>
            <item>
               <RType>S</RType>
               <RId>ZCRM_LOY_MSH_INF</RId>
               <RNum>000</RNum>
               <RMessage>Информация успешно получена</RMessage>
            </item>
         </EtErrorList>
      </n0:ZfmCrmLoyMshInfResponse>
   </soap-env:Body>
</soap-env:Envelope>


В php выглядит так:

...
$request = $client->ZfmCrmLoyMshInf(1120000000001530, 0002);
echo $request->ZfmCrmLoyMshInfResponse->EsCrd;
...


Получаю:
Fatal error: Uncaught SoapFault exception

Я неправильно передаю параметры?! Подскажите, пожалуйста.
  • Вопрос задан
  • 4459 просмотров
Подписаться 4 Оценить Комментировать
Решения вопроса 1
ini_set('soap.wsdl_cache_enabled', '0'); 
ini_set('soap.wsdl_cache_ttl', '0'); 
try {
$client = new SoapClient("адрес wsdl", array('trace' => true));
$params = array(массив параметров);
				
$request = $client->Register($params); // делаем запрос, здесь Register это название функции в wsdl сервисе
$itog = $request->Result; // получаем запрос и присваиваем его переменной itog. Result это название поля которое отдаст wsdl
}
catch (SoapFault $exception) 
{
echo $exception->getMessage(); // ошибка если не ок
}

Примерно так) под ваш wsdl только пропишите всё
Чтобы узнать доступные функции их имена выполните
var_dump($client->__getFunctions());
А вот это
var_dump($client->__getTypes());
вернёт типы полей в сервисе
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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