2013-01-21 53 views
2

我正在改進PayPal IPN偵聽器。我已閱讀規格,但仍有一些未解決的問題。衆所周知,如果您收到通知,您必須在第二個渠道上連接PayPal,向他們發送收到的數據,PayPal將使用VERIFIED或INVALID進行回答。在某些情況下,PayPal會重新發送通知,直到收到我們的回覆。 PayPal有一個名爲「IPN歷史」的調試頁面。PayPal IPN - 如果響應無效,將發送什麼http狀態頭?

我至少有一次收到INVALID的場合,「IPN歷史記錄」顯示「已發送」的正常狀態。

問題1:PayPal沒有檢查我是否在第二個通道上連接它們以確定郵件是否正確發送是否正確?問題2:我假設PayPal看起來完全在它從我們收到的http狀態標題(例如「200 OK」),以決定在「IPN歷史記錄」中顯示什麼狀態。它是否正確?

問題3:我還假設PayPal只看http狀態標題以決定是否必須重新發送消息。那是對的嗎?

我收到INVALID的PayPal付款現在在PayPal中顯示爲正常付款。但稍後沒有另外通知。

Q4:我認爲這種行爲是一個內部的PayPal的問題,要做到這一點正確的方法是告訴貝寶,以便它發送其他通知在5分鐘後出現了錯誤。那是對的嗎?

Q5:如果是這樣,如果我收到INVALID以確保PayPal稍後重新發送通知,那麼我必須發送什麼http狀態頭返回給PayPal?

謝謝!

+0

一些解釋:我們做了很多PayPal付款。通常他們工作正常。我們收到「INVALID」的時候,它應該真的被「驗證」,也許在一千個案例中有一次。我寫了一個測試腳本再做第二個通道驗證,完全相同的方式,因爲它以前做過,現在貝寶與「已檢查」響應爲是「無效」以前的案件。我認爲PayPal發送錯誤的狀態是因爲它們的內部計時問題。所以這是關於邊緣情況,以及如何告訴貝寶重新發送他們的信息。謝謝! – CruftyCraft

回答

4

A1)正確。他們只是將數據發佈到您的腳本,如果他們從服務器獲得200 OK,他們認爲這是一筆交易,無論您是否回發驗證。

A2)正確。

A3)正確。如果付款確實是合法的PayPal付款,那麼您將其發回給他們進行驗證的方式肯定有問題。它的格式必須與最初發送給您的格式完全相同。

A4)只要你回來後的數據被格式化的方式也不會相同無效。使用堅實的腳本放在一起,您不必將任何特定的非200消息發送回PayPal再試一次。如果您已經正確配置了所有內容,它將進行驗證,您的腳本將以200 OK完成。如果事情是不對您的腳本可能要麼最終無效(但仍然返回一個200 OK這樣你就不會得到另一個),或者它會返回200以外的東西在這種情況下,它會重新發布該數據你以後。

A5)如果您要發送超過200回的任何其他會重新嘗試,但如果你結束了一堆失敗的被重新嘗試,他們就會把你延遲闕,你不會得到你的IPN和你通常一樣快,所以我不會推薦它。您希望避免來自IPN腳本的200個結果以外的任何內容。

+1

當然,如果它真的是無效的,即來自其他地方作爲僞造品,你不想讓他們知道你所知道的,所以你應該發送200,並讓他們在他們沒有得到服務後再摔倒或產品。 – EJP

+0

是的,只是爲了重申那一點,沒有理由讓腳本僅僅因爲無效而返回失敗的代碼。將IPN記錄爲無效,但在系統中相應處理。腳本本身可以成功地將訂單保存爲無效,這將返回200 OK返回到發送給它的任何內容。 –

+0

謝謝安德魯和EJP!我得到了關於「關閉僞造者」和「延遲IPN治療」的論點。因此,我得出結論說,沒有設想和安全的方式告訴PayPal他們應該通過IPN重新發送他們的數據。爲了獲得我們的PayPal賬戶的完美副本,我們因此必須添加一些與PayPal同步的替代機制。謝謝。 – CruftyCraft