2011-12-19 33 views
5

Tôi đang sử dụng PayPal với API NVP (sử dụng PHP) để thanh toán nhanh. Tôi đang tạo một bản ghi hóa đơn trong cơ sở dữ liệu trước khi chuyển hướng người dùng đến Paypal. Trong trường hợp người dùng không quay lại trang web của tôi sau khi xử lý, tôi đang sử dụng IPN để xác nhận giao dịch mua và sau đó cập nhật hồ sơ hóa đơn thanh toán được xác nhận. Tôi vẫn đang ở chế độ sandbox và cố gắng tìm ra cách tôi sẽ bắt đầu giao dịch bằng NVP với xác nhận tôi nhận được với IPN.Paypal NVP với IPN để xác nhận - những gì liên kết chúng với nhau

Tôi cần xác minh xem "PAYMENTREQUEST_n_INVNUM" được gửi trong NVP sẽ trở lại dưới dạng "hóa đơn" trong bài đăng IPN hay không.

Có vẻ như tôi không thể thử nghiệm điều này cho đến khi tôi hoạt động vì IPN Sandbox dường như không hoạt động với giao dịch sandbox khởi động NVP - điều này có đúng không?

Cảm ơn sự giúp đỡ của bạn.

+0

Bạn có thể sử dụng trường tùy chỉnh để chuyển qua biến. Chỉ định một ID và sử dụng nó để liên kết các giao dịch. –

+0

Có, trường tùy chỉnh là lựa chọn thứ hai của tôi để lưu trữ số hóa đơn. Tôi đã hy vọng rằng 'hóa đơn' sẽ được dành riêng cho mục đích đó và tôi có thể sử dụng tùy chỉnh cho một số dữ liệu khác nếu cần thiết. – mseifert

Trả lời

6

Bạn có thể kiểm tra điều này trong Sandbox. Nhưng nếu bạn đang sử dụng "PayPal NVP", tôi cho rằng bạn đang sử dụng PayPal Express Checkout và gọi số API SetExpressCheckoutDoExpressCheckoutPayment.
Nếu trường hợp đó xảy ra, bạn không thực sự cần IPN, bởi vì giao dịch sẽ chỉ được hoàn thành ngay khi bạn gọi DoExpressCheckoutPayment.

Nói cách khác, người mua sẽ luôn được chuyển đến ReturnURL bạn chỉ định trong SetExpressCheckout, và giao dịch được hoàn thành (hoặc không) khi bạn gọi DoExpressCheckoutPayment trên trang trở lại này.

Để nhận số hóa đơn, bạn có thể gọi số GetExpressCheckoutDetails và cung cấp TOKEN bạn đã truy xuất trước đó (nó cũng được thêm vào GET của RETURNURL).

Cuối cùng, hãy kiểm tra PAYMENTSTATUS=Completed trong phản hồi API DoExpressCheckoutPayment để xem giao dịch đã hoàn tất hay chưa.

+0

Bạn chính xác, tôi đang sử dụng PayPal Express Checkout và gọi API SetExpressCheckout và DoExpressCheckoutPayment. Tôi đã được ấn tượng rằng một khi người dùng nhấp vào nút 'Trả ngay bây giờ' trên trang web của Paypal, nó được trả tiền cho. Nếu vì lý do nào đó, người dùng ngắt kết nối khỏi trang web của tôi trước khi được định tuyến lại, tôi sẽ không bao giờ nhận được xác nhận bán hàng. Dường như an toàn hơn có IPN làm bản sao lưu để xác nhận. – mseifert

+0

Không, giao dịch chỉ được hoàn tất sau khi bạn gọi là 'DoExpressCheckoutPayment' và bạn nhận được một 'PAYMENTSTATUS = Completed' trong phản hồi API. Đó là lý do tại sao Express Checkout không hiển thị nút 'Thanh toán ngay' trong thanh toán trên trang web PayPal. Thay vào đó, nó cho phép người dùng ủy quyền thanh toán và nếu họ hài lòng với nó, họ nhấp vào nút 'Tiếp tục' để tiếp tục.Nút 'Tiếp tục' sẽ tự động trở lại trang web của bạn, không chậm trễ, không gặp rắc rối, luôn luôn, 100% thời gian. Nếu người mua không truy cập URL trả lại của bạn, điều đó có nghĩa là họ không muốn tiếp tục với giao dịch PayPal. – Robert

+0

(Tuy nhiên, IPN luôn tốt để có bản sao lưu, tôi đồng ý. PAYMENTREQUEST_0_INVNUM sẽ khớp với thông số 'hóa đơn' trong POST IPN). – Robert

0

Cảm ơn bạn Robert vì sự rõ ràng về quy trình - đặc biệt là useraction = commit.

Cuối cùng tôi nhận ra rằng tôi có thể bật IPN trong Sandbox cho người bán thử nghiệm của mình và kiểm tra NVP với IPN cùng nhau. Tôi đã có thể xác minh rằng PAYMENTREQUEST_0_INVNUM khớp với tham số 'INVOICE' trong POST IPN.

Tôi sẽ sử dụng trường tùy chỉnh để chuyển email khách hàng từ hệ thống của tôi trong trường hợp họ sử dụng email khác để đăng nhập vào paypal, do đó cho phép tôi có cặp email/hóa đơn để xác nhận.

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