【发布时间】:2013-03-27 21:48:30
【问题描述】:
我正在尝试使用取件服务安排取件。首先我发送 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:更多细节根据cmets中的讨论
这就是写的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:00、2013-04-09T21:00:00.000Z、2013-04-09T21:00:00+00:00 和 2013-04-09T14:00:00-07:00。在所有这些情况下,我都会收到错误Ready Time after Cutoff Time。我尝试了许多不同的值,发现它的最新工作时间是 04:00 PST(与 11:00 UTC 相同)。所以 04:00 给了我success 和 04:01 给了Ready Time after Cutoff Time 并且它适用于任何日期/时间格式。
【问题讨论】:
-
您在请求中发送的时间格式是否正确?我看到了
<ns1:ReadyTimestamp>2013-04-02T13:00:00</ns1:ReadyTimestamp>,他们想这样接收吗?抱歉,我从未使用过 FedEx 的 API,但我想我会做一些挖掘工作,因为您在这个问题上没有采取太多行动。 -
@zjd 您好,感谢您关注我的问题。我对 SOAP 没有太多经验,据我所知,日期时间字段应该以这种方式格式化,或者也可以包含毫秒。首先,我认为毫秒在这种情况下是无关紧要的。他们还在回复中发送请求时间戳,并且格式相同。为了 100% 确定我尝试了所有可能的组合,我现在将尝试以毫秒为单位。
-
是的,与日期“2013-04-02T14:00:00.000Z”相同
-
可能是时区问题?
-
@zjd 我不这么认为,根据文档,请求和回复中的所有日期都以取货地址的时区提供。因此,即使我的时区有问题,请求和回复中的日期也应该相互匹配。