2012-04-16 90 views
2

这是我的代码datetime数据类型的肥皂PHP不工作

$c = new soapclient('http://www.redbus.in/WS2/BookingService.asmx?wsdl', 
    array('authentication' => array('LoginID' => 'x','Password'=>'x'))); 

    $timezone = new DateTimeZone('UTC'); 
    $time='2012-04-17T16:50:45'; 
    $date = new DateTime($time,$timezone); 
    $sourceid=array('SourceID'=>'244','DestinationID'=>'477','DateOfJourney' =>$date); 
    $stockprice = $c->GetAvailableRoutes($sourceid); 

    print_r($stockprint); 

它不是在日期时间格式的数据类型变量

工作就显示错误这样

致命错误:未捕获的SOAPFault例外: soap:客户端]服务器无法读取请求。 ---> XML文档中存在错误(2,252)。 --->字符串''不是有效的AllXsd值。在E:\ xampplite \ htdocs \ index1.php中:9堆栈跟踪:#0 [内部函数]:SoapClient - > __ call('GetAvailableRou ...',Array)#1 E:\ xampplite \ htdocs \ index1.php( 9):SoapClient-> GetAvailableRoutes(Array)#2 {main}在第9行抛出E:\ xampplite \ htdocs \ index1.php

回答

1

你需要format它,否则你会抛出一个DateTime对象到你的数组中(其中PHP尝试转换为字符串,它不工作)

例如:

$date->format('Y.m.d H:i:s'); 

使用

$sourceid = array('SourceID'=>'244','DestinationID'=>'477','DateOfJourney' => $date->format('Y.m.d H:i:s')); 
+0

感谢您的帮助,但直到不起作用 – azarmfa 2012-04-16 11:21:56

+0

你是否尝试了它作为参数而不是数组?你是否已经尝试转储生成的XML,如[SoapClient :: __ getLastRequest()](http://php.net/manual/en/soapclient.getlastrequest.php)中所述(请参阅评论) – 2012-04-16 11:39:54

+0

当我把日期时间格式返回“致命错误:未捕获SoapFault异常:[soap:Client]服务器无法读取请求---> XML文档(2,292)中存在错误--->字符串'2012- 04-17IST00:00:00'不是有效的AllXsd值“ – azarmfa 2012-04-16 11:50:09

8

我在使用PHP的SOAP服务时遇到了类似的问题。我固定它使用:

$date->format('c');

(ISO 8601日期,在PHP 5中添加,看起来像:2004-02-12T15:19:21 + 00:00)

+0

谢谢,它在php 5.5和服务器上的soap请求中工作api.mindbodyonline.com – 2014-03-07 21:08:01

+0

谢谢,我在肥皂请求中有同样的问题,现在它的工作原理 – jamseernj 2015-03-10 05:36:22

+0

这使我在拨打SoH Call给Ontime360的API时 – 2015-09-17 02:27:44