我正在尝试向远程服务器发送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
)
)
任何人都可以帮助我摆脱错误的地方。 注意:如果有更多信息,请询问。
亲切的问候,
答案 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
)
)