2011-11-12 35 views
6

Tôi đang thiết lập một ứng dụng bằng Paypal Thanh toán thích ứng.Paypal Thời gian ngày bắt đầu phê duyệt trước?

Tôi hiện đang triển khai cuộc gọi đến phê duyệt trước và đặc điểm kỹ thuật cho biết StartDate không thể trước ngày hôm nay.

Với ý nghĩ đó ... theo múi giờ nào họ xác thực tính năng này chống lại?

SDK API có này trong ví dụ:

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

Tuy nhiên thời điểm đó có thể khác nhau dựa trên múi giờ của máy chủ gửi yêu cầu.

Bất kỳ ai có bất kỳ ý tưởng nào về cách đảm bảo không có vấn đề nào sẽ xảy ra?

Sửa w/Bounty:

Tính đến ngày 15 tháng 12, chúng ta đã chạy vào trong này là một lỗi. Chúng tôi đang sử dụng thời gian UTC, và một khi nó biến một ngày mới trong UTC, các khoản thanh toán bắt đầu thất bại.

Tôi đang sử dụng đoạn mã trên tại địa điểm sau:

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

sao tôi cần phải làm cho công việc này là gì?

Chỉnh sửa 2:

Có múi giờ được thiết lập như UTC, chúng tôi đã làm điều này cố ý để mọi thông tin thời gian trong cơ sở dữ liệu của chúng tôi được lưu trữ mà không cần múi giờ.

Về cơ bản tôi đang cố gắng để tìm ra cách để xác định rằng ngày tôi gửi đến Paypal là ở UTC, không bất cứ điều gì múi giờ chúng xảy ra được trong

Sửa 3:.

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

có API, và nó nói như sau

các STARTINGDATE và vào ENDINGDATE có thể ở eiter Zulu hoặc giờ bù đắp hình thức ats. như trong ví dụ tương ứng sau: 2010-09-10Z 2010-09-10T17: 24: 03.874-07: 00

Về cơ bản tôi cần mã trên, một cái gì đó sản lượng như nêu rõ rằng tôi đang sử dụng UTC ...

Trả lời

2

Chức năng thời gian PHP dựa trên thời gian hệ thống (http://us.php.net/manual/en/intro.datetime.php). Bạn có chắc chắn rằng hệ thống của bạn được thiết lập để sử dụng thời gian UTC? Bạn có thể kiểm tra các thông tin sau:

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

Thông báo UTC trong phản hồi.Nếu hệ thống của bạn được thiết lập để một số múi giờ khác, sau đó có thể được vấn đề của bạn, nếu bạn cần phải thiết lập múi giờ của bạn để UTC, hãy thử:

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

Ngoài ra hãy chắc chắn rằng thời gian hệ thống của bạn được sửa chữa sử dụng Network Time Protocol:

$ ntpdate -b pool.ntp.org 

- Edit -

Dựa trên các chỉnh sửa của bạn, có vẻ như họ đang mong đợi thời điểm đó trong cả hai Zulu (append Z) hoặc giờ với offset (phức tạp hơn), hãy thử này:

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

Có hệ thống của chúng tôi được thiết lập để sử dụng thời gian UTC để hỗ trợ cho phép tất cả người dùng hiển thị đúng thời gian. –

+0

@AequitarumCustos: Bạn đã kiểm tra tài liệu API để xem liệu có lệnh gọi '$ preapprovalRequest-> múi giờ 'hay không? –

+0

Đã thêm liên kết API và thông tin về múi giờ từ tài liệu API. Tôi không hiểu cách sử dụng những gì họ đặt ở đó. –

7

api documentation nói rằng nó sử dụng giờ GMT hoặc Zulu qua dây và hy vọng nó có 'Z' cuối cùng để biểu thị điều này (phù hợp với ISO 8601).

Ghi chú thêm về các hoạt động API phê chuẩn trước

  1. chế phê chuẩn trước là phụ gia; do đó, ví dụ, nếu bạn chỉ định một phê duyệt trước cho phép thanh toán chỉ vào các ngày thứ Sáu và ngày thứ 13 của tháng, thì việc phê duyệt trước sẽ chỉ có giá trị vào thứ Sáu ngày 13 tháng trong khoảng thời gian đã chỉ định.
  2. Ngày bắt đầu và ngày kết thúc có thể ở định dạng eiter Zulu hoặc GMT. như trong ví dụ tương ứng sau:

2010-09-10Z[LƯU Ý: ĐÂY LÀ Zulu]

2010-09-10T17:24:03.874-07:00[LƯU Ý: ĐÂY LÀ giờ OFFSET]

Điều an toàn nhất để sử dụng là có thể là:

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

Tuy nhiên, bạn phải đảm bảo hoàn toàn chắc chắn rằng múi giờ của máy chủ của riêng bạn (và thời gian!) Được đặt chính xác. Bạn cũng có thể cần đặt múi giờ riêng trong ứng dụng PHP bằng cách sử dụng date_default_timezone_set().

Cuối cùng, có một nếp nhăn khác - Tôi không biết bạn đang sử dụng SDK nào. Có thể nó cố gắng thông minh và thay đổi ngày bạn chuyển sang cái gì khác. Trong trường hợp đó, bạn cần phải tìm ra bản dịch ngày nào và ngày nào nó muốn. (Ví dụ, có lẽ nó mong đợi một ngày trong thời gian địa phương hệ thống, và nó thay đổi nó thành một thời gian UTC.) Giả sử nó không thay đổi những gì bạn cung cấp, tuy nhiên, bạn sẽ có thể sử dụng mã ở trên.

+0

Cảm ơn thông tin chi tiết, sử dụng giải pháp khác để đánh dấu nó là giải pháp được chấp nhận, nhưng điều này có lẽ sẽ là câu trả lời tốt nhất cho những người dùng tìm câu hỏi này để bạn có được tiền thưởng! –

+1

@AequitarumCustos: Cái quái gì? Chỉ cần đánh dấu giải pháp này sau đó.Không có ý nghĩa để trao tiền thưởng cho một và giải pháp cho người khác. –

Các vấn đề liên quan