无法使用soap为xml请求发送正确的参数

时间:2012-09-26 09:18:38

标签: php soap soap-client

我正在尝试向远程服务器发送soap请求并获取响应。但我面临的问题是在我的请求中,我的请求中有一个参数,即我创建了一个我的请求所需的参数数组,而且只有一个我无法看到的参数,

//示例请求:

<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>

//我的要求是:

<?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> 

在我对样本请求的请求中,我无法获取参数“VendorLocation”。

// Php代码: 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/>";

我的参数数组由它组成,但它在我的请求中显示

//参数数组:

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
    )

)

任何人都可以帮助我摆脱错误的地方。 注意:如果有更多信息,请询问。

亲切的问候,

1 个答案:

答案 0 :(得分:0)

只需更改参数数组结构,因为“vendorLocation”参数是“HotelLocation”的一部分。所以我将Vendor位置数组作为酒店位置数组的一部分。

//参数数组

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
    )

)