Asked  9 Months ago    Answers:  5   Viewed   96 times

I have a problem with my SOAP request. When I have tried the below soap request to the server then it returns the expected result.

Location : https://YOUR_SERVER/apitransactional/services/TransactionalService?wsdl

Input:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
                      xmlns:api="http://api.service.apitransactional.emailvision.com/">
    <soapenv:Header/>
    <soapenv:Body>
        <api:openApiConnection>
            <login>usernaem</login>
            <pwd>password</pwd>
            <key>security-key</key>
        </api:openApiConnection>
    </soapenv:Body>
    </soapenv:Envelope>

Output:

<soap:Envelope>
    <soap:Body>
        <ns2:openApiConnectionResponse>
            <return>G9X7CsNn3HisxFdwAu4W76mBewQgH9WW-3CyeO9WBMiHXX_u9ufLHDkA-NypiiYFGh7FLbEz2_c1YonjauDs7Jhk9DGvGNSTLMTjdz5wT2V20E4m3axKPzEnjrvzC63ItFzBIYIeYXHxjKf3w9Yxmmhz5SSeXg</return>
        </ns2:openApiConnectionResponse>
    </soap:Body>
</soap:Envelope>

It returns token of this connection.

But when I tried to the below request then it returns the whole wsdl file instead of success / fail response.

Location: http://api.notificationmessaging.com/NMSOAP/NotificationService?wsdl

Input:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
                  xmlns:api="http://api.service.nsapi.emailvision.com/">
    <soapenv:Header/>
    <soapenv:Body>
        <api:sendObjectsWithFullStatus>
            <arg0>
                <sendrequest>
                    <content>
                        <entry>
                            <key>1</key>
                            <value>>
                                <![CDATA[
<table width="600">
<tr>
<td>
<font size="2" face="Arial">Our powerful algorithms
already found a matching profile that matches your criteria:
<br>Celina72&nbsp;</font>
<img src="http://mypath/to/my/image.gif" width="50"
height="50" border="0" />
</td>]]></value>
                        </entry>
                    </content>
                    <dyn>
                        <entry>
                            <key>firstname</key>
                            <value>john</value>
                        </entry>
                    </dyn>
                    <email>jblum@flowerpowershop.biz</email>
                    <encrypt>BdX7CqkmjTHtxWEKB5QK6MzXKkx6HK3E8guM</encrypt>
                    <notificationId>1234</notificationId>
                    <random>4A776E3602000078</random>
                    <senddate>2008-12-12T00:00:00</senddate>
                    <synchrotype>NOTHING</synchrotype>
                    <uidkey>EMAIL</uidkey>
                </sendrequest>
                <sendrequest>
                    <content>
                        <entry>
                            <key>1</key>
                            <value>>
                                <![CDATA[
<table width="600">
<tr>
<td>
<font size="2" face="Arial">Our powerful
algorithms already found a matching profile that matches your criteria:
<br>Celina72&nbsp;</font>
<img src="http://mypath/to/my/image.gif" width-
h="50" height="50" border="0" />
</td>]]></value>
                        </entry>
                    </content>
                    <dyn>
                        <entry>
                            <key>firstname</key>
                            <value>David</value>
                        </entry>
                    </dyn>
                    <email>dcoulon@flowerpowershop.biz</email>
                    <encrypt>BdX7CqkmjTHtxWEKB5QK6MzXKkx6HK3E8guM</encrypt>
                    <notificationId>1234</notificationId>
                    <random>4A776E3602000078</random>
                    <senddate>2008-12-12T00:00:00</senddate>
                    <synchrotype>UPDATE</synchrotype>
                    <uidkey>EMAIL</uidkey>
                </sendrequest>
            </arg0>
        </api:sendObjectsWithFullStatus>
    </soapenv:Body>
</soapenv:Envelope>

Output:

