Could not find any binding services used in WSDL

I am trying to serve SOAP requests (QIWI payment system) using the Kohana class and PHP SoapServer ().

So, I get a PHP Fatal error saying "SOAP-ERROR: Parsing WSDL: Could not find any binding services used in WSDL".

my service script:

$s = new SoapServer(DOCROOT.'wsdls/IShopClientWS.wsdl'); 

My WSDL file is located at http: //mysite.url/wsdls/IShopClientWS.wsdl

Content:

  <?xml version="1.0" encoding="UTF-8"?> <wsdl:definitions name="IShopClientWSService" targetNamespace="http://client.ishop.mw.ru/" xmlns:tns="http://client.ishop.mw.ru/" xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"> <wsdl:types> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:tns="http://client.ishop.mw.ru/" attributeFormDefault="unqualified" elementFormDefault="unqualified" targetNamespace="http://client.ishop.mw.ru/"> <xs:element name="updateBill" type="tns:updateBill"/> <xs:element name="updateBillResponse" type="tns:updateBillResponse"/> <xs:complexType name="updateBill"> <xs:sequence> <xs:element minOccurs="0" name="login" type="xs:string"/> <xs:element minOccurs="0" name="password" type="xs:string"/> <xs:element minOccurs="0" name="txn" type="xs:string"/> <xs:element name="status" type="xs:int"/> </xs:sequence> </xs:complexType> <xs:complexType name="updateBillResponse"> <xs:sequence> <xs:element name="updateBillResult" type="xs:int"/> </xs:sequence> </xs:complexType> <xs:element name="updateBillExt" type="tns:updateBillExt"/> <xs:element name="updateBillExtResponse" type="tns:updateBillExtResponse"/> <xs:complexType name="Param"> <xs:sequence> <xs:element name="name" nillable="false" type="xsd:string"/> <xs:element name="value" nillable="false" type="xsd:string"/> </xs:sequence> </xs:complexType> <xs:complexType name="ArrayOfParams"> <xs:sequence> <xs:element maxOccurs="unbounded" minOccurs="0" name="item" type="tns:Param"/> </xs:sequence> </xs:complexType> <xs:complexType name="updateBillExt"> <xs:sequence> <xs:element minOccurs="0" name="login" type="xs:string"/> <xs:element minOccurs="0" name="password" type="xs:string"/> <xs:element minOccurs="0" name="txn" type="xs:string"/> <xs:element name="status" type="xs:int"/> <xs:element name="params" nillable="false" type="tns:ArrayOfParams"/> </xs:sequence> </xs:complexType> <xs:complexType name="updateBillExtResponse"> <xs:sequence> <xs:element name="updateBillExtResult" type="xs:int"/> </xs:sequence> </xs:complexType> </xs:schema> </wsdl:types> <wsdl:message name="updateBillResponse"> <wsdl:part name="parameters" element="tns:updateBillResponse"> </wsdl:part> </wsdl:message> <wsdl:message name="updateBill"> <wsdl:part name="parameters" element="tns:updateBill"> </wsdl:part> </wsdl:message> <wsdl:message name="updateBillExtResponse"> <wsdl:part name="parameters" element="tns:updateBillExtResponse"> </wsdl:part> </wsdl:message> <wsdl:message name="updateBillExt"> <wsdl:part name="parameters" element="tns:updateBillExt"> </wsdl:part> </wsdl:message> <wsdl:portType name="IShopClientWS"> <wsdl:operation name="updateBill"> <wsdl:input name="updateBill" message="tns:updateBill"> </wsdl:input> <wsdl:output name="updateBillResponse" message="tns:updateBillResponse"> </wsdl:output> </wsdl:operation> <wsdl:operation name="updateBillExt"> <wsdl:input name="updateBillExt" message="tns:updateBillExt"> </wsdl:input> <wsdl:output name="updateBillExtResponse" message="tns:updateBillExtResponse"> </wsdl:output> </wsdl:operation> </wsdl:portType> <wsdl:binding name="IShopClientWSBinding" type="tns:IShopClientWS"> <soap12:binding style="document" transport="http://www.w3.org/2003/05/soap/bindings/HTTP/"/> <wsdl:operation name="updateBill"> <soap12:operation soapAction="updateBill" style="document"></soap12:operation> <wsdl:input name="updateBill"> <soap12:body use="literal"/> </wsdl:input> <wsdl:output name="updateBillResponse"> <soap12:body use="literal"/> </wsdl:output> </wsdl:operation> <wsdl:operation name="updateBillExt"> <soap12:operation soapAction="updateBillExt" style="document"/> <wsdl:input name="updateBillExt"> <soap12:body use="literal"/> </wsdl:input> <wsdl:output name="updateBillExtResponse"> <soap12:body use="literal"/> </wsdl:output> </wsdl:operation> </wsdl:binding> <wsdl:service name="IShopClientWSServiceService"> <wsdl:port name="IShopClientWSPort" binding="tns:IShopClientWSBinding"> <soap12:address location="https://mysite.url/path_to_serving_script"></soap12:address> </wsdl:port> </wsdl:service> </wsdl:definitions> 

Due to the PHP-SOAP source files at http://lxr.sweon.net/php/http/source/ext/soap/php_sdl.c :

 if (ctx.sdl->bindings == NULL || ctx.sdl->bindings->nNumOfElements == 0) { soap_error0(E_ERROR, "Parsing WSDL: Could not find any usable binding services in WSDL."); } 

So what happened to my WSDL file?

Any help would be greatly appreciated!

+4
source share
1 answer

At first glance, I would say SOAP 1.2 not SOAP 1.1 (PHP by default). For services 1.2 use:

 $s = new SoapServer(DOCROOT.'wsdls/IShopClientWS.wsdl', array('soap_version' => SOAP_1_2)); 

In addition, the transport should be "http://schemas.xmlsoap.org/soap/http" AFAIK, not http://www.w3.org/2003/05/soap/bindings/HTTP/ .

 <soap12:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/> 

Honestly, I don’t know why, just that it is in my wsdl and it just works. If someone is masochistic enough to delve into the specifications, feel free to refer to the appropriate part.

Below are some differences between specifications 1.1 and 1.2: http://schemas.xmlsoap.org/wsdl/soap12/soap12WSDL.htm And there is no transport like http://www.w3.org/2003/05/soap/bindings/HTTP/ Therefore, my thoughts are that this is just a QIWI payment system error.

+3
source

Source: https://habr.com/ru/post/1394977/


All Articles