0

I am trying to send a soap request to a remote server and getting the response back. But the issues I am facing with is in my request one parameter is in my request i.e. I created an array of parameters needed for my request and only one parameter I am not able to see,

// The Sample Request:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Body>
<hot:HotelSearchAvailabilityReq    xmlns:hot="http://www.xxx.com/schema/hotel_v17" xmlns:com="http://www.xxx.com/schema/common_v10" TargetBranch="WAB HERE">
<com:BillingPointOfSaleInfo OriginApplication="UDT"/>
<hot:HotelLocation Location="TPA" LocationType="City">
<com:VendorLocation ProviderCode="" VendorCode="" VendorLocationID="" Key="1"/>
<com:VendorLocation ProviderCode="" VendorCode="" VendorLocationID="" Key="2"/>
<com:VendorLocation ProviderCode="" VendorCode="" VendorLocationID="" Key="3"/>
<com:VendorLocation ProviderCode="" VendorCode="" VendorLocationID="" Key="2"/>
</hot:HotelLocation>
<hot:HotelSearchModifiers NumberOfAdults="2" NumberOfRooms="1">
<com:CorporateDiscountID NegotiatedRateCode="true">CCC</com:CorporateDiscountID>
</hot:HotelSearchModifiers>
<hot:HotelStay>
<hot:CheckinDate>2012-06-01</hot:CheckinDate>
<hot:CheckoutDate>2012-06-02</hot:CheckoutDate>
</hot:HotelStay>
</hot:HotelSearchAvailabilityReq>
</soapenv:Body>
</soapenv:Envelope>

// My request is:

<?xml version="1.0" encoding="UTF-8"?> 
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://www.xxx.com/schema/common_v10" xmlns:ns2="http://www.xxx.com/schema/hotel_v19">
<SOAP-ENV:Body>
    <ns2:HotelSearchAvailabilityReq>
        <ns1:BillingPointOfSaleInfo OriginApplication="UAPI"/>
        <ns2:HotelLocation Location="LON" LocationType="City"/>
        <ns2:HotelSearchModifiers NumberOfAdults="2" NumberOfRooms="1"/>
        <ns2:HotelStay>
            <ns2:CheckinDate>2012-11-06</ns2:CheckinDate>
            <ns2:CheckoutDate>2012-11-14</ns2:CheckoutDate>
        </ns2:HotelStay>
    </ns2:HotelSearchAvailabilityReq>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope> 

In my request to that of sample request, I am not able get the parameter "VendorLocation".

//Php code: ModuleFunction.php

class HotelResultsSoapClient extends SoapClient 
{
function __construct($wsdlLocation)
{
    $trac["trace"]=1;
    $trac["use"]=SOAP_LITERAL;
    $trac["style"]=SOAP_DOCUMENT;
    $trac["compression"]=SOAP_COMPRESSION_ACCEPT | SOAP_COMPRESSION_GZIP | 5;
    //$trac["compression"]=SOAP_COMPRESSION_ACCEPT ;
    $trac["type_ns"]="";
    $trac["login"]=SOAP_CLIENT_USERNAME;
    $trac["password"]=SOAP_CLIENT_PASSWORD;
    $trac["location"]="https://xxx.com/B2BGateway/connect/uAPI/HotelService";
    $trac["version"]="SOAP_1_1";
    $trac["action"]="http://localhost:8080/kestrel/HotelService";

    parent::__construct($wsdlLocation,$trac);
}

function __doRequest($request, $location, $action, $version) 
{

    $namespace1="http://www.travelport.com/schema/hotel_v19_0";
    $namespace2="http://www.travelport.com/schema/common_v17_0";

    if(empty($_SESSION['hotelSearch']['nextResultReference']) || $_SESSION['hotelSearch']['nextResultReference'] == "notSet")
    {
    //used for sending a normal hotel request  --- do not delete just comment/ uncomment
        $request=str_replace("<ns2:HotelSearchAvailabilityReq","<ns2:HotelSearchAvailabilityReq TargetBranch=".'"'."a00000".'"'." "."xmlns:ns2=".'"'.$namespace1.'"'." "."xmlns:ns1=".'"'.$namespace2.'"',$request);

    }
    else
    {
        //used for sending next result hotel request --- do not delete just comment/ uncomment
        $request=str_replace("<ns2:HotelSearchAvailabilityReq","<ns2:HotelSearchAvailabilityReq TargetBranch=".'"'."a00000".'"'." "."xmlns:ns2=".'"'.$namespace1.'"'." "."xmlns:ns1=".'"'.$namespace2.'"',$request);
        $request=str_replace("<ns1:NextResultReference","<ns1:NextResultReference"." ".'ProviderCode="1G"',$request);   
    }



    return parent::__doRequest($request, $location, $action, $version);
}//function

function __getLastRequestHeaders()
{
    return parent::__getLastRequestHeaders();
}//function

function __getLastRequest()
{
    return parent::__getLastRequest();
}//function

  }//class

Results.php

require_once('ModuleFunctions.php');