<?xml version='1.0' encoding='UTF-8' ?>
<wsdl:definitions name="NotificationServiceService" targetNamespace="http://api.service.nsapi.emailvision.com/">
<wsdl:types>
    <xs:schema attributeFormDefault="unqualified" elementFormDefault="unqualified" targetNamespace="http://api.service.nsapi.emailvision.com/">
        <xs:element name="MultiSendRequest" type="tns:multiSendRequest" />
        <xs:element name="MultiSendRequestResponse" type="tns:multiSendRequestResponse" />
        <xs:element name="getSendRequestById" type="tns:getSendRequestById" />
        <xs:element name="getSendRequestByIdResponse" type="tns:getSendRequestByIdResponse" />
        <xs:element name="notificationExceptionDetails" type="tns:notificationExceptionDetails" />
        <xs:element name="sendObject" type="tns:sendObject" />
        <xs:element name="sendObjectResponse" type="tns:sendObjectResponse" />
        <xs:element name="sendObjects" type="tns:sendObjects" />
        <xs:element name="sendObjectsResponse" type="tns:sendObjectsResponse" />
        <xs:element name="sendObjectsWithFullStatus" type="tns:sendObjectsWithFullStatus" />
        <xs:element name="sendObjectsWithFullStatusResponse" type="tns:sendObjectsWithFullStatusResponse" />
        <xs:element name="sendrequest" type="tns:sendRequest" />
        <xs:element name="sendrequestresponse" type="tns:sendRequestResponse" />
        <xs:complexType name="sendObjects">
            <xs:sequence>
                <xs:element minOccurs="0" name="arg0" type="tns:multiSendRequest" />
            </xs:sequence>
        </xs:complexType>
        <xs:complexType name="multiSendRequest">
            <xs:sequence>
                <xs:element maxOccurs="unbounded" minOccurs="0" name="sendrequest" nillable="true" type="tns:sendRequest" />
            </xs:sequence>
        </xs:complexType>
        <xs:complexType name="sendRequest">
            <xs:sequence>
                <xs:element name="content">
                    <xs:complexType>
                        <xs:sequence>
                            <xs:element maxOccurs="unbounded" minOccurs="0" name="entry">
                                <xs:complexType>
                                    <xs:sequence>
                                        <xs:element minOccurs="0" name="key" type="xs:int" />
                                        <xs:element minOccurs="0" name="value" type="xs:string" />
                                    </xs:sequence>
                                </xs:complexType>
                            </xs:element>
                        </xs:sequence>
                    </xs:complexType>
                </xs:element>
                <xs:element name="dyn">
                    <xs:complexType>
                        <xs:sequence>
                            <xs:element maxOccurs="unbounded" minOccurs="0" name="entry">
                                <xs:complexType>
                                    <xs:sequence>
                                        <xs:element minOccurs="0" name="key" type="xs:string" />
                                        <xs:element minOccurs="0" name="value" type="xs:string" />
                                    </xs:sequence>
                                </xs:complexType>
                            </xs:element>
                        </xs:sequence>
                    </xs:complexType>
                </xs:element>
                <xs:element minOccurs="0" name="email" type="xs:string" />
                <xs:element minOccurs="0" name="encrypt" type="xs:string" />
                <xs:element name="notificationId" type="xs:long" />
                <xs:element minOccurs="0" name="random" type="xs:string" />
                <xs:element minOccurs="0" name="senddate" type="xs:dateTime" />
                <xs:element minOccurs="0" name="synchrotype" type="tns:synchroType" />
                <xs:element minOccurs="0" name="uidkey" type="xs:string" />
            </xs:sequence>
        </xs:complexType>
        <xs:complexType name="sendObjectsResponse">
            <xs:sequence>
                <xs:element minOccurs="0" name="return" type="tns:multiSendRequestResponse" />
            </xs:sequence>
        </xs:complexType>
        <xs:complexType name="multiSendRequestResponse">
            <xs:sequence>
                <xs:element maxOccurs="unbounded" minOccurs="0" name="element" nillable="true" type="tns:notificationServiceResponse" />
            </xs:sequence>
        </xs:complexType>
        <xs:complexType name="notificationServiceResponse">
            <xs:sequence>
                <xs:element minOccurs="0" name="result" type="xs:anyType" />
            </xs:sequence>
            <xs:attribute name="email" type="xs:string" />
            <xs:attribute name="responseStatus" type="xs:string" />
        </xs:complexType>
        <xs:complexType name="notificationExceptionDetails">
            <xs:sequence>
                <xs:element minOccurs="0" name="description" type="xs:string" />
                <xs:element maxOccurs="unbounded" minOccurs="0" name="fields" nillable="true" type="xs:string" />
                <xs:element minOccurs="0" name="status" type="xs:string" />
            </xs:sequence>
        </xs:complexType>
        <xs:complexType name="getSendRequestById">
            <xs:sequence>
                <xs:element name="arg0" type="xs:long" />
                <xs:element minOccurs="0" name="arg1" type="xs:string" />
                <xs:element minOccurs="0" name="arg2" type="xs:string" />
            </xs:sequence>
        </xs:complexType>
        <xs:complexType name="getSendRequestByIdResponse">
            <xs:sequence>
                <xs:element minOccurs="0" name="return" type="tns:sendRequestResponse" />
            </xs:sequence>
        </xs:complexType>
        <xs:complexType name="sendRequestResponse">
            <xs:sequence>
                <xs:element minOccurs="0" name="email" type="xs:string" />
                <xs:element name="id" type="xs:long" />
                <xs:element name="notificationId" type="xs:long" />
                <xs:element minOccurs="0" name="processDate" type="xs:dateTime" />
                <xs:element minOccurs="0" name="requestDate" type="xs:dateTime" />
                <xs:element minOccurs="0" name="sendDate" type="xs:dateTime" />
                <xs:element minOccurs="0" name="status" type="xs:string" />
                <xs:element minOccurs="0" name="UId" type="xs:string" />
            </xs:sequence>
        </xs:complexType>
        <xs:complexType name="sendObject">
            <xs:sequence>
                <xs:element minOccurs="0" name="arg0" type="tns:sendRequest" />
            </xs:sequence>
        </xs:complexType>
        <xs:complexType name="sendObjectResponse">
            <xs:sequence>
                <xs:element minOccurs="0" name="return" type="xs:string" />
            </xs:sequence>
        </xs:complexType>
        <xs:complexType name="sendObjectsWithFullStatus">
            <xs:sequence>
                <xs:element minOccurs="0" name="arg0" type="tns:multiSendRequest" />
            </xs:sequence>
        </xs:complexType>
        <xs:complexType name="sendObjectsWithFullStatusResponse">
            <xs:sequence>
                <xs:element minOccurs="0" name="return" type="tns:multiSendRequestResponse" />
            </xs:sequence>
        </xs:complexType>
        <xs:simpleType name="synchroType">
            <xs:restriction base="xs:string">
                <xs:enumeration value="NOTHING" />
                <xs:enumeration value="INSERT" />
                <xs:enumeration value="UPDATE" />
                <xs:enumeration value="INSERT_UPDATE" />
            </xs:restriction>
        </xs:simpleType>
    </xs:schema>
    <xsd:schema attributeFormDefault="unqualified" elementFormDefault="unqualified" targetNamespace="http://exceptions.service.nsapi.emailvision.com/">
        <xsd:element name="NotificationServiceException" nillable="true" type="ns0:notificationExceptionDetails" />
    </xsd:schema>
