9

Pickup Service を使用して集荷をスケジュールしようとしています。最初に 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>

2 つのリクエストの完全なリクエスト/レスポンス コードは次のとおりです: http://pastebin.com/jqtfsRFc

UPD:コメントでの議論による詳細

それが ReadyTimestamp について書かれていることです。時間は、PickupAvailabilityRequest で検出できる CutOffTime より遅くてはなりません。

そこで、集荷の空き状況をリクエストすると、次のような返信が表示されます。

<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 (郵便番号から取得) に従って使用されます。Out local TZ は、UTC から -07:00 のオフセットを持つ PST です。Pickup Availability の返信にも、私の Pickup Availability リクエストが処理された時刻を示す行があります。私はそれがPSTにもあることを確認したので、このステップはうまくいっているようです: <v3:RequestTimestamp>2013-03-26T11:58:37</v3:RequestTimestamp>

そのため、締め切り時間は 16:00 PST になりました。次のステップは、Create Pickup リクエストを使用して、締め切り時間より遅くない時間に実際の集荷をスケジュールすることです。このリクエストReadyTimestampには TZ 情報が含まれている必要があるため、さまざまな日付/時刻形式を試しました。したがって、14:00 PST の集荷を作成する場合は、、、、2013-04-09T21:00:00およびを2013-04-09T21:00:00.000Z試します。これらすべてのケースで、エラーが発生します。さまざまな値を試してみたところ、最新の時刻は 04:00 PST (11:00 UTC と同じ) であることがわかりました。したがって、04:00 が私に与え、04:01 が与えられ、任意の日付/時刻形式でこのように機能します。2013-04-09T21:00:00+00:002013-04-09T14:00:00-07:00Ready Time after Cutoff TimesuccessReady Time after Cutoff Time

4

4 に答える 4

3

CreatePickupRequestReadyTimestampの例(76 ページ)にあることに気付きましたか?

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

タイムゾーン コードで指定されます。

アップデート。github のphp fedex api wrapper または phpclasses の fedex api wrapperを確認できます。

于 2013-04-02T04:00:24.370 に答える
1

WebServiceリクエストでDateを渡したい場合DateTime、WSDLのデータ型は

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);
于 2013-04-05T07:30:08.297 に答える