Проблема с SoapClient

Темы, не касающиеся фреймворка, но относящиеся к программированию в целом.
Ответить
Аватара пользователя
webplus
Сообщения: 252
Зарегистрирован: 2012.02.24, 22:05
Контактная информация:

Проблема с SoapClient

Сообщение webplus » 2019.08.25, 22:28

Здравствуйте!
Проблема с 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
Сообщения: 971
Зарегистрирован: 2014.08.27, 21:54

Re: Проблема с SoapClient

Сообщение Loveorigami » 2019.08.26, 09:57

У 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
Сообщения: 252
Зарегистрирован: 2012.02.24, 22:05
Контактная информация:

Re: Проблема с SoapClient

Сообщение webplus » 2019.08.26, 12:50

Loveorigami писал(а):
2019.08.26, 09:57
У SOAP есть версии
Менял версии 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
Сообщения: 971
Зарегистрирован: 2014.08.27, 21:54

Re: Проблема с SoapClient

Сообщение Loveorigami » 2019.08.26, 13:37

ну... попробуй скопировать схему в файл и указать к нему путь.

$wsdl = Yii::getAlias($wsdl);

Аватара пользователя
webplus
Сообщения: 252
Зарегистрирован: 2012.02.24, 22:05
Контактная информация:

Re: Проблема с SoapClient

Сообщение webplus » 2019.08.26, 13:42

Loveorigami писал(а):
2019.08.26, 13:37
ну... попробуй скопировать схему в файл и указать к нему путь.

$wsdl = Yii::getAlias($wsdl);
так у меня есть wsdl http://domain.com:80/ota/OTASecurity_v66/V66?WSDL при загрузки его выдает ошибку другого урла: "Parsing Schema: can't import schema from 'http://domain.com:80/OTASecurity_v66/V66?xsd=2'"

Я не пойму зачем мне брать в алиас урл http://domain.com:80/ota/OTASecurity_v66/V66?WSDL ?

Отдельно я файл скачать со схемой не могу так как сервис по IP хостинга дает доступ

Аватара пользователя
ElisDN
Сообщения: 5358
Зарегистрирован: 2012.10.07, 10:24
Контактная информация:

Re: Проблема с SoapClient

Сообщение ElisDN » 2019.08.26, 13:55

webplus писал(а):
2019.08.26, 13:42
Отдельно я файл скачать со схемой не могу так как сервис по IP хостинга дает доступ
Тогда посмотрите, как он открывается (или нет) с хостинга через echo file_get_contents($url).

Аватара пользователя
webplus
Сообщения: 252
Зарегистрирован: 2012.02.24, 22:05
Контактная информация:

Re: Проблема с SoapClient

Сообщение webplus » 2019.08.26, 14:09

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
Сообщения: 5358
Зарегистрирован: 2012.10.07, 10:24
Контактная информация:

Re: Проблема с SoapClient

Сообщение ElisDN » 2019.08.26, 14:27

Поэтому и ошибка SOAP, что WSDL грузится пустой. Проверяйте доступы.

Аватара пользователя
webplus
Сообщения: 252
Зарегистрирован: 2012.02.24, 22:05
Контактная информация:

Re: Проблема с SoapClient

Сообщение webplus » 2019.08.26, 14:45

ElisDN писал(а):
2019.08.26, 14:27
Поэтому и ошибка SOAP, что WSDL грузится пустой. Проверяйте доступы.
мне техподдержка пишет что вот эта ссылка импорта не рабочая. А можно в конфиге соап указать не использовать эти ссылки импорта - пропускать их?

Ответить