</wsdl:types>
<wsdl:message name="getSendRequestByIdResponse">
    <wsdl:part element="tns:getSendRequestByIdResponse" name="parameters" />
</wsdl:message>
<wsdl:message name="sendObjectsWithFullStatus">
    <wsdl:part element="tns:sendObjectsWithFullStatus" name="parameters" />
</wsdl:message>
<wsdl:message name="NotificationServiceException">
    <wsdl:part element="ns1:NotificationServiceException" name="NotificationServiceException" />
</wsdl:message>
<wsdl:message name="sendObjectResponse">
    <wsdl:part element="tns:sendObjectResponse" name="parameters" />
</wsdl:message>
<wsdl:message name="sendObjectsResponse">
    <wsdl:part element="tns:sendObjectsResponse" name="parameters" />
</wsdl:message>
<wsdl:message name="getSendRequestById">
    <wsdl:part element="tns:getSendRequestById" name="parameters" />
</wsdl:message>
<wsdl:message name="sendObjectsWithFullStatusResponse">
    <wsdl:part element="tns:sendObjectsWithFullStatusResponse" name="parameters" />
</wsdl:message>
<wsdl:message name="sendObjects">
    <wsdl:part element="tns:sendObjects" name="parameters" />
</wsdl:message>
<wsdl:message name="sendObject">
    <wsdl:part element="tns:sendObject" name="parameters" />
