1. Advertising
    y u no do it?

    Advertising (learn more)

    Advertise virtually anything here, with CPM banner ads, CPM email ads and CPC contextual links. You can target relevant areas of the site and show ads based on geographical location of the user if you wish.

    Starts at just $1 per CPM or $0.10 per CPC.

What's the SoapClient alternative?

Discussion in 'PHP' started by yangyang, Nov 13, 2008.

  1. #1
    SoapClient is a built-in PHP support for SOAP however my host doesn't compile PHP with it.

    http://www.php.net/soap

    I need an alternative to create SOAP clients and deal with SOAP requests. Is there any specific libraries can substitute SoapClient?
     
    yangyang, Nov 13, 2008 IP
  2. wmtips

    wmtips Well-Known Member

    Messages:
    601
    Likes Received:
    70
    Best Answers:
    1
    Trophy Points:
    150
    #2
    AFAIK Nusoap is the most popular PHP library for SOAP.
     
    wmtips, Nov 13, 2008 IP
  3. yangyang

    yangyang Banned

    Messages:
    757
    Likes Received:
    26
    Best Answers:
    0
    Trophy Points:
    0
    #3
    Thanks. Just downloaded nusoap and it's great only I don't know how to write client with complexType in WSDL.


    Such as with the following WSDL:

    <?xml version="1.0" encoding="UTF-8"?>
    <wsdl:definitions targetNamespace="http://api.disneyland.com" xmlns:tns="http://api.disneyland.com" xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:soap12="http://www.w3.org/2003/05/soap-envelope" xmlns:ns1="http://product.domain.disneyland.com" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soapenc11="http://schemas.xmlsoap.org/soap/encoding/" xmlns:soapenc12="http://www.w3.org/2003/05/soap-encoding" xmlns:ns2="http://product.service.disneyland.com" xmlns:soap11="http://schemas.xmlsoap.org/soap/envelope/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
      <wsdl:types>
    <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" attributeFormDefault="qualified" elementFormDefault="qualified" targetNamespace="http://api.disneyland.com">
    <xsd:element name="search">
    <xsd:complexType>
    <xsd:sequence>
    <xsd:element maxOccurs="1" minOccurs="1" name="developerKey" nillable="true" type="xsd:string"/>
    <xsd:element maxOccurs="1" minOccurs="1" name="websiteId" nillable="true" type="xsd:string"/>
    <xsd:element maxOccurs="1" minOccurs="1" name="advertiserIds" nillable="true" type="xsd:string"/>
    <xsd:element maxOccurs="1" minOccurs="1" name="keywords" nillable="true" type="xsd:string"/>
    <xsd:element maxOccurs="1" minOccurs="1" name="serviceableArea" nillable="true" type="xsd:string"/>
    <xsd:element maxOccurs="1" minOccurs="1" name="upc" nillable="true" type="xsd:string"/>
    <xsd:element maxOccurs="1" minOccurs="1" name="manufacturerName" nillable="true" type="xsd:string"/>
    <xsd:element maxOccurs="1" minOccurs="1" name="manufacturerSku" nillable="true" type="xsd:string"/>
    <xsd:element maxOccurs="1" minOccurs="1" name="advertiserSku" nillable="true" type="xsd:string"/>
    <xsd:element maxOccurs="1" minOccurs="1" name="lowPrice" nillable="true" type="xsd:string"/>
    <xsd:element maxOccurs="1" minOccurs="1" name="highPrice" nillable="true" type="xsd:string"/>
    <xsd:element maxOccurs="1" minOccurs="1" name="lowSalePrice" nillable="true" type="xsd:string"/>
    <xsd:element maxOccurs="1" minOccurs="1" name="highSalePrice" nillable="true" type="xsd:string"/>
    <xsd:element maxOccurs="1" minOccurs="1" name="currency" nillable="true" type="xsd:string"/>
    <xsd:element maxOccurs="1" minOccurs="1" name="isbn" nillable="true" type="xsd:string"/>
    <xsd:element maxOccurs="1" minOccurs="1" name="sortBy" nillable="true" type="xsd:string"/>
    <xsd:element maxOccurs="1" minOccurs="1" name="sortOrder" nillable="true" type="xsd:string"/>
    <xsd:element maxOccurs="1" minOccurs="1" name="startAt" nillable="true" type="xsd:string"/>
    <xsd:element maxOccurs="1" minOccurs="1" name="maxResults" nillable="true" type="xsd:string"/>
    </xsd:sequence>
    </xsd:complexType>
    </xsd:element>
    <xsd:element name="searchResponse">
    <xsd:complexType>
    <xsd:sequence>
    <xsd:element maxOccurs="1" minOccurs="1" name="out" nillable="true" type="ns2:ProductResponse"/>
    </xsd:sequence>
    </xsd:complexType>
    </xsd:element>
    </xsd:schema>
    <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" attributeFormDefault="qualified" elementFormDefault="qualified" targetNamespace="http://product.service.disneyland.com">
    <xsd:complexType name="ProductResponse">
    <xsd:sequence>
    <xsd:element minOccurs="0" name="count" type="xsd:int"/>
    <xsd:element minOccurs="0" name="offset" type="xsd:int"/>
    <xsd:element minOccurs="0" name="products" nillable="true" type="ns1:ArrayOfProduct"/>
    <xsd:element minOccurs="0" name="totalResults" type="xsd:int"/>
    </xsd:sequence>
    </xsd:complexType>
    </xsd:schema>
    <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" attributeFormDefault="qualified" elementFormDefault="qualified" targetNamespace="http://product.domain.disneyland.com">
    <xsd:complexType name="ArrayOfProduct">
    <xsd:sequence>
    <xsd:element maxOccurs="unbounded" minOccurs="0" name="Product" nillable="true" type="ns1:Product"/>
    </xsd:sequence>
    </xsd:complexType>
    <xsd:complexType name="Product">
    <xsd:sequence>
    <xsd:element minOccurs="0" name="adId" type="xsd:long"/>
    <xsd:element minOccurs="0" name="advertiserId" type="xsd:long"/>
    <xsd:element minOccurs="0" name="advertiserName" nillable="true" type="xsd:string"/>
    <xsd:element minOccurs="0" name="buyUrl" nillable="true" type="xsd:string"/>
    <xsd:element minOccurs="0" name="catalogId" nillable="true" type="xsd:string"/>
    <xsd:element minOccurs="0" name="currency" nillable="true" type="xsd:string"/>
    <xsd:element minOccurs="0" name="description" nillable="true" type="xsd:string"/>
    <xsd:element minOccurs="0" name="imageUrl" nillable="true" type="xsd:string"/>
    <xsd:element minOccurs="0" name="inStock" nillable="true" type="xsd:string"/>
    <xsd:element minOccurs="0" name="isbn" nillable="true" type="xsd:string"/>
    <xsd:element minOccurs="0" name="manufacturerName" nillable="true" type="xsd:string"/>
    <xsd:element minOccurs="0" name="manufacturerSku" nillable="true" type="xsd:string"/>
    <xsd:element minOccurs="0" name="name" nillable="true" type="xsd:string"/>
    <xsd:element minOccurs="0" name="price" type="xsd:double"/>
    <xsd:element minOccurs="0" name="retailPrice" type="xsd:double"/>
    <xsd:element minOccurs="0" name="salePrice" type="xsd:double"/>
    <xsd:element minOccurs="0" name="sku" nillable="true" type="xsd:string"/>
    <xsd:element minOccurs="0" name="upc" nillable="true" type="xsd:string"/>
    </xsd:sequence>
    </xsd:complexType>
    </xsd:schema>
      </wsdl:types>
      <wsdl:message name="searchRequest">
        <wsdl:part name="parameters" element="tns:search"/>
      </wsdl:message>
      <wsdl:message name="searchResponse">
        <wsdl:part name="parameters" element="tns:searchResponse"/>
      </wsdl:message>
      <wsdl:portType name="productSearchServiceV2PortType">
        <wsdl:operation name="search">
          <wsdl:input name="searchRequest" message="tns:searchRequest"/>
          <wsdl:output name="searchResponse" message="tns:searchResponse"/>
        </wsdl:operation>
      </wsdl:portType>
      <wsdl:binding name="productSearchServiceV2HttpBinding" type="tns:productSearchServiceV2PortType">
        <wsdlsoap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
        <wsdl:operation name="search">
          <wsdlsoap:operation soapAction=""/>
          <wsdl:input name="searchRequest">
            <wsdlsoap:body use="literal"/>
          </wsdl:input>
          <wsdl:output name="searchResponse">
            <wsdlsoap:body use="literal"/>
          </wsdl:output>
        </wsdl:operation>
      </wsdl:binding>
      <wsdl:service name="productSearchServiceV2">
        <wsdl:port name="productSearchServiceV2HttpPort" binding="tns:productSearchServiceV2HttpBinding">
          <wsdlsoap:address location="https://product.api.disneyland.com/services/productSearchServiceV2"/>
        </wsdl:port>
      </wsdl:service>
    </wsdl:definitions> 
    HTML:

    My PHP:

    <?php
    include_once('lib/nusoap.php');
    
    
    $soap = <<<SOAP
    <soapenv:Envelope>
       <soapenv:Header/>
       <soapenv:Body>
          <api:search>
             <developerKey>mykey</developerKey>
             <api:websiteId>1234</api:websiteId>
             <api:advertiserIds>1234</api:advertiserIds>
             <api:keywords>basketball shoes</api:keywords>
             <api:serviceableArea>US</api:serviceableArea>
             <api:upc></api:upc>
             <api:manufacturerName>nike</api:manufacturerName>
             <api:manufacturerSku></api:manufacturerSku>
             <api:advertiserSku></api:advertiserSku>
             <api:lowPrice></api:lowPrice>
             <api:highPrice></api:highPrice>
             <api:lowSalePrice></api:lowSalePrice>
             <api:highSalePrice></api:highSalePrice>
             <api:currency>USD</api:currency>
             <api:isbn></api:isbn>
             <api:sortBy>price</api:sortBy>
             <api:sortOrder>desc</api:sortOrder>
             <api:startAt></api:startAt>
             <api:maxResults>100</api:maxResults>
          </api:search>
       </soapenv:Body>
    </soap:Envelope>
    SOAP;
    
    $client = new soapclient('https://product.api.cj.com/wsdl/version2/productSearchServiceV2.wsdl', true);
    
    $result = $client->call('search', array('parameters' => $soap));
    
    if ($result) {
       echo 'true';
    } else {
       echo 'false';
    }
    ?> 
    PHP:

    The problem is $result constantly turns out to be false. What am I doing wrong?

    =( Please does anybody here have any previous experience with NuSOAP?
     
    yangyang, Nov 14, 2008 IP
  4. wmtips

    wmtips Well-Known Member

    Messages:
    601
    Likes Received:
    70
    Best Answers:
    1
    Trophy Points:
    150
    #4
    Wrong. You do not need to encode SOAP envelope yourself. Use it this way:

    $result = $client->call('search', array('parameters' => array('developerKey'=>'mykey', 'websiteid'=>1234, ...)));
    PHP:
     
    wmtips, Nov 14, 2008 IP
    yangyang likes this.
  5. yangyang

    yangyang Banned

    Messages:
    757
    Likes Received:
    26
    Best Answers:
    0
    Trophy Points:
    0
    #5
    That's a lifesaver, dude! Rep added!

    Thanks again! =)
     
    yangyang, Nov 16, 2008 IP