xml — php | отправить набор данных через мыло

Привет мне нужно создать запрос на отправку этих данных с помощью php мыла запроса. Какой правильный формат для этого?

        <?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<soap:Body>
<GetVouTrans xmlns="http://tempuri.org/">
<VoucherRequest>
<xs:schema id="NewDataSet" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xs:element name="NewDataSet" msdata:IsDataSet="true" msdata:UseCurrentLocale="true">
<xs:complexType>
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element name="kritiria">
<xs:complexType>
<xs:sequence>
<xs:element name="type" type="xs:short" minOccurs="0" />
<xs:element name="voucher" type="xs:string" minOccurs="0" />
<xs:element name="customer" type="xs:string" minOccurs="0" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:choice>
</xs:complexType>
</xs:element>
</xs:schema>
<diffgr:diffgram xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" xmlns:diffgr="urn:schemas-microsoft-com:xml-diffgram-v1">
<NewDataSet xmlns="">
<kritiria diffgr:id="kritiria1" msdata:rowOrder="0">
<type>0</type>
<voucher>012345678</voucher>
<customer>pexpor213</customer>
</kritiria>
</NewDataSet>
</diffgr:diffgram>
</VoucherRequest>
</GetVouTrans>
</soap:Body>
</soap:Envelope>

Как я могу отправить набор данных через мыло с php?

Я отправляю запрос, но он отвечает мне по вине. он думает, что я не отправляю значения набора данных правильным образом:

            $faulty = 'Fault method';
$wsdl = "http://www.speedex.gr/getvoutrans/GetVouTrans.asmx?WSDL";
$soapClient = new SoapClient($wsdl,
array(
'trace' => true,
'use' => SOAP_LITERAL,
'style' => SOAP_DOCUMENT,
)
);
$parm = array();
$parm[] = new SoapVar('0', XSD_SHORT, null, null, 'type' );
$parm[] = new SoapVar('010658696378', XSD_STRING, null, null, 'voucher' );
$parm[] = new SoapVar('ΠΕ145031', XSD_STRING, null, null, 'customer' );

try {
$resp = $soapClient->GetVouTrans( new SoapVar($parm, SOAP_ENC_OBJECT) );
print_r ("REQUEST:\n" . htmlentities($soapClient->__getLastRequest()) . "\n");
print_r ("RESPONSE:\n" . htmlentities($soapClient->__getLastResponse()) . "\n");
} catch (SoapFault $e) {
echo $faulty;
return false;
}

1

Решение

Правильный путь — использовать библиотеку. Здесь все написано http://php.net/manual/en/book.soap.php

РЕДАКТИРОВАТЬ:
Я немного углубился в это (я не специалист по SOAP, так как я не использую его часто или не нравится). Однако используемый вами файл wsdl не указывает ни один из используемых вами параметров. На самом деле вы должны быть в состоянии использовать вызов как:

$soapClient->GetVouTrans(0, '010658696378', 'ΠΕ145031' );
// order is important, as WSDL states it. But it doesn't so this call for this web service is not valid.

Далее никогда не видел документов и нашел здесь несколько: http://www.speedex.gr/getvoutrans/getvoutrans.asmx?op=GetVouTrans
Первое, что странно, это то, что в этом документе ничего не говорится о параметрах, которые вы передаете.

На самом деле, что странно для меня, это пример запроса.

<soap12:calledMethodName>
// I only seen
<ns1:calledMethodName>

Я не нашел никакого способа, чтобы изменить его (возможно, вам нужен собственный клиент SOAP *).

Следующая странная вещь об этом API: он никогда не возвращает (независимо от параметров) другой ответ. Нет ошибок / исключений.

* — На самом деле, что может быть быть так. Разве что они написали собственную реализацию чего-то подобного мылу. Что не совместимо со стандартными библиотеками SOAP.

Вы видели успешную реализацию интеграции кого-то с их API?

Также нашел симмилиар никогда не отвечал вопрос здесь: PHP мыло и набор данных .Net

Может оказаться, что этот API просто не работает или требует определенной реализации.

1

Другие решения

Других решений пока нет …