使用PHP为特定服务调用SOAP方法

时间:2009-04-22 13:59:39

标签: php soap

很抱歉不得不这样做,但我没有得到运行这个特定网络服务的人的爱。我之前从未使用过SOAP。

Here's the method I'm trying to call

这是我认为应该运作的代码

    public function soapTest(){

            echo "start <br />";
            use_soap_error_handler(true);
            $client = new SoapClient("https://cwi.rezexchange.com:9991/?wsdl");

                // here's the problem. What goes in the parenthesis?
            $result = $client->CwiRateDetails(????);

            echo($result);
            echo "<br /> end";

        }

现在我猜这会告诉我括号应该包含什么。

POST /Service.asmx HTTP/1.1
Host: cwi.rezexchange.com
Content-Type: text/xml; charset=utf-8
Content-Length: length
SOAPAction: "http://hotelconcepts.com/CwiRateDetails"

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  <soap:Body>
    <CwiRateDetails xmlns="http://hotelconcepts.com/">
      <PropertyCode>string</PropertyCode>
      <DateFrom>dateTime</DateFrom>
      <DateTo>dateTime</DateTo>
      <RatePlan>string</RatePlan>
      <RoomType>string</RoomType>
      <PromotionalRates>boolean</PromotionalRates>
    </CwiRateDetails>
  </soap:Body>
</soap:Envelope>

我猜是

之类的东西
$result = $client->CwiRateDetails($PCode, $DateFrom, $DateTo, $RatePlan, $RoomType, false);

应该有效。但我不知道日期格式是什么,或者房间类型是什么或如何引用费率计划。

现在。在我通过电子邮件与他们一起去猿人之前,我错误地认为他们需要提供更多信息吗?或者是否有某种SOAP技巧可以用来从某个地方获取信息?

4 个答案:

答案 0 :(得分:5)

尝试

$result = $client->CwiRateDetails(array(
    'PropertyCode'     => ...,
    'DateFrom'         => ...,
    'DateTo'           => ...,
    'RatePlan'         => ...,
    'RoomType'         => ...,
    'PromotionalRates' => ...,
));

您必须根据XML架构规范序列化DateFromDateTo中的日期时间值以及PromotionalRates中的布尔值:

  • booleantrue = 'true'1false = 'false'0
  • dateTimeYYYY-MM-DD T hh:mm:ss Z表示UTC或YYYY-MM-DD T hh:mm:ss(+/-)hh:mm表示本地时间,包括时区信息;时区信息是可选的

答案 1 :(得分:1)

日期格式实际上是dateTime(它是SOAP格式类型)。我确信互联网上有一个例子可以将time()(或其他)转换为SOAP :: dateTime字段。

你需要连接的信息就在那里......也许你应该首先阅读webservices?

答案 2 :(得分:0)

Usualy它是关联数组,其中键是您在描述中找到的字段,即CwiRateDetails的PropertyCode,DateFrom,DateTo等

所以它会像

$client->CwiRateDetails(array("PropertyCode"=>"sdsd","DateFrom"=>"",......))

您可以在此页面上看到每种方法的详细信息:https://cwi.rezexchange.com:9991/只需点击程序的名称,您就会看到它的参数并且它会响应。

答案 3 :(得分:0)

你没错,IMO。必须有其他SOAP调用才能获得所需的信息。你看过List Rate Types了吗?方法列表here怎么样?