2015-04-04 34 views
1

我正在使用PayPal IPN,我有以下問題:是否有可能擁有兩個具有相同txn_id和payment_status參數的IPN消息?txn_id和payment_status使PayPal IPN獨一無二?

例如:

  1. IPN:txn_id = 4BB79227HY951745W & PAYMENT_STATUS =未決
  2. IPN:txn_id = 4BB79227HY951745W & PAYMENT_STATUS = idontknowwhat
  3. IPN:tnx_id = 4BB79227HY951745W & PAYMENT_STATUS =未決
  4. IPN :txn_id = 4BB79227HY951745W & payment_status =已完成

所以我的問題基本上是txn_id和payment_status一起使消息唯一或不是?

又如:

如果我有一個SQL查詢,如:

SELECT * FROM交易WHERE txn_id = 4BB79227HY951745W AND PAYMENT_STATUS =東西

將其與一個以上的行返回? (如果我沒有存儲由PayPal重新發送的任何消息,因爲缺少200 OK響應消息或響應時間較慢或類似此類情況。)

我之前閱讀過此主題:PayPal IPN unique identifier。這聽起來是這兩個參數使消息獨一無二,但我不確定。

+0

恕我直言,這不是關於「唯一性」本身,因爲IPN是交易的消息服務(在**改變狀態**)。它甚至具有「IPN協議」(https://developer.paypal.com/webapps/developer/docs/classic/ipn/integration-guide/IPNIntro/#protocol_and_arch)中所述的「重試」,這在答案中討論過您引用/鏈接到的帖子。 – EdSF 2015-04-04 16:14:54

+0

謝謝你的回答。我理解這一點,但我想存儲與交易相關的所有內容,但我不想多存儲一次。因此,在將交易數據保存到我的數據庫之後,我必須知道是否發送了新的IPN消息,因爲該事務「更改了」,或者由於某種原因而被PayPal IPN服務重新發送。 – bazsibazsi 2015-04-04 16:26:10

回答

0

我認爲txn_idpayment_status單獨不足以使IPN獨一無二。由於你的情況要保存相關的每個給定的交易IPN,您也應該檢查pending_reason值:

比方說,你已經創建使用Authorization - Capture模型交易,您的交易經過Instant Payment Review (IPR)。你將有這樣的事情作爲IPN:

IPN 1:TXN進入,接受審議(IPR)

[payment_status] => Pending 
[txn_id] => 0CD48848U16230847 
[pending_reason] => paymentreview 
[txn_type] => express_checkout 
[auth_status] => Pending 
[ipn_track_id] => 8c7559d39005 

IPN 2:TXN已通過IPR(請注意,掛起原因已經改變!)

[payment_status] => Pending 
[txn_id] => 0CD48848U16230847 
[pending_reason] => authorization 
[txn_type] => express_checkout 
[auth_status] => Pending 
[ipn_track_id] => 8c7559d39005 
+0

我已經用db時間戳和其他'doublechecks'解決了這個問題,但是你說什麼是有道理的,並且回答了我的問題。公認! – bazsibazsi 2015-10-04 15:05:08