</wsdl:message>
<wsdl:portType name="NotificationService">
    <wsdl:operation name="sendObjects">
        <wsdl:input message="tns:sendObjects" name="sendObjects" />
        <wsdl:output message="tns:sendObjectsResponse" name="sendObjectsResponse" />
        <wsdl:fault message="tns:NotificationServiceException" name="NotificationServiceException" />
    </wsdl:operation>
    <wsdl:operation name="getSendRequestById">
        <wsdl:input message="tns:getSendRequestById" name="getSendRequestById" />
        <wsdl:output message="tns:getSendRequestByIdResponse" name="getSendRequestByIdResponse" />
        <wsdl:fault message="tns:NotificationServiceException" name="NotificationServiceException" />
    </wsdl:operation>
    <wsdl:operation name="sendObject">
        <wsdl:input message="tns:sendObject" name="sendObject" />
        <wsdl:output message="tns:sendObjectResponse" name="sendObjectResponse" />
        <wsdl:fault message="tns:NotificationServiceException" name="NotificationServiceException" />
    </wsdl:operation>
    <wsdl:operation name="sendObjectsWithFullStatus">
        <wsdl:input message="tns:sendObjectsWithFullStatus" name="sendObjectsWithFullStatus" />
        <wsdl:output message="tns:sendObjectsWithFullStatusResponse" name="sendObjectsWithFullStatusResponse" />
        <wsdl:fault message="tns:NotificationServiceException" name="NotificationServiceException" />
    </wsdl:operation>
</wsdl:portType>
<wsdl:binding name="NotificationServiceServiceSoapBinding" type="tns:NotificationService">
    <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http" />
    <wsdl:operation name="sendObjects">
        <soap:operation soapAction="" style="document" />
        <wsdl:input name="sendObjects">
            <soap:body use="literal" />
        </wsdl:input>
        <wsdl:output name="sendObjectsResponse">
            <soap:body use="literal" />
        </wsdl:output>
        <wsdl:fault name="NotificationServiceException">
            <soap:fault name="NotificationServiceException" use="literal" />
        </wsdl:fault>
    </wsdl:operation>
    <wsdl:operation name="getSendRequestById">
        <soap:operation soapAction="" style="document" />
        <wsdl:input name="getSendRequestById">
            <soap:body use="literal" />
        </wsdl:input>
        <wsdl:output name="getSendRequestByIdResponse">
            <soap:body use="literal" />
        </wsdl:output>
        <wsdl:fault name="NotificationServiceException">
            <soap:fault name="NotificationServiceException" use="literal" />
        </wsdl:fault>
    </wsdl:operation>
    <wsdl:operation name="sendObject">
        <soap:operation soapAction="" style="document" />
        <wsdl:input name="sendObject">
            <soap:body use="literal" />
        </wsdl:input>
        <wsdl:output name="sendObjectResponse">
            <soap:body use="literal" />
        </wsdl:output>
        <wsdl:fault name="NotificationServiceException">
            <soap:fault name="NotificationServiceException" use="literal" />
        </wsdl:fault>
    </wsdl:operation>
    <wsdl:operation name="sendObjectsWithFullStatus">
        <soap:operation soapAction="" style="document" />
        <wsdl:input name="sendObjectsWithFullStatus">
            <soap:body use="literal" />
        </wsdl:input>
        <wsdl:output name="sendObjectsWithFullStatusResponse">
            <soap:body use="literal" />
        </wsdl:output>
        <wsdl:fault name="NotificationServiceException">
            <soap:fault name="NotificationServiceException" use="literal" />
        </wsdl:fault>
    </wsdl:operation>
</wsdl:binding>
<wsdl:service name="NotificationServiceService">
    <wsdl:port binding="tns:NotificationServiceServiceSoapBinding" name="NotificationServicePort">
        <soap:address location="http://api.notificationmessaging.com/nsapi/services/NotificationService" />
    </wsdl:port>
</wsdl:service>
</wsdl:definitions>

Expected Output:

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
    <soap:Body>
        <ns2:sendObjectResponse xmlns:n-
                                s2="http://api.service.nsapi.emailvision.com/">
            <return>SendRequest has been successfully saved!</return>
        </ns2:sendObjectResponse>
    </soap:Body>
    </soap:Envelope>

Can anyone suggest what is the actual problem is?

Does this problem from my request or from the server response?

 Answers

