【问题标题】:Paypal Preapproval Start Date timezone?贝宝预批准开始日期时区?
【发布时间】:2011-12-27 11:26:24
【问题描述】:

我正在使用 Paypal Adaptive Payments 设置应用程序。

我目前正在实现对 Preapproval 的调用,并且规范说 StartDate 不能早于今天。

考虑到这一点......他们在哪个时区验证这一点?

API SDK 在示例中有这个:

$currDate = getdate();
$startDate = $currDate['year'].'-'.$currDate['mon'].'-'.$currDate['mday'];
$startDate = strtotime($startDate);
$startDate = date('Y-m-d', mktime(0,0,0,date('m',$startDate),date('d',$startDate),date('Y',$startDate)));
$endDate = add_date($startDate, 1);

但是,根据发送请求的服务器的时区,该日期可能会有所不同。

有人对如何确保不会发生任何问题有任何想法吗?

使用赏金编辑:

截至 12 月 15 日,我们现在已将此视为错误。我们使用的是 UTC 时间,一旦 UTC 时间开始新的一天,付款就会开始失败。

我在以下地方使用了上面的代码:

$preapprovalRequest->startingDate = $startDate;
$preapprovalRequest->endingDate = $endDate;

我需要什么来完成这项工作?

编辑 2:

是的,时区设置为 UTC,我们故意这样做,以便我们数据库中的所有时间信息都存储在没有时区的情况下。

基本上我想弄清楚如何指定我发送到 Paypal 的日期是 UTC,而不是他们碰巧在的任何时区。

编辑 3:

https://cms.paypal.com/us/cgi-bin/?cmd=_render-content&content_ID=developer/e_howto_api_APPreapproval

有 API,上面写着以下内容

startingDate 和endingDate 可以是eiter Zulu 或GMT 偏移量 格式。如以下各个示例中所示: 2010-09-10Z 2010-09-10T17:24:03.874-07:00

基本上我需要上面的代码来输出类似指定我正在使用 UTC...

【问题讨论】:

    标签: php timezone paypal


    【解决方案1】:

    PHP 时间函数基于系统时间 (http://us.php.net/manual/en/intro.datetime.php)。您确定您的系统设置为使用 UTC 时间吗?您可以检查以下内容:

    mpurcell@service1 ~/projects/config $ -> date
    Thu Dec 15 23:29:09 UTC 2011
    

    请注意响应中的 UTC。如果您的系统设置为其他时区,那么这可能是您的问题,如果您需要将时区设置为 UTC,请尝试:

    $ rm -f /etc/localtime
    $ ln -s /usr/share/zoneinfo/UTC /etc/localtime
    

    还要确保使用网络时间协议更正您的系统时间:

    $ ntpdate -b pool.ntp.org
    

    -- 编辑--

    根据您的编辑,看起来他们期望 Zulu(附加 Z)或带有偏移量的 GMT 时间(更复杂),试试这个:

    $preapprovalRequest->startingDate = $startDate . 'Z';
    $preapprovalRequest->endingDate = $endDate . 'Z';
    

    【讨论】:

    • 是的,我们的系统设置为使用 UTC 时间来帮助所有用户正确显示时间。
    • @AequitarumCustos:您是否检查了 API 文档以查看是否有 $preapprovalRequest->timezone 调用?
    • 从 API 文档中添加了 API 链接和时区信息。我不明白如何使用他们放在那里的东西。
    【解决方案2】:

    api documentation 表示它通过网络使用 GMT 或 Zulu 时间,并希望它有一个最后的“Z”来表示这一点(与 ISO 8601 一致)。

    关于 PreApproval API 操作的附加说明

    1. 预先批准的限制是附加的;因此,例如,如果您指定仅允许在星期五和每月 13 日付款的预先批准,则该预先批准将仅在指定时间段内的每月 13 日星期五有效。
    2. startingDate 和endingDate 可以是Zulu 或GMT 偏移格式。如下例所示:

    2010-09-10Z [注意:这是祖鲁语]

    2010-09-10T17:24:03.874-07:00 [注意:这是格林威治标准时间偏移]

    使用起来最安全的可能是这样的:

    $startingDate = gmdate('Y-m-d\Z', $startingDateTimestamp);
    

    但是,您必须绝对确保您自己服务器的时区(和时间!)设置正确。 您可能还需要在 PHP 应用程序中单独设置时区,使用 date_default_timezone_set()

    最后,还有一个问题——我不知道您使用的是什么 SDK。可能它试图变得聪明并将您传递的日期更改为其他内容。在这种情况下,您需要找出它所做的日期翻译以及预期的日期。 (例如,它可能需要系统本地时间中的日期,并将其更改为 UTC 时间。)假设它不会改变您提供的内容,但是,您应该能够使用上面的代码。

    【讨论】:

    • 感谢您提供详细信息,使用了其他解决方案,因此将其标记为已接受的解决方案,但这可能是找到此问题的用户的最佳答案,因此给您赏金!
    • @AequitarumCustos:这到底是怎么回事?只需将其标记为解决方案即可。将赏金奖励给一个人,将解决方案奖励给另一个人是没有意义的。
    猜你喜欢
    • 2015-12-19
    • 2015-05-06
    • 2013-02-02
    • 2014-08-25
    • 2015-08-20
    • 2012-07-21
    • 2013-03-18
    • 2019-10-22
    • 2015-02-09
    相关资源
    最近更新 更多