Paypal Preapproval Дата початку Дата часового поясу?

Я створюю програму, використовуючи 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);

Однак ця дата може відрізнятися в залежності від часового поясу сервера, який надсилає запит.

У кого є якісь ідеї про те, як забезпечити відсутність проблем?

Редагувати ж/Bounty:

Станом на 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, і в ньому написано наступне

Початкова дата і кінцева дата можуть бути зміщені на Zulu або GMT   форматів. як у наступних відповідних прикладах:   2010-09-10Z   2010-09-10T17: 24: 03.874-07: 00

По суті, мені потрібен вищезгаданий код, щоб вивести щось на зразок того, що я використовую UTC ...

6

2 Відповіді

The api documentation says it uses GMT or Zulu time over the wire, and expects it to have a final 'Z' to indicate this (consistent with ISO 8601).

Додаткові примітки щодо операції API PreApproval

     
      
  1. Обмеження на попереднє підтвердження є адитивними; таким чином, наприклад, якщо ви вказуєте попереднє схвалення, яке дозволяє здійснювати платежі лише по п'ятницях і на 13-й день місяця, попереднє схвалення буде дійсним лише в п'ятницю 13-го місяця протягом вказаного періоду часу.
  2.   
  3. Початкова та кінцеваДовід може бути у форматі зміщення Зулу або GMT. як у наступних прикладах:
  4.   
     

2010-09-10Z [ПРИМІТКА: ЦЕ ТАКЕ ZULU]

     

2010-09-10T17: 24: 03.874-07: 00 [ПРИМІТКА: Це GMT ​​OFFSET]

Найбезпечніше використовувати це, ймовірно, це:

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

Проте ви повинні бути абсолютно впевнені, , що часовий пояс (і час!) Вашого сервера правильно встановлено. Можливо, вам також знадобиться встановити часовий пояс окремо у вашому застосунку PHP за допомогою date_default_timezone_set() .

Finally, there's another wrinkle--I do not know what SDK you are using. Possibly it tries to be clever and changes the date you pass in to something else. In that case you need to find out what date translation it does and what date it expects. (E.g., perhaps it expects a date in the system-local time, and it changes it to a UTC time.) Assuming it doesn't alter what you supply, however, you should be able to use the code above.

7
додано
Дякуємо за докладну інформацію, скористалися іншим рішенням, щоб позначити його як прийняте рішення, але це, напевно, буде найкращою відповіддю для користувачів, які знайдуть це питання таким чином, щоб ви отримали нагороду!
додано Автор Brett Allen, джерело
@AequitarumCustos: Що за чорт? Просто відзначте це рішення тоді. Не має сенсу присуджувати щедрість одному і рішення іншому.
додано Автор Mike Purcell, джерело

Функції часу PHP засновані на системному часі ( http://us.php.net/ manual/en/intro.datetime.php ). Ви впевнені, що ваша система налаштована на використання часу UTC? Ви можете перевірити наступне:

[email protected] ~/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

- Редагувати -

Виходячи з ваших редагувань, схоже, що вони очікують часу в будь-якому з зулу (додавання Z) або GMT зі зміщенням (більш складним), спробуйте це:

$preapprovalRequest->startingDate = $startDate . 'Z';
$preapprovalRequest->endingDate = $endDate . 'Z';
2
додано
Так, наша система налаштована на використання часу UTC, щоб допомогти всім користувачам правильно відображати час.
додано Автор Brett Allen, джерело
Додано посилання API та відомості про часовий пояс з документа API. Я не розумію, як використовувати те, що вони там поставили.
додано Автор Brett Allen, джерело
Додавання Z відмінно працювало, спасибі!
додано Автор Brett Allen, джерело
@AequitarumCustos: Чи перевіряли документи API, щоб дізнатися, чи є виклик $ preapprovalRequest-> timezone ?
додано Автор Mike Purcell, джерело
@AequitarumCustos: оновлено повідомлення ...
додано Автор Mike Purcell, джерело
@AequitarumCustos: Чи спрацювало це?
додано Автор Mike Purcell, джерело
Ukrainian PHP comunity
Ukrainian PHP comunity
885 учасників

dev-ua/php