64

Is there a specific reason to add ?wsdl to your endpoint address? Response from server(http://api.notificationmessaging.com/NMSOAP/NotificationService) is, not what you expected but definitely not WSLD

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<ns2:sendObjectsWithFullStatusResponse xmlns:ns2="http://api.service.nsapi.emailvision.com/">
<return>
<element responseStatus="failed" email="jblum@flowerpowershop.biz">
<result xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ns4="http://www.w3.org/2001/XMLSchema" xsi:type="ns4:string">
Query random: 4A776E3602000078 doesnt match with notification random: {1} !!!
</result>
</element>
<element responseStatus="failed" email="dcoulon@flowerpowershop.biz">
<result xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ns4="http://www.w3.org/2001/XMLSchema" xsi:type="ns4:string">
Query random: 4A776E3602000078 doesnt match with notification random: {1} !!!
</result>
</element>
</return>
</ns2:sendObjectsWithFullStatusResponse>
</soap:Body>
</soap:Envelope>
Wednesday, March 31, 2021
 
elias
answered 9 Months ago
86

I've an addition to the question:

The request is as following:

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" xmlns="...">
   <s:Body>
      <Search>
         <login>
            <Wholesaler>...</Wholesaler>
            <Username>...</Username>
            <Password>...</Password>
         </login>
         <itemRequests>
            <ItemRequest>
               <ArticleId>int</ArticleId>
               <SupplierId>int</SupplierId>
               <QuantityRequested>int</QuantityRequested>
            </ItemRequest>
         </itemRequests>
      </Search>
   </s:Body>
</s:Envelope>

There are two SoapHeaders I need to send:

Content-Type: text/xml; charset=utf-8
SOAPAction: URI

I do know the service provider and the action identifier.

If I have the following variables

$service
$action
$request
$header

How can I send the request in PHP? I tried

$client  = new SoapClient($service);
$result = $client->__doRequest($request, $service, $action);

But I do not receive a response it seems...

This is what the response should like:

Date: Thu, 09 Aug 2012 08:01:40 GMT
Server: Microsoft-IIS/6.0
X-Powered-By: ASP.NET
X-AspNet-Version: 4.0.30319
Content-Length: 408
Cache-Control: private
Content-Type: text/xml; charset=utf-8


<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
  <s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <SearchResponse xmlns="...">
      <SearchResult>
        <Wholesaler>...</Wholesaler>
        <Username>...</Username>
        <Error>false</Error>
        <DateTime>2012-08-09T10:01:40.39125+02:00</DateTime>
        <ItemResults />
      </SearchResult>
    </SearchResponse>
  </s:Body>
</s:Envelope>

When I do a simple echo $result, the screen stays white and in the code there is no XML visible.

Wednesday, March 31, 2021
 
Taptronic
answered 9 Months ago
98

Well, i could finally receive the parameters as objects in my method. These objects were already defined as complex types in the XSD files.

Saturday, May 29, 2021
 
lewiguez
answered 7 Months ago
82

Thanks @dootzky & @lulco. I have solved this. Code below works perfectly fine for me:

<?php

ini_set("soap.wsdl_cache_enabled", "0"); // disabling WSDL cache
$wsdl_path = "http://www.xxxxxxx/zzzzzzzzzz/service.asmx?WSDL";

$login_id = 'XXXX';
$password = 'YYYYYY';

$client = new SoapClient($wsdl_path, array('trace' => 1));

try {
    echo "<pre>n";
    $result = $client->SOME_FUNCTION(array("request" => array("cedula" => $login_id, "contrasena" => $password)))
    print_r($result);
    echo "n";
}
catch (SoapFault $exception) {
    echo $exception;      
} 

?>
Saturday, May 29, 2021
 
ALH
answered 7 Months ago
ALH
37

If you want to return a proper response to the caller. Then you need to return an object not only one fields. For example you can create new class you can call it Response that contains the fields you want to display it to the caller like responCode and responseDescription. Using these two fields you can cover the different error cases you have. And of course you need to change the return type of the method playUserInfo to be of type Response

Monday, August 30, 2021
 
RenegadeAndy
answered 3 Months ago
Only authorized users can answer the question. Please sign in first, or register a free account.
Not the answer you're looking for? Browse other questions tagged :
 
Share