Paypal Preapproval开始日期时区?

Bre*_*len 6 php timezone paypal

我正在使用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);
Run Code Online (Sandbox Code Playgroud)

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

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

编辑w/Bounty:

截至12月15日,我们现在遇到这个错误.我们正在使用UTC时间,一旦它在UTC中开启新的一天,付款开始失败.

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

$preapprovalRequest->startingDate = $startDate;
$preapprovalRequest->endingDate = $endDate;
Run Code Online (Sandbox Code Playgroud)

我需要做什么才能做到这一点?

编辑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的东西......

Fra*_*ila 7

API文档称,它GMT或祖鲁时间过线,并期望它有一个最终的"Z",以表明这(与ISO 8601相一致).

有关PreApproval API操作的其他说明

  1. 预批准限制是附加的; 因此,例如,如果你指定一个批准前,只允许在周五和上月的第13天支付,事先批准将是有效的只在指定的时间内月13号星期五.
  2. startingDate和endingDate可以是eiter Zulu或GMT偏移格式.如以下各个例子所示:

2010-09-10Z [注意:这是ZULU]

2010-09-10T17:24:03.874-07:00 [注意:这是GMT OFFSET]

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

$startingDate = gmdate('Y-m-d\Z', $startingDateTimestamp);
Run Code Online (Sandbox Code Playgroud)

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

最后,还有另一个问题 - 我不知道您使用的是什么SDK.可能它试图变得聪明并将你传递的日期改为其他东西.在这种情况下,您需要找出它执行的日期转换以及预期的日期.(例如,也许它希望在系统本地时间日期,它会变成一个UTC时间.)假设它不会改变你提供什么,但是,你应该能够使用上面的代码.


Mik*_*ell 2

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

mpurcell@service1 ~/projects/config $ -> date
Thu Dec 15 23:29:09 UTC 2011
Run Code Online (Sandbox Code Playgroud)

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

$ rm -f /etc/localtime
$ ln -s /usr/share/zoneinfo/UTC /etc/localtime
Run Code Online (Sandbox Code Playgroud)

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

$ ntpdate -b pool.ntp.org
Run Code Online (Sandbox Code Playgroud)

- 编辑 -

根据您的编辑,看起来他们期望祖鲁语(附加 Z)或带有偏移量的 GMT(更复杂)的时间,请尝试以下操作:

$preapprovalRequest->startingDate = $startDate . 'Z';
$preapprovalRequest->endingDate = $endDate . 'Z';
Run Code Online (Sandbox Code Playgroud)