$client = new HotelResultsSoapClient("WSDL Url");
$final = array();
$final['vc'] = {"oo","yz","hi","ii","xx"};
$final['vi'] = {"00000","12345","11111","99999","23456"};
$params = array();
// element = BillingPointOfsaleInfo ; attribute = OriginApplication.
$params["BillingPointOfSaleInfo"] = array();
$params["BillingPointOfSaleInfo"]["OriginApplication"] = "UAPI";
/* ----------------------------------------------------------------------- */
// element = HotelLocation ; attribute = Location, LocationType.
$params["HotelLocation"] = array();
$params["HotelLocation"]["Location"] = "{$destination}";
$params["HotelLocation"]["LocationType"] = "City";
/* ----------------------------------------------------------------------- */
// element = VendorLocation ; attribute = ProviderCode, VendorCode, VendorLocationID,  Key.
$params["VendorLocation"] = array();
for ($i = 0; $i < count($final['vc']); $i++) {
$params["VendorLocation"][$i] = array();
$params["VendorLocation"][$i]["ProviderCode"] = "1G";
$params["VendorLocation"][$i]["VendorCode"] = "{$final['vc'][$i]}";
$params["VendorLocation"][$i]["VendorLocationID"] = "{$final['vi'][$i]}";
}
//$params["VendorLocation"]["ProviderCode"] = "1G";
//$params["VendorLocation"]["VendorCode"] = "WV";
//$params["VendorLocation"]["VendorLocationID"] = "95625";
/* ----------------------------------------------------------------------- */
// element = HotelSearchModifiers ; attribute = NumberofAdults, NumberOfRooms.
$params["HotelSearchModifiers"] = array();
$params["HotelSearchModifiers"]["NumberOfAdults"] = "{$NumberOfAdults}";
$params["HotelSearchModifiers"]["NumberOfRooms"] = "{$NumberOfRooms}";
/* ------------------------------------------------------------------------- */
// element = CorporateDiscountID ; attribute = NegotiatedRateCode.
$params["CorporateDiscountID"] = array();
$params["CorporateDiscountID"]["NegotiatedRateCode"] = "true";
/* ------------------------------------------------------------------------- */
// element = HotelStay ; attribute = CheckinDate, CheckoutDate.
$params["HotelStay"] = array();
$params["HotelStay"]["CheckinDate"] = "{$checkInDate}";
$params["HotelStay"]["CheckoutDate"] = "{$checkOutDate}";

$response = $client->service($params);

echo "<hr>" . "Request" . "<hr/>" . "<br/>";
echo "\n" . "Request:" . htmlentities($client->__getLastRequest()) . "\n";
echo "<br/>";

My parameter array consists of it but its shown in my request

// Parameter array:

Array
(
[BillingPointOfSaleInfo] => Array
    (
        [OriginApplication] => UAPI
    )

[HotelLocation] => Array
    (
        [Location] => LON
        [LocationType] => City
    )

[VendorLocation] => Array
    (
        [0] => Array
            (
                [ProviderCode] => 1G
                [VendorCode] => oo
                [VendorLocationID] => 00000 
            )

        [1] => Array
            (
                [ProviderCode] => 1G
                [VendorCode] => yz
                [VendorLocationID] => 12345 
            )

        [2] => Array
            (
                [ProviderCode] => 1G
                [VendorCode] => hi
                [VendorLocationID] => 11111 
            )

        [3] => Array
            (
                [ProviderCode] => 1G
                [VendorCode] => ii
                [VendorLocationID] => 99999 
            )

        [4] => Array
            (
                [ProviderCode] => 1G
                [VendorCode] => xx
                [VendorLocationID] => 23456 
            )

    )

[HotelSearchModifiers] => Array
    (
        [NumberOfAdults] => 2
        [NumberOfRooms] => 1
    )

[CorporateDiscountID] => Array
    (
        [NegotiatedRateCode] => true
    )

[HotelStay] => Array
    (
        [CheckinDate] => 2012-11-06
        [CheckoutDate] => 2012-11-14
    )

)

Can any one help me out where I am getting wrong please. Note: If any more info req plz ask.

Kind Regards,

  • Please indent the code of the example request. Also I think this has been asked before, so I suggest you use the search. You do not normally see quick answers on PHP Soap questions, so investing some time into searching is worth I'd say. But what is maybe the biggest issue with your question is, that you didn't add any PHP code how you set-up the request. That **is needed**, otherwise it is not clear where your mistake is. – hakre Sep 26 '12 at 09:23
  • added php code, and thanks for the tip to search. – hailey Turlapati Sep 27 '12 at 08:49

1 Answers1

0

need to just change the parameter array structure, As "vendorLocation" parameter is a part of "HotelLocation". So I moved the Vendor location array as a part of hotel location array.

// parameters array

Array
(
[BillingPointOfSaleInfo] => Array
    (
        [OriginApplication] => UAPI
    )

[HotelLocation] => Array
    (
        [VendorLocation] => Array
            (
                [ProviderCode] => 1G
                [VendorCode] => WV
                [VendorLocationID] => 95625
            )

        [Location] => LON
        [LocationType] => City
    )

[HotelSearchModifiers] => Array
    (
        [NumberOfAdults] => 2
        [NumberOfRooms] => 1
    )

[CorporateDiscountID] => Array
    (
        [NegotiatedRateCode] => true
    )

[HotelStay] => Array
    (
        [CheckinDate] => 2012-10-27
        [CheckoutDate] => 2012-10-30
    )

) 
  • Did this solve your issue? If so great to read! If you indent the example request, that is more visible, too. If you are concerned how to indent XML programmatically with PHP, this is a related question: [PHP XML how to output nice format](http://stackoverflow.com/questions/8615422/php-xml-how-to-output-nice-format) – hakre Sep 27 '12 at 10:39
  • Please accept it as the answer so this is clear for future visitors. Edit: Ah I see, you've done that now! – hakre Oct 15 '12 at 13:24