Темы, не касающиеся фреймворка, но относящиеся к программированию в целом.
-
webplus
- Сообщения: 336
- Зарегистрирован: 2012.02.24, 22:05
Сообщение
webplus »
Здравствуйте!
Проблема с SoapClient
Вот код:
Код: Выделить всё
$dta ='<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:tbx="http://api.codegen.net/ota/tbx" xmlns:ota="http://api.codegen.net/ota">
<soapenv:Header/>
<soapenv:Body>
<tbx:OTAX_AuthTokenRQ>
<tbx:AuthTokenType>Request</tbx:AuthTokenType>
<tbx:AuthTokenCredentials UserName="datest" Password="test@123"/>
</tbx:OTAX_AuthTokenRQ>
</soapenv:Body>
</soapenv:Envelope>';
$soapVar = new SoapVar($dta, XSD_ANYXML);
$url = "http://domain.com/OTASecurity_v66/V66?wsdl";
try {
$SOAP = new SoapClient($url, array("trace" => 1, "Content-Type" => "application/soap+xml"));
} catch (SoapFault $e) {
echo "error " . $e->getMessage();
}
try {
$auth = $SOAP->OTAX_AuthTokenRQ($soapVar);
} catch (SoapFault $e) {
echo "error " . $e->getMessage();
print "Request: " . $SOAP->__getLastRequest() . "<br>";
print "Response: " . $SOAP->__getLastResponse() . "<br>";
}
выдает ошибку:
Код: Выделить всё
error SOAP-ERROR: Parsing Schema: can't import schema from 'http://domain.com:80/OTASecurity_v66/V66?xsd=2'
Пробовал вот так еще:
Код: Выделить всё
$SOAP = new SoapClient(null, array(
'location' => $url,
'uri' => 'namespace'
));
этот вариант уже доходит до второго эксепшена:
Код: Выделить всё
error Cannot find dispatch method for {namespace}OTAX_AuthTokenRQ
Request:
Response:
NULL
может еще что то надо передать?
А вот тех поддержка прислала как у них работает, вот скрин:
http://joxi.net/p27PkGkTKk78XA
-
Loveorigami
- Сообщения: 977
- Зарегистрирован: 2014.08.27, 21:54
Сообщение
Loveorigami »
У SOAP есть версии
У меня рабочее подключение такое
Код: Выделить всё
return new SoapClient($wsdl, [
'uri' => 'http://schemas.xmlsoap.org/soap/envelope/',
'encoding' => 'UTF-8',
'trace' => 1,
'exceptions' => 1,
'compression' => SOAP_COMPRESSION_ACCEPT,
'soap_version' => SOAP_1_1,
'cache_wsdl' => WSDL_CACHE_MEMORY,
'style' => SOAP_RPC,
'use' => SOAP_ENCODED,
]);
-
webplus
- Сообщения: 336
- Зарегистрирован: 2012.02.24, 22:05
Сообщение
webplus »
Менял версии SOAP_1_1 or SOAP_1_2
все равно выдает ошибку при любой версии:
Код: Выделить всё
SOAP-ERROR: Parsing Schema: can't import schema from 'http://domain.com:80/OTASecurity_v66/V66?xsd=2'
-
Loveorigami
- Сообщения: 977
- Зарегистрирован: 2014.08.27, 21:54
Сообщение
Loveorigami »
ну... попробуй скопировать схему в файл и указать к нему путь.
$wsdl = Yii::getAlias($wsdl);
-
ElisDN
- Сообщения: 5845
- Зарегистрирован: 2012.10.07, 10:24
-
Контактная информация:
Сообщение
ElisDN »
webplus писал(а): ↑2019.08.26, 13:42
Отдельно я файл скачать со схемой не могу так как сервис по IP хостинга дает доступ
Тогда посмотрите, как он открывается (или нет) с хостинга через echo file_get_contents($url).
-
webplus
- Сообщения: 336
- Зарегистрирован: 2012.02.24, 22:05
Сообщение
webplus »
ElisDN писал(а): ↑2019.08.26, 13:55
webplus писал(а): ↑2019.08.26, 13:42
Отдельно я файл скачать со схемой не могу так как сервис по IP хостинга дает доступ
Тогда посмотрите, как он открывается (или нет) с хостинга через echo file_get_contents($url).
файл
http://domain.com:80/ota/OTASecurity_v66/V66?wsdl выглядит так
Код: Выделить всё
<?xml version='1.0' encoding='UTF-8'?><!-- Published by JAX-WS RI (http://jax-ws.java.net). RI's version is JAX-WS RI 2.2.10 svn-revision#919b322c92f13ad085a933e8dd6dd35d4947364b. --><wsdl:definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:ota="http://api.codegen.net/ota" xmlns:tbx="http://api.codegen.net/ota/tbx" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns="http://api.codegen.net/ota/tbx" name="OTASecurityService_V2011b" targetNamespace="http://api.codegen.net/ota/tbx">
<wsdl:types>
<xs:schema>
<xs:import namespace="http://api.codegen.net/ota/tbx" schemaLocation="http://online.desertadventures.com:80/OTASecurity_v66/V66?xsd=2"/>
</xs:schema>
<xs:schema>
<xs:import namespace="http://api.codegen.net/ota/tbx" schemaLocation="http://online.desertadventures.com:80/OTASecurity_v66/V66?xsd=3"/>
</xs:schema>
</wsdl:types>
<wsdl:message name="OTAX_AuthTokenRQ">
<wsdl:part name="OTAX_AuthTokenRQ" element="tbx:OTAX_AuthTokenRQ"/>
</wsdl:message>
<wsdl:message name="OTAX_AuthTokenRS">
<wsdl:part name="OTAX_AuthTokenRS" element="tbx:OTAX_AuthTokenRS"/>
</wsdl:message>
<wsdl:portType name="OTASecurityPort_V2011b">
<wsdl:operation name="OTAX_AuthTokenRQ">
<wsdl:input message="tbx:OTAX_AuthTokenRQ"/>
<wsdl:output message="tbx:OTAX_AuthTokenRS"/>
</wsdl:operation>
</wsdl:portType>
<wsdl:binding name="OTASecurityService_V2011bSOAP" type="tbx:OTASecurityPort_V2011b">
<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
<wsdl:operation name="OTAX_AuthTokenRQ">
<soap:operation soapAction=""/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
<wsdl:service name="OTASecurityService_V2011b">
<wsdl:port name="OTASecurityPort_V2011b" binding="tbx:OTASecurityService_V2011bSOAP">
<soap:address location="http://online.desertadventures.com:80/OTASecurity_v66/V66"/>
</wsdl:port>
</wsdl:service>
<!-- wsdl types definitions -->
<!-- wsdl message definition -->
<!-- wsdl port definitions -->
<!-- wsdl binding definitions -->
<!-- web service definitions -->
</wsdl:definitions>
а вот файл
http://online.desertadventures.com:80/O ... /V66?xsd=2 пустой
и по этому ошибка:
Код: Выделить всё
error SOAP-ERROR: Parsing Schema: can't import schema from 'http://online.desertadventures.com:80/OTASecurity_v66/V66?xsd=2'
А может быть что хостер этого сервиса дал доступ только к
http://domain.com:80/ota/OTASecurity_v66/V66?wsdl урлу, а к тем которые в нем импортируется доступа нету?
-
ElisDN
- Сообщения: 5845
- Зарегистрирован: 2012.10.07, 10:24
-
Контактная информация:
Сообщение
ElisDN »
Поэтому и ошибка SOAP, что WSDL грузится пустой. Проверяйте доступы.
-
webplus
- Сообщения: 336
- Зарегистрирован: 2012.02.24, 22:05
Сообщение
webplus »
ElisDN писал(а): ↑2019.08.26, 14:27
Поэтому и ошибка SOAP, что WSDL грузится пустой. Проверяйте доступы.
мне техподдержка пишет что вот эта ссылка импорта не рабочая. А можно в конфиге соап указать не использовать эти ссылки импорта - пропускать их?