2011-12-19 48 views
5

我正在使用PayPal與NVP API(使用PHP)進行快速結賬。在將用戶重定向到PayPal之前,我正在數據庫中創建發票記錄。如果用戶在處理後沒有返回到我的網站,我正在使用IPN確認購買,然後更新確認付款的發票記錄。我仍然處於沙箱模式,並試圖弄清楚如何將開始使用NVP的交易與我通過IPN獲得的確認結合起來。貝寶NVP與IPN確認 - 什麼將他們綁在一起

我需要驗證在NVP中發送的「PAYMENTREQUEST_n_INVNUM」是否會在IPN帖子中作爲「發票」返回。

看來我實際上無法測試,直到我活着,因爲Sandbox IPN似乎並未與NVP發起的沙箱事務處於活動狀態 - 這是正確的嗎?

感謝您的幫助。

+0

您可以使用自定義字段作爲傳遞變量。分配一個ID,並使用它來鏈接事務。 – 2011-12-19 22:20:24

+0

是的,自定義字段是我第二個選擇存儲發票號碼。我希望'發票'將專門用於此目的,如果需要,我可以使用自定義的一些其他數據。 – mseifert 2011-12-19 22:57:06

回答

6

可以在沙盒中測試這個。但是如果您使用的是「PayPal NVP」,我假設您使用PayPal Express Checkout並調用SetExpressCheckoutDoExpressCheckoutPayment API。
如果是這種情況,您並不需要IPN,因爲只要您致電DoExpressCheckoutPayment,交易就會完成。

換言之,買家將總是被重定向到您在SetExpressCheckout指定的RETURNURL,並在交易完成後(或不)當你調用這個返回頁面DoExpressCheckoutPayment

要獲得發票號碼,您可以撥打GetExpressCheckoutDetails並提供之前檢索到的TOKEN(它也會附加到RETURNURL的GET中)。

最後,在DoExpressCheckoutPayment API響應中檢查PAYMENTSTATUS=Completed以查看事務是否已完成。

+0

您是對的,我正在使用PayPal Express Checkout並調用SetExpressCheckout和DoExpressCheckoutPayment API。我的印象是,一旦用戶點擊了Paypal網站上的「Pay Now」按鈕,它就會被支付。如果出於任何原因,用戶在重新路由之前斷開與我的網站的連接,我將永遠無法獲得銷售確認。 IPN作爲確認的備份似乎更安全。 – mseifert 2011-12-19 22:40:48

+0

不,只有在您調用「DoExpressCheckoutPayment」並且您在API響應中收到了「PAYMENTSTATUS = Completed」後才完成交易。這就是爲什麼Express Checkout在PayPal網站結帳時不顯示「立即付款」按鈕。相反,它允許用戶授權付款,如果他們滿意,他們點擊「繼續」按鈕繼續。「繼續」按鈕會自動返回到您的網站,不會有任何延遲,沒有麻煩,總是100%的時間。如果買家沒有收到您的退貨網址,這隻表示他們不想繼續進行PayPal交易。 – Robert 2011-12-19 22:45:25

+0

(儘管如此,IPN總是很好的備份,我同意PAYMENTREQUEST_0_INVNUM將匹配IPN POST中的'invoice'參數)。 – Robert 2011-12-19 22:46:03

0

謝謝羅伯特對流程的清晰度 - 特別是useraction = commit。

我終於意識到我可以在我的測試賣家的Sandbox中打開IPN,並用IPN一起測試NVP。我能夠驗證PAYMENTREQUEST_0_INVNUM與IPN POST中的'INVOICE'參數相匹配。

我將使用自定義字段從我的系統傳遞客戶電子郵件,以防他們使用不同的電子郵件登錄貝寶,因此允許我使用電子郵件/發票號碼對進行確認。