Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/242.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 贝宝预批准开始日期时区?_Php_Timezone_Paypal - Fatal编程技术网

Php 贝宝预批准开始日期时区?

Php 贝宝预批准开始日期时区?,php,timezone,paypal,Php,Timezone,Paypal,我正在使用Paypal自适应支付设置一个应用程序 我目前正在执行对预批准的调用,规范中说启动日期不能早于今天 考虑到这一点。。。他们在哪个时区下进行验证 API SDK在示例中包含以下内容: $currDate = getdate(); $startDate = $currDate['year'].'-'.$currDate['mon'].'-'.$currDate['mday']; $startDate = strtotime($startDate); $startDate = date('Y

我正在使用Paypal自适应支付设置一个应用程序

我目前正在执行对预批准的调用,规范中说启动日期不能早于今天

考虑到这一点。。。他们在哪个时区下进行验证

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:

有一个API,它说

开始日期和结束日期可以是eiter Zulu或GMT偏移量 格式。如以下各示例所示: 2010-09-10Z 2010-09-10T17:24:03.874-07:00


基本上,我需要上面的代码,以输出类似于指定我使用UTC…

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';
该公司表示,它在线路上使用GMT或Zulu时间,并希望最后有一个“Z”来表示这一点(与ISO 8601一致)

关于预批准API操作的附加说明

  • 预批准约束是加性的;因此,例如,如果指定只允许在星期五和每月13日付款的预批准,则预批准仅在指定时间段内的每月13日星期五有效
  • 开始日期和结束日期可以是eiter Zulu或GMT偏移格式。如以下各示例所示:
  • 2010-09-10Z
    [注:我是祖鲁]

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

    最安全的使用方法可能是:

    $startingDate = gmdate('Y-m-d\Z', $startingDateTimestamp);
    
    但是,您必须绝对确保您自己的服务器的时区(和时间!)设置正确您可能还需要在PHP应用程序中使用单独设置时区


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

    是的,我们的系统设置为使用UTC时间来帮助所有用户正确显示时间。@AequitarumCustos:您是否检查API文档以查看是否有
    $preapprovalRequest->timezone
    调用?从API文档中添加了API链接和时区信息。我不明白如何使用他们放在那里的内容。感谢您提供的详细信息,使用了另一个解决方案,因此将其标记为可接受的解决方案,但对于发现此问题的用户来说,这可能是最好的答案,因此给您奖金@埃奎塔鲁马库斯托斯:怎么回事?那么就把这个标记为解决方案。将赏金授予其中一方,将解决方案授予另一方是没有意义的。