Paypal Pretoelatiostartdatum tijdzone?

I'm setting up an application using Paypal Adaptive Payments.

Momenteel implementeer ik de aanroep van de goedkeuring van de goedkeuring en de specificatie zegt dat de StartDatum niet eerder kan zijn dan vandaag.

Met dat in gedachten ... onder welke tijdzone valideren ze dit?

De API SDK heeft dit in het voorbeeld:

$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);

Die datum kan echter verschillend zijn op basis van de tijdzone van de server die het verzoek verzendt.

Heeft iemand ideeën over hoe ervoor te zorgen dat er geen problemen optreden?

Bewerk w/Bounty:

Vanaf 15 december zijn we dit nu tegengekomen als een fout. We gebruiken UTC-tijd en zodra het een nieuwe dag in UTC is, krijgen betalingen fouten.

Ik gebruik de bovenstaande code op de volgende plaats:

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

Wat heb ik nodig om dit te laten werken?

Bewerk 2:

Ja, de tijdzone is ingesteld als UTC, we hebben dit opzettelijk gedaan zodat alle tijdinformatie in onze database wordt opgeslagen zonder tijdzone.

In essentie probeer ik erachter te komen hoe ik kan specificeren dat de datum die ik naar Paypal stuur in UTC is, niet in welke tijdzone ze zich ook bevinden.

Bewerk 3:

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

Er is de API, en het zegt het volgende

De startdatum en einddatum kunnen in de Ziter of GMT offset zijn   formats. zoals in de volgende respectieve voorbeelden:   2010-09-10Z   2010-09-10T17: 24: 03.874-07: 00

In wezen heb ik de bovenstaande code nodig om zoiets als dat uit te geven dat aangeeft dat ik UTC gebruik ...

6

2 antwoord

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).

Aanvullende opmerkingen over de PreApproval API-bewerking

     
      
  1. Beperkingen voor goedkeuring zijn additief; dus, bijvoorbeeld, als u een pre-autorisatie specificeert die betalingen alleen op vrijdag en op de 13e dag van de maand toestaat, zou de pre-goedkeuring alleen geldig zijn op vrijdag de 13e van de maand binnen de gespecificeerde tijdsperiode.
  2.   
  3. De startingDate en endingDate kunnen in eiter Zulu- of GMT-offsetformaten zijn. zoals in de volgende respectieve voorbeelden:
  4.   
     

2010-09-10Z [OPMERKING: DIT IS ZULU]

     

2010-09-10T17: 24: 03.874-07: 00 [OPMERKING: DIT IS GMT OFFSET]

Het veiligste om te gebruiken is waarschijnlijk dit:

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

U moet er echter absoluut zeker van zijn dat de tijdzone (en tijd!) Van uw eigen server correct is ingesteld. Mogelijk moet u ook de tijdzone afzonderlijk instellen in uw PHP-toepassing met 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
toegevoegd
Bedankt voor de gedetailleerde informatie, gebruik de andere oplossing zo gemarkeerd als geaccepteerde oplossing, maar dit is waarschijnlijk het beste antwoord voor gebruikers die deze vraag vinden, zodat u de premie krijgt!
toegevoegd de auteur Brett Allen, de bron
@AequitarumCustos: Wat maakt het uit? Markeer de oplossing dan gewoon. Het heeft geen zin om beloningen toe te kennen aan de ene en oplossing voor de ander.
toegevoegd de auteur Mike Purcell, de bron

PHP-tijdfuncties zijn gebaseerd op systeemtijd ( http://us.php.net/ manual/nl/intro.datetime.php ). Weet je zeker dat je systeem is ingesteld om UTC-tijd te gebruiken? U kunt het volgende controleren:

[email protected] ~/projects/config $ -> date
Thu Dec 15 23:29:09 UTC 2011

Let op de UTC in het antwoord. Als uw systeem is ingesteld op een andere tijdzone, dan is dat mogelijk uw probleem. Als u uw tijdzone wilt instellen op UTC, probeert u het volgende:

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

Zorg er ook voor dat uw systeemtijd wordt gecorrigeerd met behulp van Network Time Protocol:

$ ntpdate -b pool.ntp.org

-- Bewerk --

Op basis van uw bewerkingen ziet het ernaar uit dat ze de tijd in Zulu (append Z) of GMT met offset (complexer) verwachten, probeer dit:

$preapprovalRequest->startingDate = $startDate . 'Z';
$preapprovalRequest->endingDate = $endDate . 'Z';
2
toegevoegd
Ja, ons systeem is ingesteld om UTC-tijd te gebruiken om alle gebruikers een juiste tijdsaanduiding te bieden.
toegevoegd de auteur Brett Allen, de bron
API-koppeling en info over tijdzone toegevoegd vanuit het API-document. Ik begrijp niet hoe ik moet gebruiken wat ze daar plaatsen.
toegevoegd de auteur Brett Allen, de bron
Het toevoegen van de Z werkte perfect, dank je!
toegevoegd de auteur Brett Allen, de bron
@AequitarumCustos: Hebt u de API-documenten gecontroleerd om te zien of er een $ preapprovalRequest-> timezone -aanroep is?
toegevoegd de auteur Mike Purcell, de bron
@AequitarumCustos: Bijgewerkt bericht ...
toegevoegd de auteur Mike Purcell, de bron
@AequitarumCustos: werkte het?
toegevoegd de auteur Mike Purcell, de bron