Fedex Web服务(SOAP):代答服务

时间:2013-03-27 21:48:31

标签: php soap fedex

我正在尝试使用代答服务安排取件。首先,我发送Pickup Availability请求以获得截止时间,然后使用我在Pickup Request中获得的结果。但在那之后我得到错误“切断时间后的准备时间”显然是在截止时间之前的时间。在我的例子中,返回的截止时间是16:00,但我可以安排取件的最晚时间是11:00。 提货可用性响应的一部分:

<v3:ScheduleDay>SAME_DAY</v3:ScheduleDay>
<v3:Available>true</v3:Available>
<v3:PickupDate>2013-04-02</v3:PickupDate>
<v3:CutOffTime>16:00:00</v3:CutOffTime>

产生错误的计划提取请求的一部分:

<ns1:ReadyTimestamp>2013-04-02T13:00:00</ns1:ReadyTimestamp>
<ns1:CompanyCloseTime>20:00:00</ns1:CompanyCloseTime>

以下是两个请求的完整请求/响应代码:http://pastebin.com/jqtfsRFc

UPD :根据评论中的讨论提供更多详情

  

这就是关于ReadyTimestamp的内容,时间必须不晚   比CutOffTime,可以发现   PickupAvailabilityRequest。

所以我提出了一个取件可用性请求,并看到答复:

<v3:ScheduleDay>SAME_DAY</v3:ScheduleDay>
<v3:Available>true</v3:Available>
<v3:PickupDate>2013-04-09</v3:PickupDate>
<v3:CutOffTime>16:00:00</v3:CutOffTime>

文档说明,根据本地TZ(取自邮政编码)使用取件可用性的时间戳。本地TZ是PST,其与UTC的偏移为-07:00。提货可用性回复中还有一行表示处理我的提货可用性请求的时间。我检查并发现它也在PST中,所以这一步看起来很好: <v3:RequestTimestamp>2013-03-26T11:58:37</v3:RequestTimestamp>

因此我得到截止时间为太平洋标准时间16:00,下一步是使用创建分拣请求安排实际取件时间不晚于截止时间。对于此请求,ReadyTimestamp应包含TZ信息,因此我尝试了不同的日期/时间格式。因此,如果我想在太平洋标准时间14:00创建取件,请尝试2013-04-09T21:00:002013-04-09T21:00:00.000Z2013-04-09T21:00:00+00:002013-04-09T14:00:00-07:00。在所有这些情况下,我收到错误Ready Time after Cutoff Time。我尝试了很多不同的值,发现最新的工作时间是太平洋标准时间04:00(与UTC时间11:00相同)。因此,04:00给我success,04:01给Ready Time after Cutoff Time,它以任何日期/时间格式运行。

4 个答案:

答案 0 :(得分:3)

您是否注意到page 76示例CreatePickupRequest 中的ReadyTimestamp

<q0:ReadyTimestamp>2011-08-02T08:00:18.282Z</q0:ReadyTimestamp>
<q0:CompanyCloseTime>17:00:00</q0:CompanyCloseTime>

给出了timezone code

UPD。您可以从github检查php fedex api wrapper或从phpclasses检查fedex api wrapper

答案 1 :(得分:1)

如果要在Web Service请求中传递Date,则WSDL的DateTime数据类型为

class DateTime2 extends DateTime {
    function __toString() { 
        return $this->format("Y-m-d\TH:i:s.000\Z");
    }
}

$date = new DateTime2();

$client = new SoapClient(
    "http://www.myos.it/sp/smartphonelayer.asmx?wsdl", 
    array("trace" => 1)
);

$result = $client->SetReservation(array("RDescription"=>"Giuseppe Silvestri",
                                        "RNumber"=>2,
                                        "RPhoneNumber"=>"3286026817",
                                        "RDate"=>$date.""));

echo "REQUEST:".$client->__getLastRequest()."<br>"; 

print_r($result);

答案 2 :(得分:1)

createPickup请求中的ReadyTimestamp将时间戳记作为值

示例:&#39; ReadyTimestamp&#39;:&#39; 1404891463&#39;

这将有效

答案 3 :(得分:0)

你必须有以下区别: a-包装准备好了 b-截止时间 c-公司关闭时间。

因此,如果您的邮政编码的截止时间为16:00,那么您的包裹必须在此之前准备就绪,并且您的公司必须在几个小时后开放。

我的建议。公司关闭时间为19:00,联邦快递最新的取件时间通常为17小时,所有邮政编码。那2个你的是因为当你要求提货时,货车快递有2小时到达那个地方,如果你的公司关闭时间距离提货请求只有1小时,你将遇到问题。

希望它有所帮助。